Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
GRAPHISME PAR ORDINATEUR
SIF-1032
2
Contenu du cours 9 Création de SPOTLIGHT Ombrage Transparence
Création de l’ombrage par projection Transparence Composition d ’images (blending) Effet de brouillard (Fog) Lectures (Chapitres 8,10) Site NeHe: Leçon 28 (Ombrage), Leçon 08 (Transparence) (Fog)
3
Rendu de surfaces
4
Rendu de surfaces et ombrages
5
// Specific spot effects
Création de SPOTLIGHT Un "spotlight" est une lumière qui éclaire à l'intérieur d'un cône délimitant la zone éclairée: par exemples, un laser ou une lumière de rue. Les lignes suivantes ont été ajoutées au projet Spot, chap. 6, de la Super Bible: // Specific spot effects // Cut off angle is 60 degrees glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,60.0f); // Fairly shiny spot glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,100.0f);
6
Création de SPOTLIGHT Dans les lignes précédentes, l'angle (60o) est l'ouverture du cône d'éclairage. GL_SPOT_EXPONENT (1 à 128) est l'exposant à donner au cosinus de l'angle entre la direction de l'éclairage et la position d’un sommet d’un objet par rapport à la position de la lumière. 128 correspond à faisceau concentré. Le projet Spot montre aussi comment changer la position de la lumière et modifie avec un menu contextuel la finesse de la discrétisation d'une sphère (nombre de divisions en longitude et en latitude). La position de la lumière est montrée avec un cône rouge, et une lumière jaune. Cette lumière éclaire une sphère au centre avec plus ou moins de facettes.
7
Création de SPOTLIGHT Voici le résultat avec un rendu "flat shading" et une faible discrétisation de la sphère:
8
Création de SPOTLIGHT Voici le résultat avec un rendu "smooth shading" et une faible discrétisation de la sphère:
9
Création de SPOTLIGHT Voici le résultat avec un rendu "smooth shading" et une meilleure discrétisation de la sphère:
10
Création de SPOTLIGHT Code de la fonction RenderScene():
11
Création de SPOTLIGHT Code de la fonction RenderScene():
12
Création de SPOTLIGHT Dans le code précédent, on sauvegarde la matrice courante (model view) avec glPushMatrix(), on positionne ensuite la lumière et on ramène la matrice originale avec glPopMatrix(). Aussi glPushAttrib() permet de sauvegarder l'état de la lumière avant de modifier l'éclairage, puis on utilise glPopAttrib() pour ramener l'éclairage à son état normal. Comme OpenGL applique les transformations dans l’ordre inverse, la position et la direction de la lumière subissent une rotation en X suivie par une rotation en Y
13
Positionnement initiale de la lumière:
Création de SPOTLIGHT Positionnement initiale de la lumière: glRotatef(yRot, 0.0f, 1.0f, 0.0f); glRotatef(xRot, 1.0f, 0.0f, 0.0f); glLightfv(GL_LIGHT0,GL_POSITION,lightPos); glLightfv(GL_LIGHT0,GL_SPOT_DIRECTION,spotDir); Ensuite, un cône rouge et une petite sphère sont dessinés et positionnés pour représenter la lumière. glTranslatef(lightPos[0],lightPos[1],lightPos[2]);
14
Ombrage L’ajout de l’ombrage à une scène améliore grandement son réalisme L ’ombrage est produit lorsqu’un objet masque d ’autres objets empêchant ainsi la lumière de les illuminer
15
Ombrage Création de l’ombrage par projection
La création de l ’ombrage est basée sur la projection des sommets d ’un polygone dans un plan de référence (sol) Nous cherchons alors la position des sommets projetés dans le plan de référence Sommet projeté
16
Ombrage Création de l’ombrage par projection
La position des sommets projetés est donnée par:
17
Ombrage Création de l’ombrage par projection
D’où provient l’expression de V’ Ce que nous cherchons en fait c’est l’intersection entre la droite projetée dans la direction du vecteur (V-S) à partir du point S (source lumineuse) et le plan définit par un point A et sa normale n Utilisons alors la forme paramétrée pour définir la droite passant par le point S dans la direction (V-S)
18
Ombrage Création de l’ombrage par projection Droite L(t) L(t)
19
Ombrage Création de l’ombrage par projection
Maintenant, définissons le plan de projection définit par deux points P et B dans ce plan et la normale n au plan Plan définit dans sa forme normale P
20
Ombrage Création de l’ombrage par projection
Plan définit dans sa forme normale P
21
Ombrage Création de l’ombrage par projection
Maintenant, cherchons l’intersection V’ (sommet V projeté)
22
Ombrage Création de l’ombrage par projection
L’intersection V’ est déduite à l’aide des relations suivantes Dans le plan Sur la droite Sol’n de la dernière équation
23
Ombrage Création de l’ombrage par projection
L’intersection V’ donnée sous forme matricielle
24
Ombrage Création de l’ombrage par projection
Création d’ombrage avec OpenGL (Voir projet Shadow)
25
Ombrage Création de l’ombrage par projection
Dans les figures précédentes, la lumière est représentée par un petit point lumineux. La position de la lumière est donnée par: GLfloat lightPos[] = { -75.0f, 150.0f, -50.0f, 0.0f }; Avec la 4ième composante w=0, la lumière est supposée à l'infini (comme le soleil), les 3 premières composantes correspondent alors à la direction de l’illumination. L’illumination est alors considérée parallèle donc l’ombrage des objets est projeté de façon orthographique. Cela veut dire que l'ombre de l'avion doit être de la même taille.
26
Ombrage Création de l’ombrage par projection
Notez que la lumière étant à l'infini, le point jaune ne représente pas la position de la lumière, mais sa direction En fait, on ne devrait pas voir le point jaune, car la lumière est à l'infini. Si on remplace la composante w=0 par w=1, dans: GLfloat lightPos[] = { -75.0f, 150.0f, -50.0f, 1.0f };
27
Ombrage Création de l’ombrage par projection
28
Ombrage Création de l’ombrage par projection
La position de la lumière est alors celle montrée par le point jaune. On remarque que l'ombre est 2 fois plus grand que l'avion. Ceci découle du même effet découlant des triangles semblables, comme décrit dans la transformation en perspective. La lumière est à 150 en Y. L'avion est localisée à 0 en Y (au milieu) et le plancher en vert est à -150 en Y.
29
Ombrage (Shadow Matrix)
30
Ombrage Ajout dans SetupRC()
31
Ombrage Ajout dans RenderScene()
32
Ombrage Fonction DrawJet()
33
Transparence Une surface transparente réfléchie et transmet la lumière
La contribution de la lumière transmise est fonction du degré de transparence de la surface, et de la présence d’une source lumineuse ou d’une surface illuminée en arrière de la surface transparente
34
Transparence Pour obtenir des effets de transparence réaliste nous devons considérer la réfraction de la lumière Quand la lumière incidente frappe une surface transparente, une partie est réfléchie et une autre est réfractée selon les propriétés de réfraction de la surface (indice de réfraction)
35
Transparence Surface d’un verre (Par ray-tracing)
36
Transparence Trajet de la lumière
Un rayon de lumière émergeant d’une surface en verre voyage selon un axe parallèle à la direction incidente
37
Transparence Pour éviter une trop grande complexité de calcul de la transparence, nous pouvons ignorer le déphasage du rayon dans la surface transparente (i=r) (1-kt) est le coefficient d’opacité kt est le coefficient de transparence = (1-kt) est le coefficient d’opacité (1-)Itrans Irefl
38
Transparence Utilisation de la transparence avec OpenGL (Voir projet blendpot, fonction Redraw())
39
Transparence Utilisation de la transparence avec OpenGL (Voir projet blendpot, fonction Redraw()) (Rd, Gd, Bd) (Rs, Gs, Bs)
40
Transparence Utilisation de la transparence avec OpenGL (Voir projet blendpot, fonction Redraw()) La fonction glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA) permet de superposer un objet transparent d’opacité (GL_SRC_ALPHA) sur un autre objet d’opacité (1- ) (GL_ONE_MINUS_SRC_ALPHA) . Cette fonction indique à OpenGL de faire le calcul de couleur suivant
41
Transparence Utilisation de la transparence avec OpenGL (Voir projet blendpot)
42
Transparence Utilisation de la transparence avec OpenGL (Voir projet blendpot, fonction Redraw()) Pas de transparence L’opacité est négligée
43
Transparence Utilisation de la transparence avec OpenGL (Voir projet blendpot, fonction Redraw()) Transparence avec opacité maximale de l’objet source
44
Transparence Utilisation de la transparence avec OpenGL (Voir projet blendpot, fonction Redraw()) Pas de transparence L’opacité de l’objet source (avant plan) est nulle
45
Fog Essentiellement, l’effet de brouillard consiste à additionner (mélanger) une couleur prédéfinie aux sommets des polygones de notre scène ou aux textures et ce en fonction de la distance par rapport à l’observateur Type de brouillard GL_LINEAR: permet aux objets s’éloignant de l’observateur de se fondre graduellement à l’arrière plan GL_EXP: permet l’ajout de brouillards épais ou des nuages GL_EXP2: permet l’ajout de fumée ou de smog La commande OpenGL, glFogi() permet de spécifier le type de brouillard glFogi(GL_FOG_MODE, GL_EXP2);
46
Fog Ensuite, nous devons choisir la couleur associée au brouillard qui sera mélangée à notre scène. Le choix de cette couleur est fait par la commande glfogfv() ou glfogiv() GLFLOAT fog_color[4] = {r, g, b, a}; glFogfv(GL_FOG_COLOR, fog_color); GLINT fog_color[4] = {r, g, b, a}; glFogiv(GL_FOG_COLOR, fog_color); Pour épaissir le brouillard nous pouvons utiliser la commande: glFogf(GL_FOG_DENSITY, density); // ex: density = 0.25
47
Fog Pour spécifier la profondeur de l’effet de brouillard nous devons utiliser les appels suivants: glFogf(GL_FOG_START, 0); // debut du brouillard glFogf(GL_FOG_END, 10.0f); // fin du brouillard Nous pouvons aussi exiger que le calcul du brouillard soit fait sur chaque pixel au lieu de chaque sommet. Il faut alors utiliser la commande: glHint(GL_FOG_HINT, GL_NICEST); glHint(GL_FOG_HINT, GL_DONT_CARE); // OpenGl peut // choisir la qualité du fog qu’il veut Pour activer le mode fog il faut faire l’appel: glEnable(GL_FOG);
48
Fog (projet Fog_OGL)
49
Fog (projet Fog_OGL)
50
Fog (projet Fog_OGL)
51
Fog (projet Fog_OGL)
52
Fog (projet Fog_OGL)
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.