Partager via


Topologies primitives

Direct3D 10 et versions ultérieures prend en charge plusieurs types primitifs (ou topologies) représentés par le type énuméré D3D_PRIMITIVE_TOPOLOGY. Ces types définissent la façon dont les sommets sont interprétés et rendus par le pipeline.

Types primitifs de base

Les types primitifs de base suivants sont pris en charge :

Pour obtenir une visualisation de chaque type primitif, consultez le diagramme plus loin dans cette rubrique dans direction de vent et positions de vertex de début.

L’étape d’assembleur d’entrée 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 de pipeline restantes. (Vous pouvez utiliser la méthode ID3D11DeviceContext ::IASetPrimitiveTopology pour spécifier le type primitif de l’étape d’assembleur d’entrée.)

Addjacency primitive

Tous les types primitifs Direct3D 10 et supérieurs (à l’exception de la liste de points) sont disponibles dans deux versions : un type primitif avec adjacency et un type primitif sans addjacency. 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 la liste de lignes (représentée par la valeur D3D_PRIMITIVE_TOPOLOGY_LINELIST) a une primitive de liste de lignes correspondante qui inclut ladjacency (représentée par la valeur D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ.)

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 pour un de vertex Sommet Point dans l’espace 3D.
symbole de pour le sens 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 ; spécifiez cela en appelant ID3D11Device1 ::CreateRasterizerState1.
symbole pour le sommet principal 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 RestartStrip HLSL, 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 Geometry-Shader Étape.

Note

Vous avez besoin de niveau de fonctionnalité matériel 10.0 ou supérieur, car le matériel 10level9 n’implémente pas cette fonctionnalité.

 

prise en main de l’étape de Input-Assembler

étapes de pipeline (Direct3D 10)