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

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.

diagramme de l’ordre des vertex 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 de direction de remontage 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.
symbole pour le sommet de début 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é.

 

Prise en main avec la phase Input-Assembler

Phases de pipeline (Direct3D 10)