Partager via


Bandes de triangles

Une bande de triangles est une série de triangles connectés. Étant donné que les triangles sont connectés, l’application n’a pas besoin de spécifier à plusieurs reprises les trois sommets pour chaque triangle. Par exemple, vous n’avez besoin que de sept sommets pour définir la bande de triangle suivante.

illustration d’une bande de triangles avec sept sommets

Le système utilise des sommets v1, v2 et v3 pour dessiner le premier triangle ; v2, v4 et v3 pour dessiner le deuxième triangle ; v3, v4 et v5 pour dessiner le troisième ; v4, v6 et v5 pour dessiner le quatrième ; et ainsi de suite. Notez que les sommets des deuxième et quatrième triangles sont hors d’ordre ; cela est nécessaire pour vous assurer que tous les triangles sont dessinés dans une orientation au niveau des aiguilles d’une montre.

La plupart des objets dans les scènes 3D sont composés de bandes de triangles. Cela est dû au fait que les bandes de triangles peuvent être utilisées pour spécifier des objets complexes de manière à utiliser efficacement la mémoire et le temps de traitement.

L’illustration suivante illustre une bande de triangles rendue.

illustration d’une bande de triangles rendue

Le code suivant montre comment créer des sommets pour cette bande de triangles.

struct CUSTOMVERTEX
{
float x,y,z;
};

CUSTOMVERTEX Vertices[] = 
{
    {-5.0, -5.0, 0.0},
    { 0.0,  5.0, 0.0},
    { 5.0, -5.0, 0.0},
    {10.0,  5.0, 0.0},
    {15.0, -5.0, 0.0},
    {20.0,  5.0, 0.0}
};

L’exemple de code ci-dessous montre comment afficher cette bande de triangles dans Direct3D 9 à l’aide de IDirect3DDevice9 ::D rawPrimitive.

//
// It is assumed that d3dDevice is a valid
// pointer to a IDirect3DDevice9 interface.
//
d3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 4);

Utilisez une bande de triangles pour afficher les triangles qui ne sont pas connectés les uns aux autres. Pour ce faire, spécifiez un triangle dégénéré (autrement dit, un triangle dont la zone est égale à zéro) dans la liste des triangles. Cela crée une ligne entre les deux triangles qui ne s’afficheront pas. Pour afficher uniquement les premiers et derniers triangles de l’exemple précédent, modifiez la mémoire tampon de vertex comme indiqué ici :

CUSTOMVERTEX Vertices[] =
{
    {-5.0, -5.0, 0.0},
    { 0.0,  5.0, 0.0},
    { 5.0, -5.0, 0.0},
    { 5.0, -5.0, 0.0}, // degenerate triangle
    {10.0,  5.0, 0.0}, // degenerate triangle
    {10.0,  5.0, 0.0},
    {15.0, -5.0, 0.0},
    {20.0,  5.0, 0.0}
};

Primitives