Dreieckslisten

Eine Dreiecksliste ist eine Liste isolierter Dreiecke. Möglicherweise sind sie nahe beieinander. Eine Dreiecksliste muss mindestens drei Scheitelpunkte aufweisen, und die Gesamtanzahl der Scheitelpunkte muss um drei dividierbar sein.

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

Dreieckslisten sind auch hilfreich zum Erstellen von Grundtypen mit scharfen Kanten und werden mit Gouraud-Schattierung schattiert. Siehe Face and Vertex Normal Vectors (Direct3D 9).

In der folgenden Abbildung wird eine gerenderte Dreiecksliste dargestellt.

illustration of a rendered triangle list

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 ein degeneres Dreieck (also ein Dreieck mit Nullgröße) in der Liste an; Dadurch wird eine Linie zwischen den beiden Dreiecken erstellt, die während des Renderns nicht angezeigt werden. Wenn Sie beispielsweise nur das erste und letzte Dreieck aus dem vorherigen Beispiel rendern möchten, 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