Condividi tramite


Elenchi di triangoli

Un elenco di triangoli è un elenco di triangoli isolati. Potrebbero o non essere vicini l'uno all'altro. Un elenco di triangoli deve avere almeno tre vertici e il numero totale di vertici deve essere divisibile per tre.

Utilizzare elenchi di triangoli per creare un oggetto composto da parti non contigue. Ad esempio, un modo per creare una parete di campo forzato in un gioco 3D consiste nel specificare un elenco di triangoli piccoli e non connessi. Applicare quindi un materiale e una trama che sembra emettere luce all'elenco di triangoli. Ogni triangolo nella parete sembra brillare. La scena dietro il muro diventa parzialmente visibile attraverso le lacune tra i triangoli, come un giocatore potrebbe aspettarsi quando si guarda un campo di forza.

Gli elenchi di triangoli sono utili anche per la creazione di primitive con bordi taglienti e ombreggiati con ombreggiatura Gouraud. Vedere Vettori normali viso e vertice (Direct3D 9).

La figura seguente illustra un elenco di triangoli di cui è stato eseguito il rendering.

illustrazione di un elenco di triangoli di cui è stato eseguito il rendering

Il codice seguente illustra come creare vertici per questo elenco 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 mostra come eseguire il rendering di questo elenco 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_TRIANGLELIST, 0, 2 );

È anche possibile usare strisce di triangoli per eseguire il rendering di triangoli non connessi tra loro. A tale scopo, specificare un triangolo degenerato (ovvero un triangolo con dimensioni zero) nell'elenco; verrà creata una linea tra i due triangoli che non verranno visualizzati durante il rendering. Ad esempio, per eseguire il rendering solo del primo e dell'ultimo triangolo dell'esempio precedente, inizializzare il buffer dei vertici con i vertici seguenti:

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