Les bases de la programmation 3D
CHAPITRE 12
271
Faites attention à l’ordre dans lequel les vertices doivent être dessinés. En effet, avec XNA,
la technique appelée backface culling, qui consiste à éliminer les faces d’un objet qui
tourne le dos à la caméra, est activée par défaut pour les vertices déclarés dans le sens
inverse des aiguilles d’une montre.
Ainsi la ligne suivante est implicitement déclarée :
graphics.GraphicsDevice.RenderState.CullMode = CullMode.CullCounterClockwiseFace;
Si vous modifiez l’ordre des vertices de manière à les organiser dans le sens inverse des
aguilles d’une montre, vous verrez que plus rien ne s’affiche à l’écran.
// Top left corner
vertices[0] = new VertexPositionColor(new Vector3(-1, 1, 0), Color.White);
// Bottom right corner
vertices[2] = new VertexPositionColor(new Vector3(1, -1, 0), Color.White);
// Bottom left corner
vertices[1] = new VertexPositionColor(new Vector3(-1, -1, 0), Color.White);
Maintenant, si vous modifiez la propriété CullMode pour le mode qui cachera les faces dont
les vertices sont dans l’ordre des aiguilles d’une montre, le triangle apparaîtra correctement
à l’écran.
graphics.GraphicsDevice.RenderState.CullMode = CullMode.CullClockwiseFace;
Dans certains cas, vous n’aurez pas besoin d’utiliser la technique du backface culling,
vous pourrez alors la désactiver avec la valeur None de l’énumération CullMode ; l’ordre
des vertices n’aura plus d’importance.
graphics.GraphicsDevice.RenderState.CullMode = CullMode.None;
Dessiner un cube
Maintenant que vous savez dessiner un triangle, vous pouvez vous consacrer à des formes
plus compliquées… et pourquoi pas un cube.
La première face
Avant de vous attaquer au cube complet, commencez par l’un de ses faces. Nous avons
vu précédemment qu’un rectangle est composé de deux triangles et qu’il est possible de
réutiliser les vertices du premier triangle pour dessiner le deuxième (deux vertices sont
communs aux deux triangles). Pour éviter de dupliquer ces points, il suffit d’utiliser un
index buffer. Ainsi, au lieu de dupliquer les vertices, vous dupliquez leurs index : vous
n’aurez que 4 vertices, mais bien 6 index.
1. Commencez par ajouter le nouveau vertex :
private VertexPositionColor[] CreateShape()
{
VertexPositionColor[] vertices = new VertexPositionColor[4];
=Labat FM.book Page 271 Vendredi, 19. juin 2009 4:01 16
CHAPITRE 12
271
Faites attention à l’ordre dans lequel les vertices doivent être dessinés. En effet, avec XNA,
la technique appelée backface culling, qui consiste à éliminer les faces d’un objet qui
tourne le dos à la caméra, est activée par défaut pour les vertices déclarés dans le sens
inverse des aiguilles d’une montre.
Ainsi la ligne suivante est implicitement déclarée :
graphics.GraphicsDevice.RenderState.CullMode = CullMode.CullCounterClockwiseFace;
Si vous modifiez l’ordre des vertices de manière à les organiser dans le sens inverse des
aguilles d’une montre, vous verrez que plus rien ne s’affiche à l’écran.
// Top left corner
vertices[0] = new VertexPositionColor(new Vector3(-1, 1, 0), Color.White);
// Bottom right corner
vertices[2] = new VertexPositionColor(new Vector3(1, -1, 0), Color.White);
// Bottom left corner
vertices[1] = new VertexPositionColor(new Vector3(-1, -1, 0), Color.White);
Maintenant, si vous modifiez la propriété CullMode pour le mode qui cachera les faces dont
les vertices sont dans l’ordre des aiguilles d’une montre, le triangle apparaîtra correctement
à l’écran.
graphics.GraphicsDevice.RenderState.CullMode = CullMode.CullClockwiseFace;
Dans certains cas, vous n’aurez pas besoin d’utiliser la technique du backface culling,
vous pourrez alors la désactiver avec la valeur None de l’énumération CullMode ; l’ordre
des vertices n’aura plus d’importance.
graphics.GraphicsDevice.RenderState.CullMode = CullMode.None;
Dessiner un cube
Maintenant que vous savez dessiner un triangle, vous pouvez vous consacrer à des formes
plus compliquées… et pourquoi pas un cube.
La première face
Avant de vous attaquer au cube complet, commencez par l’un de ses faces. Nous avons
vu précédemment qu’un rectangle est composé de deux triangles et qu’il est possible de
réutiliser les vertices du premier triangle pour dessiner le deuxième (deux vertices sont
communs aux deux triangles). Pour éviter de dupliquer ces points, il suffit d’utiliser un
index buffer. Ainsi, au lieu de dupliquer les vertices, vous dupliquez leurs index : vous
n’aurez que 4 vertices, mais bien 6 index.
1. Commencez par ajouter le nouveau vertex :
private VertexPositionColor[] CreateShape()
{
VertexPositionColor[] vertices = new VertexPositionColor[4];
=Labat FM.book Page 271 Vendredi, 19. juin 2009 4:01 16
