Visualisation d’une scène glViewPort Il ne faut pas confondre la fenêtre d’affichage (définie par le système de fenêtrage qui est indépendant d’OpenGL) et le cadre (partie de fenêtre) dans lequel on veut visualiser la scène. De même que l’on colle une photo sur un poster, on va positionner l’image de la scène dans la fenêtre en la déformant éventuellement pour la faire rentrer dans un cadre (il faut conserver le ratio largeur/hauteur pour obtenir une image non « déformée »). C’est le rôle de la fonction glViewport . glViewport(GLint x0, GLint y0, GLint largeur, GLint hauteur) gluLookAt gluLookAt( GLdouble Px, GLdouble Py, GLdouble Pz, GLdouble Cx, GLdouble Cy, GLdouble Cz, GLdouble Hx, GLdouble Hy, GLdouble Hz) // position de l’appareil // point visé dans la scène // haut de l’appareil void afficheMaScene(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity() ; gluLookAt(0,0,5, 0,0,0, 0,1,0) ; construire la scene glutSwapBuffers(); } Le mode projection Lorsqu’une scène est construite, sa visualisation nécessite deux types de transformation : 1. des transformations dans l’espace 3D qui permettent de positionner le point de vue et les éventuels éclairages si l’on veut obtenir un rendu réaliste, o matrice de modélisation GL_MODELVIEW o les lumières et le point de vue sont positionnés comme les autres acteurs de la scène. 2. la transformation qui consiste à projeter cette scène 3D sur une fenêtre 2D et qui caractérise les propriétés de la prise de vue. o matrice de projection GL_PROJECTION Frame buffer Espace mémoire dont le contenu est une représentation logique de ce qui apparaît à l’écran Deux dimensions définissent la résolution spatiale de l’image et forment un plan Une troisième dimension appelée “profondeur” spécifie le nombre de bits utilisés pour représenter un pixel Intermédiaire entre l’écran et la bibliothèque graphique OpenGL Bibliothèque (API) multi-plateforme (portable) de fonctions graphiques permettant de réaliser des scènes réalistes en 2D ou en 3D Tracé de figures géométriques Rendu par projection orthogonale ou perspective Placage de texture Simulation d'éclairages réalistes Effet de brouillard, de flou … Glut (OpenGL Utility Toolkit) Système de fenêtrage simple et portable basé sur la programmation évènementielle. Gère les interactions avec le système d'exploitation Multi fenêtrage Gestion interruptions (clavier, souris, …) Gestion de menus SDL offre également ces fonctionnalités. GLU (OpenGL Utility Library) Librairie standard proposant des commandes bas-niveau écrites en GL: certaines transformations géométriques triangulation des polygones rendu des surfaces paramétriques et quadriques Quand rien ne se passe glutIdleFunc o pas bien glutTimerFunc o bien Utilité d’une représentation en coordonnées homogènes des transformations géométriques Représenter les transformations sous forme matricielle. Composer ces transformations par des multiplications de matrices. VRAI INTERET D’UTILISER glMultMatrix Pour chaque objet, garder sa matrice de transformation glLoadMatrix : charger la matrice dans la pile MODL_VIEW glMultMatrix : multiplication de la matrice sur la pile avec la matrice choisie En multipliant les deux matrices, on a la transformation voulue sur l’objet auquel on a affecté la matrice. Modifier le contraste d’une image Expansion dynamique Contraste par saturation Seuillage ? ZBuffer Le contexte graphique doit prévoir l’utilisation du ZBuffer o glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH) Initialiser le ZBuffer o glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) Activer le ZBuffer o glEnable (GL_DEPTH_TEST) Lumières Couleurs Saturation de lumière : blanc Absence de lumière : noir Lumière issue source active : lampe, soleil source passive : restitue une partie de la lumière reçue La perception de la couleur dépend de la distribution des longueurs d’onde de la source lumineuse des caractéristiques physiques de l’objet des positions de la source, l’objet et l’observateur Eclairage Un rayon lumineux sur une surface Une partie est absorbée (filtrage) Une autre est réfléchie (lois de la normale) : réflexion spéculaire Le reste est diffusé dans toutes les directions : réflexion diffuse Les réflexions multiples sur les objets génèrent la lumière ambiante qui n’a pas d’orientation privilégiée et éclaire les zones d’ombre. Position de l’éclairage Les matériaux Cuivre, argent, … Etat de la surface Mat,brillant, … Brouillard (fog) Perte d’information, c’est à l’utilisateur de se reconstruire mentalement la partie de la scène Sensation de profondeur Estompe les objets en fonction de leur distance au point de vue Extrapolation Pour lisser, plutôt que d’avoir des étages à différents niveaux, on fait une espèce de moyenne (cf analyse numérique) Textures / images Textures Tableau de données, de texels Définir une texture (image, niveaux de gris, etc.) Activer le placage de texture Définir comment la texture est appliquée aux objets Afficher la scène Images Prend la forme d’un tableau rectangulaire Formats : PBM, PGM, PPM Matrice de projection gluOrtho2D(xmin, xmax, ymin, ymax) Concordance pixel image / coordonnée fenêtre Simuler la complexité des détails sur une surface augmenter le nombre de polygones définissant la surface mais augmentation de la complexité de la modélisation (taille de l’objet, coût de génération, etc.) et du rendu (visibilité, illumination, ....) Apposer une texture sur une surface tel du papier peint Texture mapping technique consistant à appliquer une texture sur une surface Texture map texture apposée sur une surface Texel élément de base d’une texture, analogue au pixel d’une image L’histogramme Donner la fréquence d’apparition des différents niveaux de gris qui composent une image But : optimiser la dynamique des événements à analyser Modification de la dynamique des luminances par une fonction f croissante conservation des contrastes relatifs Pour la suite, on supposera que f est défini de l’espace des luminances dans l’intervalle [0, 255] Egalisation d’histogramme Rendre les niveaux de gris équiprobables On part du niveau le plus bas et on calcule la valeur cumulée des niveau jusqu’à une valeur moyenne Parfois, on utilise une distribution de référence (spécification d’histogramme) Histogramme cumulé Seuillage Ne conserver que les pixels dont l’intensité est au-dessus d’un seuil t Expansion dynamique