Faixa de triângulos
![](http://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Faixa_de_Triangulos.svg/220px-Faixa_de_Triangulos.svg.png)
Uma faixa de triângulos (em inglês, "triangle strip") é uma série de triângulos conectados compartilhando vértices, permitindo uma utilização mais eficiente da memória em computação gráfica. Elas são mais eficientes do que vastas listas de triângulos sem indexação, mas, geralmente, igualmente rápidas ou até mais lentas do que listas de triângulos indexados.[1][2] A razão principal para usar faixas de triângulos é reduzir a quantidade de dados necessária para criar uma série de triângulos. O número de vértices armazenado na memória é reduzido de 3N para N+2, onde N é o número de triângulos a ser desenhado. Isso permite o uso de menos espaço em disco, bem como carregamento mais rápido na memória RAM.
Por exemplo, os quatro triângulos no diagrama, sem usar uma faixa de triângulos, teriam que ser armazenados e interpretados como quatro triângulos: ABC, CBD, CDE, e o FED. No entanto, com a utilização de uma faixa de triângulos, eles podem ser armazenados apenas como uma sequência de vértices ABCDEF. Esta sequência seria então decodificada como um conjunto de triângulos ABC, BCD, CDE e DEF, e, em seguida, todos os triângulos pares (contando a partir de 1) seriam invertidos, resultando nos triângulos originais.
Propriedades e construção
[editar | editar código-fonte]Segue da definição que uma sub-sequência de vértices de uma faixa de triângulos também representa uma faixa de triângulos. No entanto, se esta sub-faixa começar em um vértice par (com contagem de base 1), os triângulos resultantes terão sua orientação alterada. Por exemplo, uma sub-faixa BCDEF representaria os triângulos BCD, DCE, DEF.
Da mesma forma, reverter os vértices de uma faixa resultará no mesmo conjunto de triângulos se a faixa tiver um número par de vértices. (por exemplo, a faixa FEDCBA vai representar os mesmos triângulos FED, ECD, DCB, CAB, que a faixa original). No entanto, se uma faixa que tem um número ímpar de vértices, invertida, ela irá representar triângulos com orientação oposta. Por exemplo, a reversão de uma faixa ABCDE resulta na faixa EDCBA que representa os triângulos ECD, DBC, CBA).
A conversão de uma malha poligonal em uma única longa faixa de triângulos era, até recentemente, impossível. Normalmente, as faixas de triângulos são análogas a um conjunto de loops de arestas e os pólos do modelo são representadas por um leque de triângulos. Ferramentas como Stripe[3] ou FTSG[4] representam modelos como várias faixas. Agrupar um conjunto de faixas de triângulos de forma ideal foi provado ser NP-completo.[5]
Uma faixa pode ser denominada faixa degenerada se contém triângulos de área zero, que o software ou hardware de processamento irá descartar. Os triângulos degenerados efetivamente introduzem descontinuidades ou "pulos" na faixa. Por exemplo, a malha no diagrama poderia ser representada como ABCDDFFEDC, o que seria interpretado como triângulos ABC, CBD, CDD, DDF, DFF, FFE, FED e DEC (triângulos degenerados marcados em itálico). Observe como essa faixa primeiro cria dois triângulos a partir da esquerda, e depois reinicia e constrói os outros dois da direita.
Descontinuidades em faixas de triângulos sempre podem ser implementadas reenviando vértices, e muitas APIs suportam esse recurso explicitamente. IRIS GL suporta "swaps" (trocar dois vértices subsequentes em uma faixa), um recurso invocado por algoritmos antigos, como o SGI. Recentemente, OpenGL/DirectX podem processar várias faixas de triângulos sem triângulos degenerados usando o recurso de "Primitive Restart".
Referências
[editar | editar código-fonte]- ↑ «Best Practices for Working with Vertex Data»
- ↑ «To Strip or Not To Strip»
- ↑ Azanli, Elvir.
- ↑ Xiang, Xinyu.
- ↑ Regina Estkowski, Joseph S. B. Mitchell, Xinyu Xiang.