J'ai fini d'ajouter de la lumière à mon objet. Mais j'ai la plupart d'un exemple d'Internet et je veux comprendre ce que je fais. Quelqu'un peut-il m'expliquer en détail ce que chaque étape du code fait?Appliquer de la lumière à un objet dans openGL
Programme Fragment,
- LightColor: la lumière que nous avons besoin (j'ai pris ici rouge comme exemple)
- Brillance: combien de lumière nous voulons utiliser, peut aussi changer l'image dans une sombre
- gl_FragColor = pour écrire la couleur totale. Mais pourquoi faisons-nous texture2D (..) + facingRatio * ...?
Programme Vertex,
-Pourquoi gl_MultiTexCoord0.xy? - Et quelqu'un peut-il expliquer comment est calculée la direction de la lumière?
varying vec2 Texcoord;
uniform sampler2D baseMap;
uniform vec4 lightColor;
uniform float shininess;
varying vec3 LightDirection;
varying vec3 Normal;
void main(void)
{
float facingRatio = dot(normalize(Normal), normalize(LightDirection));
gl_FragColor = texture2D(baseMap, Texcoord) + facingRatio * lightColor * shininess;
}
varying vec2 Texcoord;
uniform mat4 modelView;
uniform vec3 lightPos;
varying vec3 Normal;
varying vec3 LightDirection;
void main(void)
{
gl_Position = gl_ProjectionMatrix * modelView * gl_Vertex;
Texcoord = gl_MultiTexCoord0.xy;
Normal = normalize(gl_NormalMatrix * gl_Normal);
vec4 objectPosition = gl_ModelViewMatrix * gl_Vertex;
LightDirection = (gl_ModelViewMatrix * vec4(lightPos, 1)).xyz - objectPosition.xyz;
}