Dreieckslisten

Eine Dreiecksliste ist eine Liste isolierter Dreiecke. Sie könnten sich nahe beieinander befinden oder auch nicht. Eine Dreiecksliste muss mindestens drei Scheitelpunkte aufweisen, und die Gesamtzahl der Scheitelpunkte muss durch drei teilbar sein.

Verwenden Sie Dreieckslisten, um ein Objekt zu erstellen, das aus nicht zusammenhängenden Teilen besteht. Für instance besteht eine Möglichkeit zum Erstellen einer Kraftfeldwand in einem 3D-Spiel darin, eine große Liste kleiner, nicht verbundener Dreiecke anzugeben. Wenden Sie dann ein Material und eine Textur an, die Licht ausgibt, auf die Dreiecksliste. Jedes Dreieck in der Wand scheint zu leuchten. Die Szene hinter der Wand wird teilweise durch die Lücken zwischen den Dreiecken sichtbar, wie es ein Spieler beim Betrachten eines Kraftfelds erwarten könnte.

Dreieckslisten sind auch nützlich, um Primitive zu erstellen, die scharfe Kanten aufweisen und mit Gouraud-Schattierung schattiert sind. Siehe Gesichts- und Vertex-Normalvektoren (Direct3D 9).

Die folgende Abbildung zeigt eine gerenderte Dreiecksliste.

Abbildung einer gerenderten Dreiecksliste

Der folgende Code zeigt, wie Scheitelpunkte für diese Dreiecksliste erstellt werden.

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}

};

Das folgende Codebeispiel zeigt, wie Sie diese Dreiecksliste in Direct3D 9 mithilfe von IDirect3DDevice9::D rawPrimitive rendern.

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

Sie können auch Dreiecksstreifen verwenden, um Dreiecke zu rendern, die nicht miteinander verbunden sind. Geben Sie dazu in der Liste ein entartetes Dreieck (d. a. ein Dreieck mit der Größe Null) an. Dadurch wird eine Linie zwischen den beiden Dreiecken erstellt, die beim Rendern nicht angezeigt wird. Um beispielsweise nur das erste und letzte Dreieck aus dem vorherigen Beispiel zu rendern, initialisieren Sie den Vertexpuffer mit den folgenden Scheitelpunkten:

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

Primitive