Треугольная полоса и вырожденные треугольники
Мой вопрос может быть глупым, но я не нашел хорошего примера использования треугольной полосы:
С такими вершинами:
A: -0.5f, -0.5f, // Bottom left.
B: -0.5f, 0.5f, // Top left.
C: 0.5f, -0.5f, // Bottom Right.
D: 0.5f, 0.5f // Top right.
----------------------------------
B--D
|\ |
| \|
A--C
Иногда в примерах мы можем найти эту конфигурацию:
- A, B, C, C, B, D
или это:
- A, B, C, D
Что правильно? Я пробовал и то и другое работает.
Теперь я хотел бы использовать вырожденный треугольник, чтобы объединить два квадрата.
B--D F--H
|\ | |\ |
| \| | \|
A--C E--G
Вот что у меня есть:
ABCD + DEEF + EFGH
Но и здесь у меня иногда появляются артефакты.
2 ответа
Если вы используете отбраковку задней поверхности, две конфигурации не будут давать одинаковый результат. В случае ABCD BCD против часовой стрелки, тогда как в случае ABCCBD CBD против часовой стрелки. Правильный способ рисования двух квадов зависит от того, заботишься ли ты об ориентации. Я бы предложил ABCDDEEFGH.
Лично я не думаю, что написание отдельных патчей в одной полосе треугольника делает код простым для написания или понятным. Если вы не можете измерить разницу в производительности, я бы посоветовал использовать решение A или B.
Решение A: Отправьте две отдельные команды рисования треугольной полосы
drawElements(TRIANGLE_STRIP, [A, B, C, D]);
drawElements(TRIANGLE_STRIP, [E, F, G, H]);
Решение Б: Отправить GL_TRIANGLES
команда с двумя отдельными патчами
drawElements(TRIANGLES, [A, B, C,
C, B, D,
E, F, G,
G, F, H]);
Решение C: Решение Triangle Strip, о котором вы просили
drawElements(TRIANGLE_STRIP, [A, B, C, D,
D, E,
E, F, G, H]);
Решение C рисует треугольники
.A B C
C B D
.C D D - deg
D D E - deg
.D E E - deg
E E F - deg
.E F G
G F H