cours 4
7 pages
Français
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres
7 pages
Français
Le téléchargement nécessite un accès à la bibliothèque YouScribe
Tout savoir sur nos offres

Description

OpenGLProgrammation 3D avecOpenGLIUT informatique Johann Vandrommejohann.vandromme@lifl.frannée 2005-2006Cours 3 - la lumière• 1 - Les normales• 2 - L’éclairement• 3 - Les types de lumière• 4 - Les Matériaux1 – La lumière – généralités• Généralités sur la lumière– La manière dont sera éclairé un objet dépendra de plusieurs paramètres :• La source lumineuse (couleur / type de lumière / …)• Le matériaux de l’objet (couleur / brillance / …)• La position relative de l’objet et de la source.Soit le cube suivant et une source lumineuse mouvante,Soit le cube suivant et une source lumineuse mouvante,dans quel cas la face « a » sera la plus illuminée ?dans quel cas la face « a » sera la plus illuminée ?a1123La lumière : généralités• Une lumière aura une direction vers laquelle elle émettraCas d’un spot lumineux Cas des rayons du soleil :Cas d’une ampoule électrique :Lumière directionnelleSource ponctuelle• Les polygones auront une normale permettant de déterminerleur « exposition » maximaleLes normales – calcul de luminosité• Une normale est un vecteur donnant l’exposition maximale d’unpolygone / d’un point.Dessiner les normales pour chaqueDessiner les normales pour chaqueligne composant la falaise.ligne composant la falaise.• Comment calculer l’influence d’une source lumineuse sur unpolygone ?a bIntérêt des normales• L’intensité lumineuse émise par une source et perçue par unpoint dépend de l’angle entre le vecteur directeur de la ...

Sujets

Informations

Publié par
Nombre de lectures 40
Langue Français

Extrait

OpenGL
Programmation 3D avec OpenGL
IUT informatique Johann Vandromme johann.vandromme@lifl.fr année 20052006
1  Les normales 2  L’éclairement 3  Les types de lumière 4  Les Matériaux
Cours 3 - la lumière
1 – La lumière – généralités
Généralités sur la lumière La manière dont sera éclairé un objet dépendra de plusieurs paramètres : La source lumineuse (couleur / type de lumière / …) Le matériaux de l’objet (couleur / brillance / …) La position relative de l’objet et de la source.
Soit le cube suivant et une source lumineuse mouvante, dans quel cas la face « a » sera la plus illuminée ?
a
1
La lumière : généralités
Une lumière aura une direction vers laquelle elle émettra
Cas d’un spot lumineuxCas des rayons du soleil : Cas d’une ampoule électrique : Lumière directionnelle Source ponctuelle Les polygones auront une normale permettant de déterminer leur « exposition » maximale
Les normales – calcul de luminosité
Une normale est un vecteur donnant l’exposition maximale d’un polygone / d’un point.
Dessiner les normales pour chaque ligne composant la falaise.
Comment calculer l’influence d’une source lumineuse sur un polygone ?
a
b
Intérêt des normales
L’intensité lumineuse émise par une source et perçue par un point dépend de l’angle entre le vecteur directeur de la lumière et celui de la normale a
a Plus l’angleαest petit, plus l’influence de la source sera grande. D’où l’intérêt des normales : vont permettre à OpenGL de calculer un coefficient d’influence pour chaque source lumineuse.
2
Normales - définition
Le problème est qu’OpenGL ne génère pas les normales automatiquement. Il faut donc définir les normales « à la main » pour chaque face (ou chaque point) lors de la définition d’un objet. Ensuite, les normales subiront les transformations de la matrice de transformation, lors d’une translation / rotation / mise à l’échelle La définition des normales se fait par la fonction : void glNormal3f (float x, float y, float z); glEnable (GL_NORMALISE); permet de normaliser les normales suite aux mises à l’échelle.
Faire la définition du cube suivant en définissant une normale pour chaque face.
Normale par point / Normale par face
Définir une normale par face induit que le calcul de luminosité se fera de la même manière pour tous les points de la face. Problème : pour la sphère :
Ne permet pas d’avoir une sphère lissée
Normale par point
définir une normale par point :
Résultat
Une fois la couleur calculée pour chaque point, openGL fera l’interpolation linéaire de couleur (modèle de Gouraud)
3
Lumière : Fonctions générales
Mise en place de la lumière : glEnable (GL_LIGHTING); Calcul de lumière sans interpolation : glShadeModel (GL_FLAT); Calcul de lumière de Gouraud : glShadeModel(GL_SMOOTH); Allumage d’une lumière : glEnable (GL_LIGHT0); Sur la plupart des machines, on peut allumer jusqu’à 8 lumières simultanément (GL_LIGHT1, …, GL_LIGHT7); (le nombre de lumières dépend des caractéristiques des cartes graphiques). Il reste à définir les paramètres de la lumière.
Paramètres de lumière / matériaux
La couleur d’un point illuminé va dépendre : De la source lumineuse Du matériaux du point Il nous faudra définir la direction de la lumière, sa position et ses caractéristiques de couleur.
On peut distinguer 3 caractéristiques de couleur de la lumière: La couleur ambiante, la couleur diffuse, la couleur spéculaire. Le matériaux d’un objet peut être défini comme la manière dont celuici réagit à la lumière. Le matériaux sera lui aussi composé des 3 caractéristiques : Ambiant Diffus Spéculaire
Luminosité ambiante
La luminosité ambiante est due aux multiples réflexions de la lumière sur les objets entre eux; elle donne la couleur ambiante d’une scène Moins formellement, il s’agit de la couleur d’un objet lorsque celuici n’est pas éclairé directement par une source lumineuse. Par exemple, dans une pièce éclairée part la lumière du jour, un objet est éclairé même s’il n’est pas en contact avec un rayon lumineux.
4
Luminosité diffuse
La couleur diffuse par dépendre de l’exposition d’un objet à la lumière. (il s’agit du calcul avec les normales, vu précédemment)
Luminosité spéculaire La couleur spéculaire va dépendre non seulement de l’exposition de l’objet à la lumière, mais aussi de la position de l’utilisateur. Il s’agit du reflet lumineux que l’on peut voir sur une boule de billard. Ici, la couleur ambiante est noire La couleur diffuse est rouge La couleur spéculaire est jaune
Paramétrer une lumière ponctuelle
Procédure: void glLightf (enum light, enum pname, float param); Ou void glLightfv (enum light, enum pname, float *param); Paramètre light – GL_LIGHT0…GL_LIGHT7 Paramètre pname: GL_AMBIENT  param : tableau à 4 valeurs (r, g, b, a); GL_DIFFUSE  param : tableau à 4 valeurs (r, g, b, a); GL_SPECULAR  param : tableau à 4 valeurs (r, g, b, a); GL_POSITION – param : tableau à 4 valeurs (x, y, z, 1) – définissent la position de la lumière;
5
Paramétrer une lumière directionnelle
Paramètres pname: GL_POSITION  param : tableau à 4 valeurs (x, y, z, 0) – définissent le vecteur directeur de la lumière; Permet de simuler une source de lumière très éloignée – comme le soleil. On considère alors que la source n’émet que dans une seule direction.
Paramétrer un spot
Ajouter les paramètres suivants GL_SPOT_DIRECTION  param : tableau à 3 valeurs (x, y, z) – définissent la direction du spot; GL_SPOT_CUTOFF – param : flottant définissant le demi angle d’ouverture du spot [0..90]. GL_SPOT_EXPONENT – param : flottant définissant la concentration de lumière (l’intensité de lumière est plus importante au centre du cône – plus le facteur est petit, plus la lumière est concentrée). On peut aussi atténuer l’intensité lumineuse en fonction de la distance; GL_CONSTANT_ATTENUATION – param : flottant – facteur d’atténuation constante GL_LINEAR_ATTENUATION – param : flottant – facteur d’atténuation linéaire GL_QUADRATIC_ATTENUATION – param : flottant – facteur d’atténuation quadratique Ainsi, l’intensité lumineuse est multipliée par : 1/(Kc + Kl* d + Kq * d²) Kc : atténuation constante, Kl : atténuation linéaire, Kq : atténuation quadratique d : distance du point à la source lumineuse.
Paramétrer un matériaux
Procédure : void glMaterialf (enum face, enum Pname, float param); Ou void glMaterialfv (enum face, enum Pname, float *param); Paramètre face : GL_FRONT, GL_BACK, GL_FRONT_AND_BACK Paramètre Pname : GL_AMBIENT  param : tableau de 4 composantes (r, g, b, a) GL_DIFFUSE param : tableau de 4 composantes (r, g, b, a) GL_SPECULAR  param : tableau de 4 composantes (r, g, b, a) GL_SHININESS  param : flottant définissant la brillance d’un matériaux [0..128] 0 :le matériaux est très brillant 128 : le matériaux est peu brillant GL_EMISSION  param: tableau de 4 composantes (r, g, b, a)
6
Qualité de rendu de spéculaire
Le calcul de couleur se faisant pour chaque point et qu’entre deux points, s’opère une interpolation linéaire, la qualité de rendu dépendra très fortement de la densité du maillage utilisée.
Déplacement d’une source lumineuse
Comme nous l ’avons vu, le paramètre GL_POSITION détermine la position de la lumière. On peut positionner la lumière au sein de la fonction d ’affichage: la position de la lumière subira alors les transformations (comme un objet habituel). Dans ce cas, la position de la lumière en x, y, z est souvent de 0 (car gérée par la matrice de transformation)
Calcul des normales Le calcul de normale pour une face quelconque s ’effectue par le produit vectoriel. Pour une face directe : a, b, c : la normale de la face s ’effectue par le calcul : aac avec : yu * zv  zu * yv xbxa u v= zu* xv  xu * zv ab =ybya xu * yv  yu * xv zbza ex : soit la face suivante :c = {0, 0, 1}
Calculer la normale de la face (abc).
a = {0, 0, 0}
b = {1, 0, 0}
7
  • Univers Univers
  • Ebooks Ebooks
  • Livres audio Livres audio
  • Presse Presse
  • Podcasts Podcasts
  • BD BD
  • Documents Documents