Partilhar via


Tiras Triângulos

Uma faixa de triângulo é uma série de triângulos conectados. Como os triângulos estão conectados, o aplicativo não precisa especificar repetidamente todos os três vértices para cada triângulo. Por exemplo, você precisa de apenas sete vértices para definir a seguinte faixa de triângulo.

ilustração de uma tira de triângulo com sete vértices

O sistema usa vértices v1, v2 e v3 para desenhar o primeiro triângulo; v2, v4 e v3 para desenhar o segundo triângulo; v3, v4 e v5 para desenhar o terceiro; v4, v6 e v5 para empatar o quarto; e assim por diante. Observe que os vértices do segundo e quarto triângulos estão fora de ordem; Isso é necessário para garantir que todos os triângulos sejam desenhados no sentido horário.

A maioria dos objetos em cenas 3D são compostos por tiras de triângulo. Isso ocorre porque as tiras de triângulo podem ser usadas para especificar objetos complexos de uma forma que faça uso eficiente da memória e do tempo de processamento.

A ilustração a seguir mostra uma faixa de triângulo renderizada.

ilustração de uma tira de triângulo renderizada

O código a seguir mostra como criar vértices para essa faixa de triângulo.

struct CUSTOMVERTEX
{
float x,y,z;
};

CUSTOMVERTEX Vertices[] = 
{
    {-5.0, -5.0, 0.0},
    { 0.0,  5.0, 0.0},
    { 5.0, -5.0, 0.0},
    {10.0,  5.0, 0.0},
    {15.0, -5.0, 0.0},
    {20.0,  5.0, 0.0}
};

O exemplo de código abaixo mostra como renderizar essa faixa de triângulo no Direct3D 9 usando IDirect3DDevice9::D rawPrimitive.

//
// It is assumed that d3dDevice is a valid
// pointer to a IDirect3DDevice9 interface.
//
d3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 4);

Use uma faixa de triângulo para renderizar triângulos que não estão conectados entre si. Para fazer isso, especifique um triângulo degenerado (ou seja, um triângulo cuja área é zero) na lista de triângulos. Isso cria uma linha entre os dois triângulos que não renderizará. Para renderizar apenas o primeiro e o último triângulos do exemplo anterior, modifique o buffer de vértice conforme mostrado aqui:

CUSTOMVERTEX Vertices[] =
{
    {-5.0, -5.0, 0.0},
    { 0.0,  5.0, 0.0},
    { 5.0, -5.0, 0.0},
    { 5.0, -5.0, 0.0}, // degenerate triangle
    {10.0,  5.0, 0.0}, // degenerate triangle
    {10.0,  5.0, 0.0},
    {15.0, -5.0, 0.0},
    {20.0,  5.0, 0.0}
};

Primitivos