В OpenGL ES 2.0, как я могу нарисовать каркас из треугольников, кроме линий на смежных копланарных гранях? - PullRequest
4 голосов
/ 30 июля 2011

Я смутно помню, что видел что-то в OpenGL (не ES, который все еще был на v1.0 на iPhone, когда я сталкивался с этим, именно поэтому я никогда не использовал его), который позволяет мне указать, какие края моих полигонов считались контурамипротив тех, которые составляли внутреннюю часть лица.Таким образом, это не то же самое, что контур всей модели (что я знаю, как это сделать), а скорее контур плоской грани со всеми ее трис, в основном смешанными в одну поли.Например, в кубе, состоящем из три, каждое лицо на самом деле - два триса.Я хочу сделать контур квадрата, но не диагональ по лицу.То же самое с шестигранником.Это займет четыре триса, но только один контур для лица.

Теперь да, я знаю, я могу просто проверить все края, чтобы увидеть, имеют ли они общие компланарные лица, но я мог бы поклясться, я помню, что видел где-то, когда выВы определяете данные с тремя сетками, где вы можете сказать: «эта линия очерчивает лицо, тогда как эта находится внутри лица».Таким образом, при рендеринге вы можете установить флаг, который в основном говорит: «Дайте мне каркас, но только провода вокруг краев полных граней, а не вокруг трис, которые их составляют».

Кстати, моя цельэто все платформы, которые поддерживают OpenGL ES 2.0, но моей платформой для разработки является iOS.Опять же, это, я уверен, изначально было в OpenGL и, возможно, устарело после появления шейдеров, но я даже не могу найти ссылку на эту функцию, чтобы проверить, так ли это.

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

1 Ответ

3 голосов
/ 30 июля 2011

GL_QUADS, glEdgeFlag и glPolygonMode не поддерживаются в OpenGL ES.

Вы можете использовать ЛИНИИ для рисования каркаса: чтобы получить скрытые линии, сначала нарисуйте черные заполненные треугольники (с включенной DEPTH), а затем нарисуйте интересующие вас края с помощью GL_LINES.

...