Dreieckslisten
Eine Dreiecksliste ist eine Liste isolierter Dreiecke. Möglicherweise befinden sie sich in der Nähe. Eine Dreiecksliste muss mindestens drei Scheitelpunkte aufweisen, und die Gesamtanzahl der Scheitelpunkte muss durch drei divisierbar 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, das scheinbar Licht auf die Dreiecksliste sendet. Jedes Dreieck in der Wand scheint leuchtet. Die Szene hinter der Wand wird teilweise durch die Lücken zwischen den Dreiecken sichtbar, da ein Spieler beim Betrachten eines Kraftfelds möglicherweise erwartet.
Dreieckslisten eignen sich auch zum Erstellen von Grundtypen mit scharfen Kanten und werden mit Gouraud-Schattierung schattiert. Siehe Face and Vertex Normal Vectors (Direct3D 9).
Die folgende Abbildung zeigt eine gerenderte 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 mit 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 entgenerates Dreieck (d. r. ein Dreieck mit Nullgröße) in der Liste an. Dadurch wird eine Linie zwischen den beiden Dreiecken erstellt, die beim Rendern nicht angezeigt werden. 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}
};
Verwandte Themen