Bandes de triangles

Une bande de triangle 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 triangle avec sept sommets

Le système utilise les 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 s’assurer que tous les triangles sont dessinés dans le sens des aiguilles d’une montre.

La plupart des objets des scènes 3D sont composés de bandes de triangles. En effet, 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 triangle rendue.

illustration d’une bande de triangle rendue

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

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 restituer cette bande de triangle 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é (c’est-à-dire 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 sera pas rendue. Pour afficher uniquement le premier et le dernier triangle 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