Règles de pixellisation (Direct3D 9)

Souvent, les points spécifiés pour les vertex ne correspondent pas exactement aux pixels de l’écran. Dans ce cas, Direct3D applique les règles de pixellisation des triangles pour décider quels pixels s’appliquent à un triangle donné.

Règles de pixellisation des triangles

Direct3D utilise une convention de remplissage en haut à gauche pour remplir la géométrie. Il s’agit de la même convention que celle utilisée pour les rectangles dans GDI et OpenGL. Dans Direct3D, le centre du pixel est le point déterminant. Si le centre est à l’intérieur d’un triangle, le pixel fait partie du triangle. Les centres de pixels sont des coordonnées entières.

Cette description des règles de pixellisation des triangles utilisées par Direct3D ne s’applique pas nécessairement à tout le matériel disponible. Vos tests peuvent découvrir des variations mineures dans l’implémentation de ces règles.

L’illustration suivante montre un rectangle dont l’angle supérieur gauche se trouve à (0,0) et dont l’angle inférieur droit est (5, 5). Ce rectangle remplit 25 pixels, comme prévu. La largeur du rectangle est définie à droite, moins gauche. La hauteur est définie en tant que bas moins haut.

illustration d’un carré numéroté divisé en six lignes et colonnes

Dans la Convention de remplissage en haut à gauche, Top fait référence à l’emplacement vertical des étendues horizontales, tandis que Left fait référence à l’emplacement horizontal des pixels dans une étendue. Un bord ne peut pas être un bord supérieur, sauf s’il est horizontal. En général, la plupart des triangles ont uniquement des bords gauche et droit. L’illustration suivante montre un bord supérieur et un bord droit.

illustration d’un carré numéroté qui contient deux triangles

La Convention de remplissage en haut à gauche détermine l’action effectuée par Direct3D lorsqu’un triangle passe au centre d’un pixel. L’illustration suivante montre deux triangles, un à (0, 0), (5, 0) et (5, 5) et l’autre à (0, 5), (0, 0) et (5, 5). Dans ce cas, le premier triangle obtient 15 pixels (en noir), tandis que le second obtient uniquement 10 pixels (indiqué en gris), car la périphérie partagée est le bord gauche du premier triangle.

illustration d’un carré numéroté qui affiche deux triangles

Si vous définissez un rectangle avec son coin supérieur gauche à (0,5, 0,5) et son coin inférieur droit à (2,5, 4,5), le point central de ce rectangle est (1,5, 2,5). Lorsque le rastériseur Direct3D tessellates ce rectangle, le centre de chaque pixel est sans ambiguïté à l’intérieur de chacun des quatre triangles, et la Convention de remplissage supérieure gauche n’est pas nécessaire. L’illustration suivante montre cela. Les pixels du rectangle sont étiquetés en fonction du triangle dans lequel Direct3D les intègre.

Affiche un carré numéroté qui contient un rectangle divisé en quatre triangles.

Si vous déplacez le rectangle de l’illustration précédente afin que son coin supérieur gauche se trouve à l’emplacement (1,0, 1,0), à l’angle inférieur droit à (3,0, 5,0) et à son point central à (2,0, 3,0), Direct3D applique la Convention de remplissage en haut à gauche. La plupart des pixels de ce rectangle chevauchent la bordure entre deux ou plusieurs triangles, comme le montre l’illustration suivante.

illustration d’un carré numéroté qui contient un rectangle divisé en quatre triangles

Pour les deux rectangles, les mêmes pixels sont affectés, comme indiqué dans l’illustration suivante.

illustration des pixels affectés par les deux carrés numérotés précédents

Règles de point et de ligne

Les points sont restitués de la même façon que les points sprites, qui sont rendus sous forme de quadrilatères alignés sur l’écran et sont donc conformes aux mêmes règles que le rendu de polygones.

Les règles de rendu de ligne sans anticrénelage sont exactement les mêmes que celles pour les lignes GDI.

Pour plus d’informations sur le rendu de ligne avec anticrénelage, consultez ID3DXLine.

Règles de point Sprite

Les points de soulignement et les primitives de correctif sont pixellisés comme si les primitives étaient d’abord fractionnées en triangles et les triangles obtenus pixellisés. Pour plus d’informations, consultez points sprites (Direct3D 9).

Systèmes de coordonnées et géométrie