Являются ли функции gluTess* устаревшими?
Я работаю над проектом OpenGL и ищу функциональные возможности триангуляции / тесселяции. Я вижу много ссылок на GLUtessellator
и связанные gluTess*
функции (например, здесь).
Я также использую GLFW, который повторяет снова и снова в своих руководствах, что:
GLU устарела и не должна использоваться в новом коде, но некоторые устаревшие коды требуют этого.
Включает ли это возможность тесселяции? Было бы разумно заглянуть в другую библиотеку для создания сложных полигонов в OpenGL?
3 ответа
GLU - это библиотека. Хотя он делает вызовы OpenGL, на самом деле он не является частью OpenGL. Это не определяется спецификацией OpenGL. Так что эта спецификация не может "устареть" или удалить ее.
Тем не менее, GLU выполняет большую часть своей работы через функции OpenGL, которые были удалены из ядра OpenGL. GLU не следует использовать, если вы пытаетесь использовать ядро OpenGL.
Вот небольшое дополнение. Здесь следует отметить, что в отношении оригинала существуют
gluTess*
реализация также более современных альтернатив, которые следуют исходной концепции с точки зрения простоты и универсальности.
Примечательной альтернативой является
Libtess2
, переработанная версия оригинальной библиотеки libtess.
https://github.com/memononen/libtess2
Он использует другой API, который немного напоминает API массива вершин OpenGL. Однако кажется, что libtess2 превосходит исходную эталонную реализацию GLU «на порядок». ;-)
Текущий официальный принцип тесселяции OpenGL 4.0 требует явно совместимого оборудования графического процессора. (Это, скорее всего, верно для всего оборудования, совместимого с DirectX 11 и новее.) Более подробную информацию о текущей концепции тесселяции OpenGL можно найти здесь:
Этот новый алгоритм лучше, когда ему нужны качество сетки, надежность, оптимизация по Делоне и другие.
Он генерирует сетку и контур в одном цикле для случаев, когда клейкости требуется несколько. Он поддерживает гораздо больше режимов, но на 100% совместим с gluModies. Он запрограммирован и оптимизирован для C++ x86 / x64 с устанавливаемым COM-интерфейсом. Его также можно использовать из C# без регистрации COM. Та же реализация также доступна в виде версии C#, которая работает примерно вдвое медленнее (современная NET Framwork 4.7.2).
Он выполняет вычисления с типом Variant, который поддерживает различные форматы: float, double и Rational для неограниченной точности и надежности. В этом режиме автомат Эпсилон = 0, никаких ошибок возникать не может. Абсолютная точность.
Если вы хотите добиться аналогичных качеств с помощью алгоритма клейкости, вам потребуется в 3 раза больше времени, включая комплексные исправления для удаления Т-образных соединений и оптимизации сетки.
Код можно бесплатно получить по адресу: