Тесселлатинг Многоугольников
OpenGL может напрямую отображать только простые многоугольники. Многоугольник прост, если:
- Края пересекаются только в вершинах.
- Повторяющиеся вершины отсутствуют.
- Точно два края встречаются на любой вершине.
Чтобы отобразить простые многоугольники или простые многоугольники, содержащие отверстия, необходимо сначала триангуляция многоугольников (подразделять их на выпуклые многоугольники). Такое деление называется тесселяции. GLU предоставляет коллекцию функций, выполняющих тесселяции. Обратите внимание, что функции тесселяции GLU не могут обрабатывать многоугольники, не являющиеся многоугольниками; Нет стандартного метода OpenGL для обработки таких многоугольников.
Так как тесселяции часто требуются и могут быть довольно сложными, в этом разделе подробно описаны функции тесселяции GLU. Эти функции принимают в качестве входных произвольных простых многоугольников, которые могут включать отверстия, и они возвращают некоторые сочетания треугольников, сетк треугольников и вентиляторов треугольников. Если вы не хотите работать с сетками или вентиляторами, можно указать, что функции тесселяции возвращают только треугольники. Однако сведения о сетке и вентиляторе повышают производительность. Функции многоугольника тесселяции триангуляция вогнутой многоугольник с одним или несколькими контурами.
Использование многоугольника
Создайте объект тесселяции с gluNewTess.
Используйте gluTessCallBack для определения функций обратного вызова, которые будут использоваться для обработки треугольников, созданных tessellator.
С помощью gluBeginPolygon, gluTessVertex, gluNextContContourи gluEndPolygon, укажите многоугольник с отверстиями или согнутым многоугольником, чтобы быть тесселлированным.
По завершении описания многоугольника средство тесселяции вызывает функции обратного вызова по мере необходимости.
Вы можете уничтожить ненужные объекты тесселяции с помощью gluDeleteTess.
Дополнительные сведения о сохранении данных тесселяции см. в использовании функций обратного вызова.