Lighting
Fragment Shader
Implémenter un modèle d'illumination diffuse dans le fragment shader forward.fs.glsl
- Ajouter des variables uniform vec3 uDirectionalLightDir et vec3 uDirectionalLightIntensity destinées à stocker les paramètres d'une lumière directionnelle (en espace view)
- Ajouter des variables uniform vec3 uPointLightPosition et vec3 uPointLightIntensity destinées à stocker les paramètres d'une lumière ponctuelle (en espace view)
- Ajouter une variable uniform vec3 uKd destinée à stocker la couleur diffuse de l'objet en cours de rendu
- Dans le main, utiliser ces variables ainsi que les attributs du fragment pour calculer la couleur du fragment:
float distToPointLight = length(uPointLightPosition - vViewSpacePosition);
vec3 dirToPointLight = (uPointLightPosition - vViewSpacePosition) / distToPointLight;
fColor = uKd * (uDirectionalLightIntensity * max(0.0, dot(vViewSpaceNormal, uDirectionalLightDir)) + uPointLightIntensity * max(0.0, dot(vViewSpaceNormal, dirToPointLight)) / (distToPointLight * distToPointLight))
Application
A l'initialisation:
- Récupérer les locations des nouvelles uniform
Au rendu:
- Envoyer les différentes uniformes avant le rendu de chaque objet (les lights doivent être partagé)
- Faire en sorte de pouvoir régler les paramètres des lights et la couleur diffuse des objets depuis la GUI
Fonctions GL à utiliser:
- glUniform3f