Développement XNA pour la XBox et le PC
318
Modifier les couleurs d’une texture
Les pixels shaders suivants inversent les couleurs d’une texture.
Ici, il renvoie la couleur avec toutes ses composantes dans l’ordre classique.
float4 pixelShader(PixelInput input) : COLOR
{
float4 color = tex2D(TextureSampler, input.TexCoord);
return (color.rgba);
}
Dans le pixel shader suivant, la composante rouge est inversée avec la composante verte.
float4 pixelShader(PixelInput input) : COLOR
{
float4 color = tex2D( TextureSampler, input.TexCoord);
return( color.grba );
}
Il est également possible d’inverser le rouge et le bleu.
float4 pixelShader(PixelInput input) : COLOR
{
float4 color = tex2D( TextureSampler, input.TexCoord);
return( color.bgra );
}
Un effet intéressant consiste à transformer la texture pour que ses couleurs varient
uniquement entre le noir et le blanc (on parle également de niveaux de gris). Votre premier
réflexe est peut-être de faire la moyenne des trois composantes. Cependant, l’œil humain
ne percevant pas de la même manière les trois composantes, vous devez leur appliquer
des coefficients. La Commission internationale de l’éclairage conseille d’utiliser les
coefficients suivants :
• 0,3 pour le rouge ;
• 0,59 pour le vert ;
• 0,11 pour le bleu.
• Pour convertir une texture en niveau de gris (comme sur la figure 13-9), vous pouvez
donc écrire le pixel shader suivant (la fonction dot fait le produit scalaire de deux
vecteurs).
float4 pixelShader(PixelInput input) : COLOR
{
float4 color = tex2D( TextureSampler, input.TexCoord);
color.rgb = dot(color.rgb, float3(0.3, 0.59, 0.11));
return( color );
}
Sur la figure suivante, la texture appliquée au cube apparaît en niveaux de gris.
=Labat FM.book Page 318 Vendredi, 19. juin 2009 4:01 16
Précédent

- 339/366

Suivant