Partager via


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.

diagramme de l’ordre des sommets pour les types primitifs

Les symboles de l’illustration précédente sont décrits dans le tableau suivant.

Symbole Nom Description
symbole d’un sommet Sommet Point dans l’espace 3D.
symbole pour la direction du vent 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.
symbole pour le sommet de début 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).

Étape d’assembleur d’entrée (IA)

Pipeline graphique