Opengl неправильной формы цветовой заливки - PullRequest
1 голос
/ 11 ноября 2009

Я рисую 5 угловых звезд с GL_LINES. Когда я использую GL_POLYGON, он искажает форму звезды и соединяет первую и последнюю вершины. Помогите пожалуйста :(?

Ответы [ 3 ]

4 голосов
/ 11 ноября 2009

Современные видеокарты не могут рисовать 3D-полигоны; они рисуют только треугольники. Поэтому, когда вы используете GL_POLYGON, водитель должен разбить его на треугольники. Возможно, этот процесс прервется в вашем случае. Я предлагаю создавать треугольники самостоятельно. В вашем случае добавьте центральную точку и используйте GL_TRIANGLE_FAN для создания непрерывной сетки.

2 голосов
/ 11 ноября 2009

Для конкретного случая пятиконечной звезды предложение Аарона об использовании треугольного веера с базовой вершиной в центре прекрасно работает! Обратите внимание, что звезда - это вогнутый многоугольник; GL_POLYGON может отображать только выпуклый многоугольник.

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

Красная книга также описывает интересный трюк для быстрого рисования вогнутых полигонов с использованием буфера трафарета и простого старого веерного треугольника. Техника трафарета действительно приятна, но она может быть более изящной, чем то, что вам действительно нужно.

1 голос
/ 14 ноября 2009

Для рендеринга с GL_POLYGON в OpenGL необходимо, чтобы точки были копланарными, а результирующий многоугольник - выпуклым. Звезда, которую вы описали, не будет выпуклой, а значит, неопределенным поведением.

...