Les bases de la programmation 3D
CHAPITRE 12
295
devrez lui spécifier, c’est la direction vers laquelle la surface est orientée, c’est-à-dire la
direction perpendiculaire à la surface : sa normale.
Éclairer une scène pas à pas
Reprenez la classe Cube et modifiez-la de manière à utiliser la structure VertexPosition
NormalTexture pour les vertices. L’extrait de code ci-dessous repose sur la méthode
InitializeVertices(). Il présente la définition de la normale d’un seul vertex de chaque
face (elle est la même pour tous les vertices d’une face).
private void InitializeVertices()
{
vertices = new VertexPositionNormalTexture[24];
// Front Top left corner
vertices[0].Position = new Vector3(position.X - widthOver2, position.Y +
➥widthOver2, position.Z + widthOver2);
vertices[0].TextureCoordinate = new Vector2(0, 0);
vertices[0].Normal = new Vector3(0, 0, 1);
// Back Top left corner
vertices[4].Position = new Vector3(position.X + widthOver2, position.Y +
➥widthOver2, position.Z - widthOver2);
vertices[4].TextureCoordinate = new Vector2(0, 0);
vertices[4].Normal = new Vector3(0, 0, -1);
// Left Top left corner
vertices[8].Position = new Vector3(position.X - widthOver2, position.Y +
➥widthOver2, position.Z - widthOver2);
vertices[8].TextureCoordinate = new Vector2(0, 0);
vertices[8].Normal = new Vector3(-1, 0, 0);
// Right Top left corner
vertices[12].Position = new Vector3(position.X + widthOver2, position.Y +
➥widthOver2, position.Z + widthOver2);
vertices[12].TextureCoordinate = new Vector2(0.5f, 0);
vertices[12].Normal = new Vector3(1, 0, 0);
// Bottom Top left corner
vertices[16].Position = new Vector3(position.X - widthOver2, position.Y -
➥widthOver2, position.Z + widthOver2);
vertices[16].Normal = new Vector3(0, -1, 0);
// Top Top left corner
vertices[20].Position = new Vector3(position.X - widthOver2, position.Y +
➥widthOver2, position.Z - widthOver2);
vertices[20].Normal = new Vector3(0, 1, 0);
}
=Labat FM.book Page 295 Vendredi, 19. juin 2009 4:01 16
CHAPITRE 12
295
devrez lui spécifier, c’est la direction vers laquelle la surface est orientée, c’est-à-dire la
direction perpendiculaire à la surface : sa normale.
Éclairer une scène pas à pas
Reprenez la classe Cube et modifiez-la de manière à utiliser la structure VertexPosition
NormalTexture pour les vertices. L’extrait de code ci-dessous repose sur la méthode
InitializeVertices(). Il présente la définition de la normale d’un seul vertex de chaque
face (elle est la même pour tous les vertices d’une face).
private void InitializeVertices()
{
vertices = new VertexPositionNormalTexture[24];
// Front Top left corner
vertices[0].Position = new Vector3(position.X - widthOver2, position.Y +
➥widthOver2, position.Z + widthOver2);
vertices[0].TextureCoordinate = new Vector2(0, 0);
vertices[0].Normal = new Vector3(0, 0, 1);
// Back Top left corner
vertices[4].Position = new Vector3(position.X + widthOver2, position.Y +
➥widthOver2, position.Z - widthOver2);
vertices[4].TextureCoordinate = new Vector2(0, 0);
vertices[4].Normal = new Vector3(0, 0, -1);
// Left Top left corner
vertices[8].Position = new Vector3(position.X - widthOver2, position.Y +
➥widthOver2, position.Z - widthOver2);
vertices[8].TextureCoordinate = new Vector2(0, 0);
vertices[8].Normal = new Vector3(-1, 0, 0);
// Right Top left corner
vertices[12].Position = new Vector3(position.X + widthOver2, position.Y +
➥widthOver2, position.Z + widthOver2);
vertices[12].TextureCoordinate = new Vector2(0.5f, 0);
vertices[12].Normal = new Vector3(1, 0, 0);
// Bottom Top left corner
vertices[16].Position = new Vector3(position.X - widthOver2, position.Y -
➥widthOver2, position.Z + widthOver2);
vertices[16].Normal = new Vector3(0, -1, 0);
// Top Top left corner
vertices[20].Position = new Vector3(position.X - widthOver2, position.Y +
➥widthOver2, position.Z - widthOver2);
vertices[20].Normal = new Vector3(0, 1, 0);
}
=Labat FM.book Page 295 Vendredi, 19. juin 2009 4:01 16
