Freigeben über


Primitive Topologien

Direct3D 10 und höher unterstützen mehrere Grundtypen (oder Topologien), die durch den D3D_PRIMITIVE_TOPOLOGY Aufzählungstyp dargestellt werden. Diese Typen definieren, wie Scheitelpunkte von der Pipeline interpretiert und gerendert werden.

Grundlegende Grundtypen

Die folgenden grundlegenden Grundtypen werden unterstützt:

Eine Visualisierung der einzelnen Grundtypen finden Sie im Diagramm weiter unten in diesem Thema in Wicklungsrichtung und führende Vertexpositionen.

Die Eingabeassemblerphase liest Daten aus Vertex- und Indexpuffern, fasst die Daten in diese Grundtypen zusammen und sendet die Daten dann an die verbleibenden Pipelinephasen. (Sie können die ID3D11DeviceContext::IASetPrimitiveTopology Methode verwenden, um den Grundtyp für die Eingabeassemblerphase anzugeben.)

Primitive Adjacency

Alle Direct3D 10- und höheren Grundtypen (mit Ausnahme der Punktliste) sind in zwei Versionen verfügbar: einen Grundtyp mit Angrenzenden und einen Grundtyp ohne Angrenzende. Grundtypen mit Angrenzenden enthalten einige der umgebenden Scheitelpunkte, während Grundtypen ohne Angrenzende nur die Scheitelpunkte des Zielgrundtyps enthalten. Der Grundtyp der Zeilenliste (dargestellt durch den D3D_PRIMITIVE_TOPOLOGY_LINELIST-Wert) weist beispielsweise einen entsprechenden Zeilenlistengrundtyp auf, der die Nähe (dargestellt durch den wert D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ) enthält.)

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

Angenommen, Sie möchten eine Dreiecksliste mit Angrenzenden zeichnen. Eine Dreiecksliste mit 36 Scheitelpunkten (mit Angrenzenden) liefert 6 abgeschlossene Grundtypen. Grundtypen mit Angrenzenden (mit Ausnahme von Linienstreifen) enthalten genau doppelt so viele Scheitelpunkte wie der entsprechende Grundtyp ohne Angrenzende, wobei jeder zusätzliche Scheitelpunkt ein angrenzender Scheitelpunkt ist.

Wicklungsrichtung und führende Vertexpositionen

Wie in der folgenden Abbildung dargestellt, ist ein führender Scheitelpunkt der erste nicht angrenzende Scheitelpunkt in einem Grundtyp. Ein Grundtyp kann mehrere führende Scheitelpunkte definiert haben, solange jeder für einen anderen Grundtyp verwendet wird. Bei einem Dreiecksstreifen mit Angrenzenden sind die führenden Scheitelpunkte 0, 2, 4, 6 usw. Bei einem Linienstreifen mit Angrenzenden sind die führenden Scheitelpunkte 1, 2, 3 usw. Ein angrenzender Grundtyp dagegen hat keinen führenden Scheitelpunkt.

Die folgende Abbildung zeigt die Vertex-Sortierung für alle Grundtypen, die vom Eingabeassembler erzeugt werden können.

Diagramm der Vertex-Sortierung für Grundtypen

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

Symbol Name Beschreibung
-Symbol für einen Scheitelpunkt- Scheitel Ein Punkt im 3D-Raum.
Symbol für die Wicklungsrichtung Wicklungsrichtung Die Scheitelpunktreihenfolge beim Zusammenstellen eines Grundtyps. Kann im Uhrzeigersinn oder gegen den Uhrzeigersinn sein; Geben Sie dies an, indem Sie ID3D11Device1::CreateRasterizerState1aufrufen.
Symbol für führende Vertex- Führender Scheitelpunkt Der erste nicht angrenzende Scheitelpunkt in einem Grundtyp, der daten pro Konstante enthält.

 

Generieren mehrerer Streifen

Sie können mehrere Streifen durch Streifenschnitt generieren. Sie können einen Strip cut ausführen, indem Sie das RestartStrip HLSL-Funktion explizit 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 ist. Ein Index von –1 gibt einen expliziten "Ausschneiden" oder "Neustart" des aktuellen Strips an. Der vorherige Index schließt den vorherigen Grundtyp oder den vorherigen Streifen ab, und der nächste Index startet einen neuen Grundtyp oder einen neuen Strip. Weitere Informationen zum Generieren mehrerer Streifen finden Sie unter Geometry-Shader Phase.

Anmerkung

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

 

Erste Schritte mit der Input-Assembler Phase

Pipelinephasen (Direct3D 10)