Bonjour !
J'ai actuellement un problème avec mon shader. VOici le shader en question :
1 2 3 4 5 6 7 8 9 10 11 12
| varying vec3 Position;
varying vec3 Normal;
uniform mat4 modelMatrix;
void main()
{
vec3 Position = modelMatrix * gl_Vertex;;
Normal = gl_NormalMatrix * gl_Normal;
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_FrontColor = gl_Color;
gl_Position = ftransform();
} |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| uniform sampler2D tex;
varying vec3 Position;
varying vec3 Normal;
void main()
{
vec3 LightSource = vec3(0, 1, 1);
vec3 LightDir = normalize(vec3(LightSource -Position));
float intensity = dot(LightDir, normalize(Normal));
vec4 color = texture2D(tex,gl_TexCoord[0].st), color_final;
if (intensity >= 1)
color *= 1.1;
else if (intensity > 0.85)
color *= 0.85;
else if (intensity > 0.75)
color *= 0.75;
else if (intensity > 0.5)
color *= 0.5;
else if (intensity > 0.25)
color *= 0.25;
else
color *= 0.2;
color.w = 1;
gl_FragColor = color;
} |
Le shader fonctionne bien, sauf que les lumière se déplacent avec la caméra, comme si le shader en dépendait... alors que pas du tout (enfin je ne veux pas ce résultat ^^").
J'ai donc recherché un peu, et vu qu'il ne fallait pas multiplié gl_Vertex par gl_ModelView dans le vertex shader mais juste par la matrice model. J'envois donc la matrice que j'utilise avec :
glMultMatrixf (&m_body->GetMatrix().matrix[0]);
à mon vertex shader, et multiplie alors pour obtenir la position comme ceci :
vec3 Position = modelMatrix * gl_Vertex;
Sauf que ceci ne change pas grand chose... l'intensité calculé dans le pixel shader change encore en fonction de l'orientation de la caméra.
Quelqu'un aurait une solution ?
Partager