Topologies de primitive
Direct3D prend en charge plusieurs topologies primitives, qui définissent la façon dont les sommets sont interprétés et rendus par le pipeline, tels que les listes de points, les listes de lignes et les bandes de triangles.
Topologies primitives de base
Les topologies primitives de base suivantes (ou types primitifs) sont prises en charge :
Pour obtenir une visualisation de chaque type primitif, consultez le diagramme plus loin dans cette rubrique dans la direction winding et les positions de vertex de début.
L’étape d’assembleur d’entrée (IA) lit les données des tampons de vertex et d’index, assemble les données dans ces primitives, puis envoie les données aux étapes restantes du pipeline.
Addjacency primitive
Tous les types primitifs Direct3D (à l’exception de la liste de points) sont disponibles dans deux versions : un type primitif avec adjacency et un type primitif sans adjacency. Les primitives avec addjacency contiennent certains des sommets environnants, tandis que les primitives sans adjacency contiennent uniquement les sommets de la primitive cible. Par exemple, la primitive de liste de lignes a une primitive de liste de lignes correspondante qui inclut ladjacency.
Les primitives adjacentes sont destinées à fournir plus d’informations sur votre géométrie et sont visibles uniquement par le biais d’un nuanceur géométrique. Ladjacency est utile pour les nuanceurs géométriques qui utilisent la détection de silhouette, l’extrusion de volume d’ombre, et ainsi de suite.
Par exemple, supposons que vous souhaitiez dessiner une liste de triangles avec un adjudant. Une liste de triangles contenant 36 sommets (avec adjacency) génère 6 primitives terminées. Les primitives avec addjacency (à l’exception des bandes de traits) contiennent exactement deux fois plus de sommets que la primitive équivalente sans adjacency, où chaque vertex supplémentaire est un sommet adjacent.
Direction de l’enroulement et positions de vertex de début
Comme illustré dans l’illustration suivante, un sommet de début est le premier vertex non adjacent dans une primitive. Un type primitif peut avoir plusieurs sommets de début définis, tant que chacun d’eux est utilisé pour une primitive différente.
- Pour une bande de triangles avec adjudance, les sommets de début sont 0, 2, 4, 6, et ainsi de suite.
- Pour une bande de traits avec adjudance, les sommets de début sont 1, 2, 3, et ainsi de suite.
- Une primitive adjacente, d’autre part, n’a pas de vertex de début.
L’illustration suivante montre l’ordre des sommets pour tous les types primitifs que l’assembleur d’entrée peut produire.
Les symboles de l’illustration précédente sont décrits dans le tableau suivant.
Symbole | Nom | Description |
---|---|---|
Sommet | Point dans l’espace 3D. | |
Direction du vent | Ordre de vertex lors de l’assemblage d’une primitive. Peut être au niveau des aiguilles d’une montre ou dans le sens inverse des aiguilles d’une montre. | |
Vertex de début | Premier vertex non adjacent dans une primitive qui contient des données par constante. |
Génération de plusieurs bandes
Vous pouvez générer plusieurs bandes à l’aide d’une coupe à bandes. Vous pouvez effectuer une coupe de bandes en appelant explicitement la fonction HLSL RestartStrip ou en insérant une valeur d’index spéciale dans la mémoire tampon d’index. Cette valeur est –1, qui est 0xffffffff pour les index 32 bits ou 0xffff pour les index 16 bits.
Un index de –1 indique une « coupe » ou un « redémarrage » explicite de la bande actuelle. L’index précédent termine la primitive ou la bande précédente et l’index suivant démarre une nouvelle primitive ou une nouvelle bande.
Pour plus d’informations sur la génération de plusieurs bandes, consultez l’étape Du nuanceur geometry (GS).
Rubriques connexes
Étape d’assembleur d’entrée (IA)