Freigeben über


Dreiecksstreifen

Ein Dreiecksstreifen ist eine Reihe verbundener Dreiecke. Da die Dreiecke verbunden sind, muss die Anwendung nicht alle drei Scheitelpunkte für jedes Dreieck wiederholt angeben. Beispielsweise benötigen Sie nur sieben Scheitelpunkte, um den folgenden Dreiecksstreifen zu definieren.

Abbildung eines Dreiecksstreifens mit sieben Scheitelpunkten

Das System verwendet die Scheitelpunkte v1, v2 und v3, um das erste Dreieck zu zeichnen. v2, v4 und v3 zum Zeichnen des zweiten Dreiecks; v3, v4 und v5, um die dritte zu zeichnen; v4, v6 und v5 zum Zeichnen des vierten; Und so weiter. Beachten Sie, dass die Scheitelpunkte des zweiten und vierten Dreiecks in ungeordneter Reihenfolge sind. Dies ist erforderlich, um sicherzustellen, dass alle Dreiecke im Uhrzeigersinn gezeichnet werden.

Die meisten Objekte in 3D-Szenen bestehen aus Dreiecksstreifen. Dies liegt daran, dass Dreiecksstreifen verwendet werden können, um komplexe Objekte so anzugeben, dass Arbeitsspeicher und Verarbeitungszeit effizient genutzt werden.

Die folgende Abbildung zeigt einen gerenderten Dreiecksstreifen.

Abbildung eines gerenderten Dreiecksstreifens

Der folgende Code zeigt, wie Scheitelpunkte für diesen Dreiecksstreifen 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}
};

Im folgenden Codebeispiel wird gezeigt, wie Sie diesen Dreiecksstreifen 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_TRIANGLESTRIP, 0, 4);

Verwenden Sie einen Dreiecksstreifen, um Dreiecke zu rendern, die nicht miteinander verbunden sind. Geben Sie hierzu ein entartetes Dreieck (d. h. ein Dreieck, dessen Fläche null ist) in der Dreiecksliste an. Dadurch wird eine Linie zwischen den beiden Dreiecken erstellt, die nicht gerendert wird. Um nur die ersten und letzten Dreiecke aus dem vorherigen Beispiel zu rendern, ändern Sie den Vertexpuffer wie hier gezeigt:

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