J'ai un problème d'intensité dans le toon shader. La valeur de l'intensité est toujours 0 mais elle ne devrait pas l'être et je la calcule à partir de la direction normale et de la direction du vertex. J'ai utilisé ce reference card.intensité zéro dans le shader GLSL toon
vertexShader:
varying vec2 vUv;
uniform vec3 ec_light_dir;
uniform mat3 normal_matrix;
varying float intensity;
attribute vec3 a_normal;
void main() {
vec3 ec_normal = normalize(normal_matrix * a_normal);
intensity = dot(ec_light_dir,ec_normal);
vUv = uv;
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);}
fragmentShader:
uniform sampler2D tDiffuse;
varying vec2 vUv;
varying float intensity;
void main() {
vec4 color = texture2D(tDiffuse, vUv);
if (intensity > 0.95)
color = vec4(1.0,1.0,0.5,0.5);
else if (intensity > 0.5)
color = vec4(0.6,0.3,0.3,1.0);
else if (intensity > 0.25)
color = vec4(0.4,0.2,0.2,1.0);
else
color = vec4(0.2,0.1,0.1,1.0);
gl_FragColor = color;
}
Pourriez-vous me dire ce que je fais mal? Pourquoi l'intensité est-elle toujours nulle?
Il peut être négatif. Essayez abs (...) – mrVoid
Quelle version d'OpenGL utilisez-vous? Cela ne peut pas être le code de shader complet, puisque vous auriez des variables indéfinies. –