Freigeben über


Dreiecksstreifen

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

Abbildung eines Dreiecksstreifens mit sieben Scheitelpunkten

Das System verwendet 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 den dritten zu zeichnen; v4, v6 und v5, um den vierten zu zeichnen; Und so weiter. Beachten Sie, dass die Scheitelpunkte der zweiten und vierten Dreiecke nicht in ordnung 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 der Arbeitsspeicher und die 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}
};

Das folgende Codebeispiel zeigt, wie Sie diesen Dreiecksstreifen in Direct3D 9 mit IDirect3DDevice9::D rawPrimitiverendern.

//
// 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 dazu ein entgenerates Dreieck (d. h. ein Dreieck, dessen Bereich null ist) in der Dreiecksliste an. Dadurch wird eine Linie zwischen den beiden Dreiecken erstellt, die nicht gerendert werden. 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}
};

Grundtypen