Треугольная полоса и вырожденные треугольники

мой вопрос может быть глупым, но я не нашел хорошего примера использования треугольной полосы:

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