#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 можно найти здесь .