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
- dedjacency primitive
- direction du vent et positions de vertex de début
- génération de plusieurs bandes
- rubriques connexes
Types primitifs de base
Les types primitifs de base suivants sont pris en charge :
- liste de points
- liste de lignes
- bande de lignes
- liste de triangles
- de bande triange
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
Les symboles de l’illustration précédente sont décrits dans le tableau suivant.
Symbole | Nom | Description |
---|---|---|
symbole ![]() |
Sommet | Point dans l’espace 3D. |
symbole de ![]() |
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 ![]() |
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é.
Rubriques connexes