Condividi tramite


Strisce triangoli

Una striscia di triangoli è una serie di triangoli connessi. Poiché i triangoli sono connessi, l'applicazione non deve specificare ripetutamente tutti e tre i vertici per ogni triangolo. Ad esempio, sono necessari solo sette vertici per definire la striscia di triangoli seguente.

illustrazione di una striscia di triangoli con sette vertici

Il sistema usa vertici v1, v2 e v3 per disegnare il primo triangolo; v2, v4 e v3 per disegnare il secondo triangolo; v3, v4 e v5 per disegnare il terzo; v4, v6 e v5 per disegnare il quarto; E così via. Si noti che i vertici del secondo e quarto triangolo sono fuori ordine; questo è necessario per assicurarsi che tutti i triangoli vengano disegnati in un orientamento orario.

La maggior parte degli oggetti nelle scene 3D è costituita da strisce triangolari. Ciò è dovuto al fatto che le strisce triangolari possono essere usate per specificare oggetti complessi in modo da sfruttare in modo efficiente il tempo di memoria e di elaborazione.

La figura seguente illustra una striscia di triangoli di cui è stato eseguito il rendering.

illustrazione di una striscia di triangoli di rendering

Il codice seguente illustra come creare vertici per questa striscia di triangoli.

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}
};

L'esempio di codice seguente illustra come eseguire il rendering di questa strip di triangoli in 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);

Usare una striscia di triangoli per eseguire il rendering dei triangoli che non sono connessi tra loro. A tale scopo, specificare un triangolo degenerato , ovvero un triangolo la cui area è zero) nell'elenco triangolo. In questo modo viene creata una linea tra i due triangoli che non verranno sottoposti a rendering. Per eseguire il rendering solo dei primi e degli ultimi triangoli dell'esempio precedente, modificare il buffer del vertice, come illustrato di seguito:

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}
};

Primitives