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 SIF-1032. Contenu du cours 8 Rendu de surfaces –Modèles de rendu de surfaces –Illumination de la scène –Sources lumineuses –Composante.

Présentations similaires


Présentation au sujet: "GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 8 Rendu de surfaces –Modèles de rendu de surfaces –Illumination de la scène –Sources lumineuses –Composante."— Transcription de la présentation:

1 GRAPHISME PAR ORDINATEUR SIF-1032

2 Contenu du cours 8 Rendu de surfaces –Modèles de rendu de surfaces –Illumination de la scène –Sources lumineuses –Composante spéculaire –Surfaces cachées Lectures (Chapitre 8)

3 Rendu de surfaces Les méthodes de rendu de surfaces permettent d’ajouter les surfaces, leurs propriétés ainsi que leurs interactions avec les sources lumineuses Rendu uniforme (flat shading)

4 Rendu de surfaces Rendu lisse (Smooth shading)Rendu lisse avec composante spéculaire

5 Rendu de surfaces Modèles de rendu de surfaces –L ’utilisation de la commande glColor() sans modèle de rendu de surface évolué, permet d ’établir la couleur courante avec laquelle les objets sont dessinés (lignes, points, polygones) –glColor (r,g,b,alpha); x: nombre d ’arguments du glColor (3 ou 4) t: type des arguments (b, d, f, i …) –glColor3f(1.0,0.0,0.0) (ROUGE) –glColor3ub(0,255,0) (VERT)

6 La commande glColor() permet d ’établir la couleur courante utilisée pour dessiner chaque sommet d ’un polygone, les droites qui forment son contour et sa surface, et ce avec la couleur spécifiée avec la commande glColor() Si nous spécifions une couleur différente à chaque sommet et un modèle de rendu lisse (smooth shading), la surface d ’un polygone sera alors colorée avec un dégradé de couleur Pour une droite, sa couleur sera dégradée linéairement entre les couleurs des extrémités Rendu de surfaces

7

8 Exemple Triangle (voir projet Triangle) Rendu de surfaces

9 Exemple Triangle (voir projet Triangle) Rendu de surfaces

10 Exemple Triangle (voir projet Triangle, GL_FLAT) Rendu de surfaces

11 Exemple Jet (voir projet Jet, couleur) Rendu de surfaces

12 Illumination de la scène –Pour permettre l ’illumination de la scène il faut inclure la commande: glEnable(GL_LIGHTING); –Indique à OpenGL d ’utiliser les propriétés matérielles et d ’illumination pour déterminer les couleurs de chaque sommet des polygones –Sans GL_LIGHTING, les objets sont sombres

13 Rendu de surfaces Illumination de la scène –Exemple Lighted Jet (projet Litjet)

14 Rendu de surfaces Illumination de la scène –Exemple Lighted Jet (projet Litjet)

15 Rendu de surfaces Illumination de la scène –Établir le modèle d ’illumination Lumière ambiante (Voir projet Ambient) –Permet d ’établir l ’intensité RGB de la lumière ambiante Modèle d ’illumination, intensité RGB ambiante

16 Rendu de surfaces Illumination de la scène –Établir le modèle d ’illumination Lumière ambiante (Exemple Ambient Lighted Jet, projet Ambient) Lumière ambiante d ’intensités différentes, sans propriétés matérielles

17 Rendu de surfaces Illumination de la scène –Établir le modèle d ’illumination Lumière ambiante (Exemple Ambient Lighted Jet, projet Ambient) Lumière ambiante d ’intensités différentes, avec propriétés matérielles

18 Rendu de surfaces Illumination de la scène –Établir les propriétés matérielles des surfaces Le color tracking est le plus souvent utilisé pour établir les propriétés des surfaces La commande glColor() permet alors d ’établir les propriétés matérielles des surfaces La commande glEnable(GL_COLOR_MATERIAL) permet d ’établir le mode color tracking La commande: glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE), permet d’établir les propriétés de réflexion ambiante et diffuse des portions frontales des surfaces. Ces commandes indiquent que les propriétés ambiante et diffuse des surfaces seront déterminées par les coefficients K d et K a passés en arguments de la commande glColor(). Dans le cas du projet Ambient, le coefficient K a est fixé avec: glColor3ub(128, 128, 128);

19 Rendu de surfaces Illumination de la scène –Établir les propriétés matérielles des surfaces (Exemple Ambient Lighted Jet, projet Ambient)

20 Rendu de surfaces Illumination de la scène –Établir les propriétés matérielles des surfaces (Exemple Ambient Lighted Jet, projet Ambient) K a = K d = (0,1,0)

21 Rendu de surfaces Illumination de la scène –Établir les propriétés matérielles des surfaces Source ambiante à (1.0, 1.0, 1.0, 1.0)

22 Rendu de surfaces Illumination de la scène –Établir les propriétés matérielles des surfaces Source ambiante à (0.5, 0.5, 0.5, 1.0)

23 Rendu de surfaces Source lumineuse –L’ajout de sources lumineuses permet de reproduire des scènes avec beaucoup plus de réalisme –Une source lumineuse possède une direction, une position, et une intensité RGB –OpenGL supporte huit sources lumineuse pouvant être localisées à n ’importe quelle position dans la scène et même à l ’infini (rayons lumineux parallèles)

24 Rendu de surfaces Source lumineuse –Exemple Lighted Jet (voir projet Litjet)

25 Rendu de surfaces Source lumineuse –Exemple Lighted Jet (voir projet Litjet, pas de lumière)

26 Rendu de surfaces Source lumineuse –Exemple Lighted Jet (voir projet Litjet)

27 Rendu de surfaces Source lumineuse –Spécification de la position d’une lumière: GLfloat lightPos[] = { 0.0f, 100.0f, 0.0f, 0.0f }; –Notez la composante w=1 (4 ième argument) de la position. w=1 indique une lumière localisée, avec atténuation, omni-directionnelle. Dans ce cas w=0, on obtient une lumière à l'infinie, directionnelle. –Une lumière (GL_LIGHT0) est ensuite ajoutée: glLightfv(GL_LIGHT0,GL_AMBIENT, ambientLight); –Cette lumière est ensuite positionnée: glLightfv(GL_LIGHT0,GL_POSITION, lightpos);

28 Rendu de surfaces Source lumineuse –Exemple Lighted Jet (voir projet Litjet)

29 Rendu de surfaces Source lumineuse –Exemple Lighted Jet (voir projet Litjet)

30 Rendu de surfaces Source lumineuse –Exemple Lighted Jet (voir projet Litjet)

31 Rendu de surfaces Source lumineuse –Le calcul de l ’intensité lumineuse diffuse doit tenir compte de l ’orientation de chaque surface (polygone) et de la position de la source lumineuse

32 Rendu de surfaces Source lumineuse –Exemple Lighted Jet (voir projet Litjet) La fonction calcNormal() permet de calculer la normale d ’un polygone et ce à partir de trois de ces sommets donnés en sens anti-horaire

33 Rendu de surfaces Source lumineuse –Exemple Lighted Jet (voir projet Litjet)

34 Rendu de surfaces Source lumineuse –Exemple Lighted Jet (voir projet Litjet) glNormal3 (): permet de spécifier la normale d ’une surface et de l ’associée à un ou plusieurs sommets t: type des arguments (b, d, f, i, s, bv, dv, fv, …) glNormal3f(0.0f, -1.0f, 0.0f) glNormal3fv(normal) // normal est un vecteur

35 Rendu de surfaces Source lumineuse –Exemple Lighted Jet (voir projet Litjet)

36 Rendu de surfaces Composante spéculaire –Lorsque nous visualisons des surfaces métalliques il faut alors considérer ses propriétés de brillance (spéculaire)

37 Rendu de surfaces Composante spéculaire –Lorsque nous visualisons des surfaces métalliques il faut alors considérer ses propriétés de brillance (spéculaire)

38 Rendu de surfaces Composante spéculaire –Exemple Shiny Jet (voir projet Shinyjet) Spécification d ’une composante de lumière spéculaire Spécification des propriétés de réflexion spéculaire des surfaces Spécification de l ’exposant spéculaire (n s ) qui permet de déterminer l ’ouverture du faisceau lumineux spéculaire réfléchit

39 Rendu de surfaces Composante spéculaire –Exemple Shiny Jet (voir projet Shinyjet)

40 Rendu de surfaces Composante spéculaire –Une composante spéculaire (GL_SPECULAR) est ajoutée à la lumière. –Les lignes suivantes spécifient les propriétés spéculaires des surfaces: glMaterialfv(GL_FRONT, GL_SPECULAR,specref); glMateriali(GL_FRONT,GL_SHININESS,128); –La mesure "GL_SHININESS" doit être entre 0 et 128. Elle donne l’ouverture du faisceau réfléchis (point fortement lumineux), et 128 est le plus petit (concentré).

41 Rendu de surfaces Composante spéculaire –Exemple Shiny Jet (voir projet Shinyjet)

42 Rendu de surfaces Composante spéculaire –Exemple Shiny Jet (voir projet Shinyjet)

43 Rendu de surfaces Composante spéculaire –Exemple Shiny Jet (voir projet Shinyjet)

44 Rendu de surfaces Composante spéculaire –Exemple Shiny Jet (voir projet Shinyjet)

45 Rendu de surfaces Composante spéculaire –Dans le projet Shiny Jet, les surfaces des triangles sont grandes, la normale est donc constante sur ces surfaces, donc le calcul spéculaire est constant sur toute la grandeur de ces surfaces. –Nous pouvons observer néanmoins des variations d'intensités, qui peuvent être dues à l'atténuation. L'intensité de l'éclairage dépend aussi de la distance entre la position de la lumière et la position des sommets. L’orientation du vecteur de réflexion R varie aussi avec la position. –L'effet spéculaire est plus évident dans le cas d'objets présentant beaucoup de surfaces courbes, comme des sphères ou une théière.

46 Rendu de surfaces Composante spéculaire –Normales pour les sommets Modifier les couleurs des sommets n'est pas toujours facile pour implémenter les effets de lumières comme le "smooth shading". Comme la couleur réfléchie au niveau de chaque sommet est déduite à partir de la normale de sa surface, nous pourrions alors donner une normale à chaque sommet, ce qui permettrait de varier les couleurs sur une surface planaire. En général, la normale donnée à un sommet serait la moyenne des normales des surfaces extérieures adjacentes (ou incidentes) à un sommet. C'est-à-dire, la moyenne des normales des facettes qui sont connexes à un sommet. Ceci améliore la visualisation en enlevant l'effet de transition brusque entre les facettes.

47 Rendu de surfaces Composante spéculaire –Exemple Shiny Jet (voir projet Shinyjet)

48 Rendu de surfaces Surfaces cachées –Exemple Shiny Jet (voir projet Shinyjet, sans surfaces cachées)

49 Rendu de surfaces Surfaces cachées –Exemple Shiny Jet (voir projet Shinyjet, sans surfaces cachées)

50 Rendu de surfaces Surfaces cachées –Exemple Shiny Jet (voir projet Shinyjet, sans surfaces cachées)

51 Rendu de surfaces Surfaces cachées –Exemple Shiny Jet (voir projet Shinyjet, sans surfaces cachées)

52 Détection des faces arrières (back face) –Cette méthode espace-objet est rapide et simple –Elle permet d’identifier les faces arrières (cachées) d’un polyèdre –Si nous connaissons la normale N d’une surface d’un polygone et V un vecteur dans la direction de visuali- sation –La surface (face) du polygone sera cachée si

53 Détection des faces arrières (back face) –Si l’objet est déjà en coordonnées de projection et que V = (0,0,V z ) – où C est la composante en z de la normale N – Le signe de C permet alors de déterminer la visibilité d’un polygone

54 Détection des faces arrières (back face) –Avec un système de visualisation dont la direction de visualisation est la direction négative sur l’axe Z v une surface d’un polygone est cachée si C  0 –Cette méthode est aussi efficace pour une scène avec plusieurs polyèdres non superposés

55 Détection des faces arrières (back face) –Calcul de la normale N à un plan en utilisant trois sommets d’un plan (x 1,y 1,z 1 ), (x 2,y 2,z 2 ) et (x 3,y 3,z 3 ) Calcul des coefficients A, B, C et D de l’équation d’un plan Déduire N

56 Méthode tampon-profondeur (depth buffer) –Cette méthode espace-image est basée sur la compa- raison des profondeurs des surfaces à chaque position dans le plan de projection –Cette méthode est aussi appelée tampon-z (z-buffer) puisque les profondeurs sont mesurées sur l’axe z du système de coordonnées de visualisation –Chaque surface de la scène est traitée séparément point à point (pixel) –Avec les coordonnées de projection de chaque objet, les coordonnées (x,y,z) de leurs surfaces correspondent à la projection orthographique d’un point (x,y) sur le plan de visualisation

57 Méthode tampon-profondeur (depth buffer) –Pour chaque position (x,y), la profondeur des surfaces des objets peut être comparée par la coordonnée z –L’intensité (couleur) de la surface la plus proche à chaque point (x,y) est conservée pour l’affichage

58 Méthode tampon-profondeur (depth buffer) –Algorithme depth-buffer Initialisation des tampons de profondeur et d’intensité depth(x,y) = Z back refresh(x,y) = Ibackgroud Pour chaque position (x,y) de chaque surface polygonale –Calculer la profondeur z –Si z > depth(x,y) Alors depth(x,y) = z refresh(x,y) = Isurface(x,y) Affichage du tampon refresh(x,y) –La profondeur d’un point de position (x,y) sur une surface est calculée par


Télécharger ppt "GRAPHISME PAR ORDINATEUR SIF-1032. Contenu du cours 8 Rendu de surfaces –Modèles de rendu de surfaces –Illumination de la scène –Sources lumineuses –Composante."

Présentations similaires


Annonces Google