Freigeben über


Primitive Topologien

Direct3D 10 und höher unterstützt mehrere primitive Typen (oder Topologien), die durch den D3D_PRIMITIVE_TOPOLOGY aufgezählten Typ dargestellt werden. Diese Typen definieren, wie Scheitelpunkte von der Pipeline interpretiert und gerendert werden.

Grundlegende primitive Typen

Die folgenden grundlegenden primitiven Typen werden unterstützt:

Eine Visualisierung jedes primitiven Typs finden Sie im Diagramm weiter unten in diesem Thema unter Windungsrichtung und Führende Vertexpositionen.

Die Input-Assembler-Phase liest Daten aus Vertex- und Indexpuffern, setzt die Daten zu diesen Grundtypen zusammen und sendet die Daten dann an die verbleibenden Pipelinephasen. (Sie können die ID3D11DeviceContext::IASetPrimitiveTopology-Methode verwenden, um den primitiven Typ für die Eingabe-Assembler-Phase anzugeben.)

Primitive Adjacency

Alle Typen von Direct3D 10 und höher (mit Ausnahme der Punktliste) sind in zwei Versionen verfügbar: ein primitiver Typ mit Adjacency und ein primitiver Typ ohne Nebensenz. Primitive mit Adjacency enthalten einige der umgebenden Scheitelpunkte, während Primitive ohne Adjazenz nur die Scheitelpunkte des Zielgrundtyps enthalten. Beispielsweise verfügt der Zeilenlistengrundtyp (dargestellt durch den D3D_PRIMITIVE_TOPOLOGY_LINELIST-Wert ) über einen entsprechenden Zeilenlistengrundtyp, der die Nebensenz (dargestellt durch den D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ-Wert ) enthält.

Benachbarte Grundtypen sollen weitere Informationen zu Ihrer Geometrie bereitstellen und sind nur über einen Geometrie-Shader sichtbar. Adjacency ist nützlich für Geometrieshader, die Silhouettenerkennung, Schattenvolumenextrusion usw. verwenden.

Angenommen, Sie möchten eine Dreiecksliste mit Adjacency zeichnen. Eine Dreiecksliste, die 36 Scheitelpunkte (mit Adjacency) enthält, ergibt sechs abgeschlossene Grundtypen. Primitive mit Adjacency (mit Ausnahme von Linienstreifen) enthalten genau doppelt so viele Scheitelpunkte wie der äquivalente Grundtyp ohne Adjazenz, wobei jeder zusätzliche Scheitelpunkt ein angrenzender Scheitelpunkt ist.

Windungsrichtung und führende Vertexpositionen

Wie in der folgenden Abbildung gezeigt, ist ein führender Scheitelpunkt der erste nicht angrenzende Scheitelpunkt in einem Grundtyp. Für einen primitiven Typ können mehrere führende Scheitelpunkte definiert sein, solange jeder für einen anderen Grundtyp verwendet wird. Bei einem Dreiecksstreifen mit Adjacency sind die führenden Scheitelpunkte 0, 2, 4, 6 usw. Bei einem Linienstreifen mit Adjacency sind die führenden Scheitelpunkte 1, 2, 3 usw. Ein angrenzender Grundtyp hingegen weist keinen führenden Scheitelpunkt auf.

Die folgende Abbildung zeigt die Vertexreihenfolge für alle primitiven Typen, die der Eingabeassesser erzeugen kann.

Diagramm der Vertexreihenfolge für primitive Typen

Die Symbole in der vorherigen Abbildung werden in der folgenden Tabelle beschrieben.

Symbol name BESCHREIBUNG
Symbol für einen Scheitelpunkt Scheitelpunkt Ein Punkt im 3D-Raum.
Symbol für die Windrichtung Windungsrichtung Die Scheitelpunktreihenfolge beim Zusammensetzen eines Grundtyps. Kann im Uhrzeigersinn oder gegen den Uhrzeigersinn sein; Geben Sie dies an, indem Sie ID3D11Device1::CreateRasterizerState1 aufrufen.
Symbol für führenden Scheitelpunkt Führender Scheitelpunkt Der erste nicht angrenzende Scheitelpunkt in einem Grundtyp, der Daten pro Konstante enthält.

 

Generieren mehrerer Strips

Sie können mehrere Streifen durch Streifenschneiden generieren. Sie können einen Strip cut durchführen, indem Sie explizit die RestartStrip HLSL-Funktion aufrufen oder einen speziellen Indexwert in den Indexpuffer einfügen. Dieser Wert ist –1, der für 32-Bit-Indizes oder 0xffff für 16-Bit-Indizes 0xffffffff wird. Ein Index von –1 gibt einen expliziten "Ausschneiden" oder "Neustart" des aktuellen Strips an. Der vorherige Index schließt den vorherigen Grundtyp oder Strip ab, und der nächste Index startet einen neuen Grundtyp oder Strip. Weitere Informationen zum Generieren mehrerer Strips finden Sie unter Geometry-Shader Stage.

Hinweis

Sie benötigen Hardware der Featureebene 10.0 oder höher, da nicht alle Hardware mit 10level9 diese Funktionalität implementiert.

 

Erste Schritte mit der Input-Assembler Stage

Pipelinephasen (Direct3D 10)