Треугольная полоса и вырожденные треугольники
мой вопрос может быть глупым, но я не нашел хорошего примера использования треугольной полосы:
http://i.stack.imgur.com/KL8jk.png
С такими вершинами:
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 ответов
Если вы используете отбраковку backface, две конфигурации не дадут одинакового результата. В случае ABCD BCD против часовой стрелки, тогда как в случае ABCCBD CBD против часовой стрелки. Правильный способ нарисовать два квадрата будет зависеть от того, заботитесь ли вы об ориентации. Я бы предложил ABCDDEEFGH.
я лично не думаю, что написание отдельных патчей в одной треугольной полосе упрощает написание кода или его легко понять. Если вы не можете измерить разницу в производительности, я бы посоветовал использовать раствор А или Б.
решение A: отправить две отдельные команды рисования треугольной полосы
drawElements(TRIANGLE_STRIP, [A, B, C, D]);
drawElements(TRIANGLE_STRIP, [E, F, G, H]);
решение B: отправить один GL_TRIANGLES
команда с двумя отдельными патчами
drawElements(TRIANGLES, [A, B, C,
C, B, D,
E, F, G,
G, F, H]);
решение C: решение треугольной полосы вы попросили
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