Règles de rastérisation (Direct3D 9)

Souvent, les points spécifiés pour les sommets ne correspondent pas précisément aux pixels de l’écran. Dans ce cas, Direct3D applique des règles de rastérisation de triangle pour déterminer les pixels qui s’appliquent à un triangle donné.

Règles de rastérisation 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écisif. Si le centre se trouve à l’intérieur d’un triangle, le pixel fait partie du triangle. Les centres de pixels se trouvent aux coordonnées entières.

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

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

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

Dans la convention de remplissage en haut à gauche, la partie supérieure fait référence à l’emplacement vertical des étendues horizontales, et la gauche 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 traverse le centre d’un pixel. L’illustration suivante montre deux triangles, l’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 (affiché en noir), tandis que le second n’obtient que 10 pixels (en gris), car le bord partagé est le bord gauche du premier triangle.

illustration d’un carré numéroté qui montre 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 assole ce rectangle, le centre de chaque pixel se trouve sans ambiguïté à l’intérieur de chacun des quatre triangles, et la convention de remplissage en haut à gauche n’est pas nécessaire. L’illustration suivante le montre. Les pixels du rectangle sont étiquetés en fonction du triangle dans lequel Direct3D les inclut.

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

Si vous déplacez le rectangle dans l’illustration précédente de sorte que son coin supérieur gauche se trouve à (1.0, 1.0), son coin 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 triangles ou plus, 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 illustré 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 rendus de la même façon que les sprites de points, qui sont tous deux rendus sous forme de quadrilatères alignés sur l’écran et respectent donc les mêmes règles que le rendu de polygones.

Les règles de rendu de ligne non anticrénelées sont exactement les mêmes que celles des lignes GDI.

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

Règles de sprite de point

Les sprites de points et les primitives de patch sont rastérisés comme si les primitives étaient d’abord tessellées en triangles et les triangles résultants rastérisés. Pour plus d’informations, consultez Sprites point (Direct3D 9).

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