Поделиться через


Тесселлирование многоугольников

OpenGL может напрямую отображать только простые выпуклые многоугольник. Многоугольник прост, если:

  • Ребра пересекаются только на вершинах.
  • Повторяющиеся вершины отсутствуют.
  • Ровно два края встречаются на любой вершине.

Для отображения простых неконвеклических многоугольников или простых многоугольников, содержащих отверстия, необходимо сначала выполнить триангуляцию многоугольников (разделить их на выпуклые многоугольики). Такое деление называется тесселяции. GLU предоставляет коллекцию функций, которые выполняют тесселяции. Обратите внимание, что функции тесселяции GLU не могут обрабатывать несимвные многоугольник. Нет стандартного метода OpenGL для обработки таких многоугольников.

Так как тесселяции часто требуется и может быть довольно сложной задачей, в этом разделе подробно описаны функции тесселяции GLU. Эти функции принимают в качестве входных данных произвольные простые многоугольник, которые могут содержать отверстия, и возвращают некоторую комбинацию треугольников, сеток треугольников и треугольников вентиляторов. Если вы не хотите иметь дело с сетками или вентиляторами, можно указать, что функции тесселяции возвращают только треугольники. Однако сведения о сетке и вентиляторе повышают производительность. Функции тесселяции многоугольников триангулируют вогнутый многоугольник с одним или несколькими контурами.

Использование тесселяции многоугольников

  1. Создайте объект тесселяции с помощью gluNewTess.

  2. Используйте gluTessCallBack для определения функций обратного вызова, которые будут использоваться для обработки треугольников, созданных тесселлатором.

  3. С помощью gluBeginPolygon, gluTessVertex, gluNextContour и gluEndPolygon укажите многоугольник с отверстиями или вогнутый многоугольник для тесселяции.

    После завершения описания многоугольника средство тесселяции при необходимости вызывает функции обратного вызова.

    Вы можете уничтожить ненужные объекты тесселяции с помощью gluDeleteTess.

Дополнительные сведения о сохранении данных тесселяции см. в разделе Использование функций обратного вызова.