Développement XNA pour la XBox et le PC
314
Faire onduler les objets
Le premier fichier d’effets que vous venez de réaliser n’a rien d’extraordinaire. Vous allez
maintenant créer un effet plus intéressant que ceux proposés par la classe BasicEffect.
Le but de l’effet suivant est de donner un effet de vague à des vertices : celui-ci oscillera
en fonction du temps grâce à la fonction sinus.
1. Commencez par ajouter une nouvelle variable globale au fichier qui servira à stocker
le temps.
float Timer : TIME;
2. Modifiez ensuite le vertex shader pour qu’il change les coordonnées du vertex, qui est
quant à lui passé en paramètre. Pour cela, copiez sa position dans un vecteur temporaire.
3. Modifiez la composante x, le calcul utilise la fonction sinus qui prend en paramètre
la composante y et le temps courant.
4. Dernière chose, passez ce jeu de coordonnées mis à jour au vertex de sortie.
VertexOutput vertexShader(VertexInput input)
{
float4 Pos = float4(input.Position.xyz,1);
Pos.x += sin(Pos.y + Timer);
VertexOutput output;
WorldViewProjection = mul(mul(World, View), Projection);
output.Position = mul(Pos, WorldViewProjection);
output.TexCoord = input.TexCoord;
return( output );
}
5. Dans le code C#, à chaque passage dans la méthode Draw(), passez le nombre de
secondes écoulées au total.
effect.Parameters["Timer"].SetValue((float)gameTime.TotalGameTime.TotalSeconds);
Vous pouvez ensuite essayer le projet et admirer le résultat (figure 13-5).
Figure 13-5
Le cube déformé
par le nouvel effet
=Labat FM.book Page 314 Vendredi, 19. juin 2009 4:01 16
314
Faire onduler les objets
Le premier fichier d’effets que vous venez de réaliser n’a rien d’extraordinaire. Vous allez
maintenant créer un effet plus intéressant que ceux proposés par la classe BasicEffect.
Le but de l’effet suivant est de donner un effet de vague à des vertices : celui-ci oscillera
en fonction du temps grâce à la fonction sinus.
1. Commencez par ajouter une nouvelle variable globale au fichier qui servira à stocker
le temps.
float Timer : TIME;
2. Modifiez ensuite le vertex shader pour qu’il change les coordonnées du vertex, qui est
quant à lui passé en paramètre. Pour cela, copiez sa position dans un vecteur temporaire.
3. Modifiez la composante x, le calcul utilise la fonction sinus qui prend en paramètre
la composante y et le temps courant.
4. Dernière chose, passez ce jeu de coordonnées mis à jour au vertex de sortie.
VertexOutput vertexShader(VertexInput input)
{
float4 Pos = float4(input.Position.xyz,1);
Pos.x += sin(Pos.y + Timer);
VertexOutput output;
WorldViewProjection = mul(mul(World, View), Projection);
output.Position = mul(Pos, WorldViewProjection);
output.TexCoord = input.TexCoord;
return( output );
}
5. Dans le code C#, à chaque passage dans la méthode Draw(), passez le nombre de
secondes écoulées au total.
effect.Parameters["Timer"].SetValue((float)gameTime.TotalGameTime.TotalSeconds);
Vous pouvez ensuite essayer le projet et admirer le résultat (figure 13-5).
Figure 13-5
Le cube déformé
par le nouvel effet
=Labat FM.book Page 314 Vendredi, 19. juin 2009 4:01 16
