Topologies primitives
Direct3D 10 et versions ultérieures prend en charge plusieurs types primitifs (ou topologies) qui sont 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
- Adjacence primitive
- Direction d’enroulement et positions du sommet 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 :
Pour une visualisation de chaque type primitif, consultez le diagramme plus loin dans cette rubrique dans Direction d’enroulement 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 pour la phase d’assembleur d’entrée.)
Adjacence primitive
Tous les types primitifs Direct3D 10 et ultérieur (à l’exception de la liste de points) sont disponibles dans deux versions : un type primitif avec adjacence et un type primitif sans adjacence. Les primitives avec adjacence contiennent certains des sommets environnants, tandis que les primitives sans adjacence contiennent uniquement les sommets de la primitive cible. Par exemple, la primitive de liste de lignes (représentée par la valeur D3D_PRIMITIVE_TOPOLOGY_LINELIST ) a une primitive de liste de lignes correspondante qui inclut l’adjacence (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 ne sont visibles que par le biais d’un nuanceur de géométrie. L’adjacence est utile pour les nuanceurs de géométrie qui utilisent la détection de silhouette, l’extrusion de volume d’ombre, etc.
Par exemple, supposons que vous souhaitiez dessiner une liste de triangles avec l’adjacence. Une liste de triangles contenant 36 sommets (avec adjacence) génère 6 primitives terminées. Les primitives avec adjacence (à l’exception des bandes de trait) contiennent exactement deux fois plus de sommets que la primitive équivalente sans adjacence, où chaque sommet supplémentaire est un sommet adjacent.
Direction d’enroulement et positions du sommet de début
Comme le montre l’illustration suivante, un sommet de début est le premier sommet non adjacent d’une primitive. Un type primitif peut avoir plusieurs sommets de début définis, à condition que chacun d’eux soit utilisé pour une primitive différente. Pour une bande de triangles avec adjacence, les sommets de début sont 0, 2, 4, 6, etc. Pour une bande de ligne avec adjacence, les sommets de début sont 1, 2, 3, et ainsi de suite. En revanche, une primitive adjacente n’a pas de sommet de début.
L’illustration suivante montre l’ordre des vertex 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. | |
Sens de l’enroulement | Ordre de vertex lors de l’assemblage d’une primitive. Peut être dans le sens des aiguilles d’une montre ou dans le sens inverse des aiguilles d’une montre ; spécifiez ceci en appelant ID3D11Device1::CreateRasterizerState1. | |
Sommet de début | Premier sommet non adjacent d’une primitive qui contient des données par constante. |
Génération de plusieurs bandes
Vous pouvez générer plusieurs bandes par le biais de la coupe en bandes. Vous pouvez effectuer une coupe en 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, ce qui est 0xffffffff pour les index 32 bits ou 0xffff pour les index 16 bits. Un index de –1 indique un « couper » ou un « redémarrage » explicite de la bande active. 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 Stage.
Notes
Vous avez besoin de matériel de niveau de fonctionnalité 10.0 ou supérieur, car tous les matériels 10level9 n’implémentent pas cette fonctionnalité.
Rubriques connexes