Bonjour,
Je me pose une question par rapport à la mise à jour des normales d'un objet qui est amené à être déplacé dans une scène.
J'ai un objet modèle qui contient une géométrie qui est envoyé à la carte via VBO. Ce modèle possède une matrice 4x4 que je modifie au besoin pour le déplacer dans la scène. Cette matrice (ainsi que la matrice de la caméra) est envoyé aux shaders pour mettre à jour les positions des sommets. J'envoie également la position d'un point fixe représentant la position de la lumière qui me permet d'obtenir un effet d'ombrage ainsi :
dans le vertex shader
colorFactor = max(dot(normal, lightDirection), 0.0);
dans le fragment shader :
color = colorFactor * vec4(texture2D(texture, v_texCoord).rgb, 1.0);
Quand le modèle est de face, pas de problème, il est bien éclairé par la lumière qui est en face de lui, mais le souci, c'est que quand le modèle est de dos, il est tout sombre, alors qu'il devrait être éclairé par la lumière qui n'a pas bougée.
Pour régler ce problème je serai bien tenté de multiplier chaque normale par la matrice du modèle, mais je n'ai jamais vu faire ça dans les shaders que j'ai pu regarder (bon pas énorme, mais quelques uns). Qu'en pensez vous ?
Partager