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
- Primitive Adjacency
- Windungsrichtung und führende Vertexpositionen
- Generieren mehrerer Strips
- Zugehörige Themen
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.
Die Symbole in der vorherigen Abbildung werden in der folgenden Tabelle beschrieben.
Symbol | name | BESCHREIBUNG |
---|---|---|
Scheitelpunkt | Ein Punkt im 3D-Raum. | |
Windungsrichtung | Die Scheitelpunktreihenfolge beim Zusammensetzen eines Grundtyps. Kann im Uhrzeigersinn oder gegen den Uhrzeigersinn sein; Geben Sie dies an, indem Sie ID3D11Device1::CreateRasterizerState1 aufrufen. | |
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.
Zugehörige Themen