glDrawElements рисует полигон

#c #opengl #3d #polygon

#c #opengl #3D #полигон

Вопрос:

Я читал, что первым параметром glDrawElements является режим: http://www.opengl.org/sdk/docs/man3/xhtml/glDrawElements.xml

Принимаются символьные константы GL_POINTS, GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES, GL_LINE_STRIP_ADJACENCY, GL_LINES_ADJACENCY, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_TRIANGLES, GL_TRIANGLE_STRIP_ADJACENCY и GL_TRIANGLES_ADJACENCY.

Я не вижу там GL_POLYGON. Означает ли это, что я не могу использовать GL_POLYGON? а если у меня 10 индексов? Нужно ли мне преобразовать его в несколько полигонов, каждый из которых содержит по 3 индекса? Если это правда, как мне это сделать?

Ответ №1:

Справочные страницы уровня GL3 и GL4 на www.opengl.org документируйте только основной профиль OpenGL. GL_POLYGON устарел и не был частью основного профиля, когда спецификация была разделена на профили ядра и совместимости в OpenGL 3.2.

Вы все равно можете использовать GL_POLYGON , если создаете контекст, поддерживающий профиль совместимости. Но если вы начинаете, я бы посоветовал вам придерживаться основных функций профиля. Если вам действительно нужна документация для устаревших функций, вам придется вернуться к справочным страницам GL2.

Чтобы нарисовать полигон, GL_TRIANGLE_FAN это самая простая замена. Вы можете использовать тот же набор вершин для веера треугольника, что и для GL_POLYGON , и это приведет к тому же результату.

Комментарии:

1. Почему GL_POLYGON он устарел? Я проверил с GL_POLYGON помощью и с GL_TRIANGLE_FAN помощью, и FPS остается неизменным.

2. Оба GL_POLYGON и GL_QUADS были удалены. Полигоны и квадратики открывают кучу проблем (что, если вы отправите неплоский полигон? что делать, если ваш полигон не выпуклый? как вы интерполируете значения между вершинами полигона? как вы их обрезаете?). Просто триангулируйте свои грани самостоятельно и отправляйте треугольники. Для этого существуют библиотеки.

3. Как называются эти библиотеки?

4. Кстати, это не последние страницы руководства, как вы утверждаете. Это страницы руководства GL3. Вы можете сказать это, потому что последними страницами руководства являются GL4, которые включают GL_PATCHES в себя в качестве примитивного типа для шейдеров тесселяции.

5. Извините за «последнюю» формулировку в исходном ответе, которая в лучшем случае была неоднозначной. Я исправил ответ, чтобы быть более точным. Я всегда считал 3.2 первой версией с базовым профилем, потому что это первая версия, в которой я вижу отдельные документы спецификации.

Ответ №2:

Кстати, вы ссылаетесь на страницы руководства GL3.

Поскольку GL_POLYGON он устарел в версии 3.0 и удален в версии 3.1, вы не найдете его в списке. На самом деле, вы найдете там некоторые токены, которые поддерживаются только в GL 3.2 (примитивы смежности, которые были введены, когда были геометрические шейдеры); к счастью, это фактически задокументировано на самой странице руководства, в отличие от того факта, который GL_POLYGON был устаревшим.

Для получения профилей совместимости (которые вы используете) вам следует просмотреть страницу руководства GL2. Справочную страницу GL2 можно найти здесь .