Получение GLU_TESS_ERROR_5 от GLU Tesselator - PullRequest
1 голос
/ 05 августа 2010

Вот моя проблема. Я тесселяция сложных, самопересечения, многоконтурных полигонов с сотнями вершин. GLU Tesselator аварийно завершает работу с нулевым указателем 0x0000000. Он никогда не падает, когда я не делаю самопересекающиеся полигоны. Если он не пересекается, он никогда не потерпит крах, независимо от обстоятельств. Я проверяю NULL ВЕЗДЕ в моем приложении, я уверен, что это не на моей стороне вещей. Я нашел старую версию GLU 1.2 от SGI, и она никогда не вылетает, однако обе версии: mesa и Windows, основанные на GLU 1.3, вылетают. Ничто не вылетает в режиме отладки достаточно странно. Чтобы получить больше информации, я скомпилировал GLU в Mesa и увидел, что сначала assert терпит неудачу, затем, если я закомментирую это, есть указатель, который устанавливается в NULL из функции, которая не в состоянии malloc. Я очень не уверен, на данный момент, что делать. Что я мог сделать, чтобы попытаться решить эту проблему? Должен ли я просто попытаться сделать версию GLU Mesa, которая работает для меня? Я просто не уверен, что делать дальше.

После дополнительной отладки я вижу, что получаю GLU_TESS_ERROR_5, что, на мой взгляд, является ошибкой слишком большого числа, но я сделал цикл for для проверки на числа больше этого, но не повезло: (

1 Ответ

1 голос
/ 19 февраля 2011

По крайней мере, в Windows GLU_TESS_ERROR_5 означает, что одна из координат была слишком большой. В частности, GLU требует, чтобы координаты были достаточно малы, чтобы их можно было умножить без переполнения. В спецификации говорится, что предел определяется в константе GLU_TESS_COORD_TOO_LARGE. Если эта константа существует, убедитесь, что абсолютное значение каждой координаты меньше ее. Если нет, я думаю, что было бы безопасно проверить, что координаты находятся между - 10 ^ 150 и 10 ^ 150. Если это не сработает, попробуйте постепенно уменьшать диапазоны.

Может также быть, что есть проблема с геометрией, которая вызывает другую проблему в GLU. Попробуйте найти самый простой многоугольник, который вызовет эту ошибку.

Если это не сработает, посмотрите, доступна ли более новая версия GLU. Я не знаю о Mesa, но версия OpenGL, поставляемая с VC ++, как известно, устарела.

Если ничего не помогает, вы можете попробовать использовать другую библиотеку для выполнения тесселяции. После быстрого поиска, Треугольник 1 кажется хорошим кандидатом.

...