La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

GRAPHISME PAR ORDINATEUR

Présentations similaires


Présentation au sujet: "GRAPHISME PAR ORDINATEUR"— Transcription de la présentation:

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) Transparence avec OpenGL 3.3+

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 (VL Tess):

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)

53 Ombrage avec OpenGL 3.3+ Voir le site:
Voir le code:

54 Ombrage avec OpenGL 3.3+ L’algorithme de création de l’ombrage consiste: La scène est générée en utilisant la lumière, la profondeur de chaque fragment est calculée La scène est régénérée mais avec un test pour savoir si le fragment est dans l’ombrage

55 Ombrage avec OpenGL 3.3+ L’algorithme de création de l’ombrage basé sur la notion de projection de texture (analogie avec le projecteur de diapositives

56 Ombrage avec OpenGL 3.3+ L’algorithme de création de

57 Ombrage avec OpenGL 3.3+ La shadow map est stockée dans une texture ( voir le code du programme:

58 Ombrage avec OpenGL 3.3+ La shadow map est créée par une projection orthographique

59 Ombrage avec OpenGL 3.3+ Vertex Shader (ShadowMapping_SimpleVersion.vertexshader)

60 Ombrage avec OpenGL 3.3+ Fragment Shader (ShadowMapping_SimpleVersion.fragmentshader)

61 Ombrage avec OpenGL 3.3+ Texture (shadow map) générée

62 Ombrage avec OpenGL 3.3+ La matrice depthBiasMVP permet de transformer les coordonnées d’un fragment en coordonnées de texture du shadow map (ex: 0, 0 fragment centré devient 0.5, 0.5 centre de la texture shadow map)

63 Ombrage avec OpenGL 3.3+ Sélection des textures
Texture contenant les propriétés de surfaces Texture contenant la carte de profondeur

64 Ombrage avec OpenGL 3.3+ Critère de visibilité
texture( shadowMap, ShadowCoord.xy ).z est la distance entre la lumière et l’objet le plus proche générant de l’ombrage ShadowCoord.z est la distance entre la lumière et le fragment actuel

65 Ombrage avec OpenGL 3.3+ Calcul de la couleur en considérant l’ombrage

66 Ombrage avec OpenGL 3.3+ Résultats

67 Ombrage avec OpenGL 3.3+ Résultats (corrigé)

68 Transparence avec OpenGL 3.3+
Voir le site: Voir le code: Modifications à apporter pour implémenter la transparence

69 Transparence avec OpenGL 3.3+
Sélection de la fonction de gestion de la profondeur et désactivation du culling Activation de la transparence et sélection de la fonction de transparence

70 Transparence avec OpenGL 3.3+
Fragment shader

71 Transparence avec OpenGL 3.3+
Application de la transparence


Télécharger ppt "GRAPHISME PAR ORDINATEUR"

Présentations similaires


Annonces Google