![Page 1: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/1.jpg)
Modélisation Géométrique et
Synthèse d’image
Sandrine LANQUETINMarc NEVEU
1
![Page 2: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/2.jpg)
OpenGL
2
![Page 3: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/3.jpg)
Introduction
Indépendant du matériel et du système d’exploitation
développé par Silicon graphics bibliothèque de fonctions bas niveaux fonctions bas niveaux pour définir
des objets graphiques simples, des couleurs, les points de vue, les sources de lumière, ....
OpenGL = librairie graphique 3D
3
![Page 4: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/4.jpg)
Pas un langage de programmation Pas orienté objet Pas d’outils de modélisation
Introduction
Pas d’interaction avec l’utilisateur (écran, souris, clavier,etc…)
Pas d’outil de fenêtrage
Pas de gestion des événements
GLUT : OpenGL Utility Toolkit
GLU : OpenGL Utility Library
Pas d’interaction avec l’utilisateur (écran, souris, clavier,etc…)
Pas de gestion des événements
4
![Page 5: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/5.jpg)
Installation freeglut VS admin
Récupérer Freeglut 2.4.0 sur http://freeglut.sourceforge.net/index.php#download
Copier freeglut.dll dans C:\Windows\System32 (admin)
Copier freeglut.lib dans le répertoire Lib de Visual C++, pour VS8 : c:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib
Copier freeglut.h et tous les .h dans le répertoire Include/gl de Visual C++ pour VS8 : c:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\gl 5
![Page 6: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/6.jpg)
Installation freeglut VS admin
Récupérer Freeglut 2.4.0 sur http://freeglut.sourceforge.net/index.php#download
Copier freeglut.dll dans C:\Windows\System32 (admin)
Copier freeglut.lib dans le répertoire Lib de Visual C++, pour VS8 : c:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib
Copier freeglut.h et tous les .h dans le répertoire Include/gl de Visual C++ pour VS8 : c:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include\gl 6
![Page 7: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/7.jpg)
Installation freeglut VS lambda
Récupérer Freeglut 2.4.0 sur http://freeglut.sourceforge.net/index.php#download
Pas admin : rep Include (.h) et Lib (.lib)
Outils Options Projets et solutions Répertoire de VC++
7
![Page 8: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/8.jpg)
Installation freeglut VS lambda
8
![Page 9: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/9.jpg)
Installation freeglut VS lambda
Copier freeglut.dll dans Debug ou Release
9
![Page 10: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/10.jpg)
Installation freeglut Linux
(Ubuntu) Admin
sudo apt-get install freeglut3 freeglut3-dev
Pas admin
10
![Page 11: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/11.jpg)
Code C++
Inclure#include freeglut.h
#include GL/glu.h
ou #include GL/freeglut.h
11
![Page 12: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/12.jpg)
Fonctions OpenGL
Primitives géométriques :
points, segments, polygones
préfixe : gl
glColor2f()
12
![Page 13: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/13.jpg)
GLUT :OpenGL Utility Toolkit
Gestion de fenêtres
Gestion d ’événements (souris, clavier)
Affichage et mise à jour
Primitives : sphère, cylindre…
glutMouseFunc()
13
![Page 14: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/14.jpg)
GLUOpenGL Utility Library
Transformations géométriques
Triangulation de polygones
Rendu des surfaces
gluLookAt()
14
![Page 15: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/15.jpg)
GLUT : fenêtres
glutInit(int *arg, char **argv)
initialise GLUT
15
Ex :int main(int argc, char** argv){
glutInit(&argc,argv); …}
![Page 16: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/16.jpg)
GLUT : fenêtres
void glutInitDisplayMode(unsigned int mode)
choix : RGBA ou color-index, un ou deux tampons
Ex :glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
Fenêtre en double tampon
Modèle chromatique RVBA
Tampon de profondeur
![Page 17: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/17.jpg)
GLUT : fenêtres
glutInitWindowPosition ( int x, int y)
coordonnées écran du coin haut gauche de la fenêtre
glutInitWindowSize(int width, int size)
taille en pixels de la fenêtre
17
Ex ://position de la fenêtreglutInitWindowPosition(200,200); //taille initiale de la fenêtreglutInitWindowSize(500,500) ;
![Page 18: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/18.jpg)
GLUT : fenêtres
glutCreateWindow(char *string)
crée une fenêtre avec un nom de type string, fenêtre affichée
que lorsque glutMainLoop() est appelée
18
Ex ://création de la fenêtre glutCreateWindow(argv[0]) ;
![Page 19: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/19.jpg)
void main(int argc, char** argv){
glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGB
| GLUT_DEPTH | GLUT_DOUBLE); //taille initiale de la fenêtre glutInitWindowSize(500,500) ; //position de la fenêtre glutInitWindowPosition(200,200); //création de la fenêtreglutCreateWindow("Robot") ; Init() ; //lancement de la boucle principaleglutMainLoop(); return (0);
}
main(int argc, char** argv)
19
![Page 20: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/20.jpg)
![Page 21: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/21.jpg)
GLUT : Actualisation Affichage
glutDisplayFunc(void *(func)(void))
événement le plus important, actualisation d ’affichageAppel de la fonction d’affichageToutes les routines nécessaires à la reconstitution de la scène doivent être dans la fonction d'affichage
Ex :glutDisplayFunc(affichage);
void affichage(){…}
![Page 22: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/22.jpg)
GLUT : Actualisation Affichage
glutMainLoop(void)
dernière chose à faire
toutes les fenêtres qui ont été créées sont maintenant affichées
le rendu dans ces fenêtres effectué
glutPostRedisplay(void)
lorsqu’une fenêtre est modifiée22
![Page 23: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/23.jpg)
GLUT : Actualisation Affichage
void clavier(…){
switch(touche){case 27 :
exit(0) ;case ‘a’ : case ‘A’ :
…. glutPostRedisplay();
break;}
}
![Page 24: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/24.jpg)
GLUT : évènements
glutReshapeFunc (void (*func)(int w, int h))
action à exécuter quand la fenêtre est redimensionnée
Ex :glutReshapeFunc (refenetrer);
void refenetrer (int w, int h){…}
![Page 25: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/25.jpg)
GLUT : évènements
glutKeyboardFunc(void (* func)(unsigned char key, int x, int y))
associer une routine à une touche du clavier
25
Ex :glutKeyboardFunc(clavier);
void clavier(unsigned char key, int x, int y){…}
![Page 26: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/26.jpg)
GLUT : évènements
Touches spéciales GLUT_KEY_UP GLUT_KEY_DOWN GLUT_KEY_LEFT GLUT_KEY_RIGHT
freeglut_std.h
![Page 27: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/27.jpg)
GLUT : évènements
glutMouseFunc(void (* func)(int button, int state, int x, int y))
associer une routine à un bouton (pression ou relachement)
27
Ex :glutMouseFunc(souris);
void souris(int button, int state, int x, int y){…}
![Page 28: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/28.jpg)
GLUT : évènements
Bouton GLUT_LEFT_BUTTON GLUT_RIGHT_BUTTON GLUT_MIDDLE_BUTTON
Etat GLUT_DOWN GLUT_UP
![Page 29: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/29.jpg)
GLUT : évènements
glutMotionFunc(void (*func)(int x, int y))
appel d’une routine pendant que la souris se déplace tout en appuyant sur un bouton
29
Ex :glutMotionFunc(souris2);
void souris2(int x, int y){…}
![Page 30: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/30.jpg)
GLUT : processus arrière-plan
glutIdleFunc (void (*func)(void))
fonction à exécuter quand aucun évènement est en cours
30
Ex :glutIdleFunc (anim);
void anim(){…}
![Page 31: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/31.jpg)
GLUT : objets 3D
Wire mode fil de fer
Solid pleinvoid glutSolidCube (GLdouble width)
void glutWireCube (GLdouble width)
void glutSolidSphere (GLdouble radius, GLint slices, GLint stacks)
void glutWireSphere (GLdouble radius, GLint slices, GLint stacks)
http://openglut.sourceforge.net/group__geometry.html 31
![Page 32: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/32.jpg)
glutSolidSphere (GLdouble r, GLint m, GLint p);
glutWireSphere (GLdouble r, GLint m, GLint p);
GLUT : sphère
32glutSolidSphere (2.0, 30, 20);
![Page 33: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/33.jpg)
glutSolidCube (GLdouble taille);
glutWireCube (GLdouble taille);
GLUT : cube
33
glutSolidCube (1.5);
![Page 34: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/34.jpg)
glutSolidCone (GLdouble r, GLdouble h, GLint m, GLint p);
glutWireCone (GLdouble r, GLdouble h, GLint m, GLint p);
GLUT : cone
34
glutSolidCone (1.5, 2.0, 20, 15);
![Page 35: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/35.jpg)
glutSolidTorus (GLdouble rIn, GLdouble rOut, GLint m, GLint p);
glutWireTorus (GLdouble rIn, GLdouble rOut, GLint m, GLint p);
GLUT : tore
35
glutSolidTorus (0.2, 1.0, 20, 15);
![Page 36: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/36.jpg)
glutSolidTeapot (GLdouble taille);
glutWireTeapot (GLdouble taille);
GLUT : théière
36
glutSolidTeapot (2.0);
![Page 37: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/37.jpg)
void glutSolidCylinder (GLdouble r, GLdouble h, GLint m, GLint p)
freeGLUT : cylindre
37
glutSolidCylinder (0.5, 1.0, 10, 5)
![Page 38: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/38.jpg)
glutSolidDodecahedron ( );glutWireDodecahedron ( );
glutSolidOctahedron ( );glutWireOctahedron ( );
glutSolidTetraahedron ( );glutWireTetraahedron ( );
GLUT : objets 3D
38
![Page 39: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/39.jpg)
OpenGL : Dessin
Effacer une fenêtre
Spécifier une couleurglColor3f(0.0,0.0,0.0,0.0); //NoirglColor3f(1.0,0.0,0.0,0.0); //Rouge
Achever un dessinglFlush();
glClearColor(0.0,0.0,0.0,0.0); glClear(GL_COLOR_BUFFER_BIT);
39
![Page 40: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/40.jpg)
OpenGL : Dessin
Un Point Un sommet
Un sommet
Un Segment
![Page 41: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/41.jpg)
OpenGL : Dessin
void glVertex{234}{sifd}(coords);
Valeur de z par défaut : 0
Valeur de w par défaut : 1
L’appel à glVertex*() est effectif seulement entre glBegin() et glEnd()
![Page 42: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/42.jpg)
OpenGL : Dessin
Appeler un sommets
glVertex3f(1.1, 1.0, 3.5);//S(1.1, 1.0, 3.5)
42
Exemple : Afficher un point
glBegin (GL_POINTS); glVertex3f(1.1, 1.0, 3.5);glEnd();
![Page 43: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/43.jpg)
OpenGL : Dessin
Afficher une primitive géométrique
glBegin (mode);
//appel des sommets
glEnd();
Tout dessin est une liste d’appel de la fonction
glVertex*()
43
![Page 44: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/44.jpg)
OpenGL : Dessin
Exemple : Afficher un quadrilatère
glBegin (GL_POLYGON); glVertex2d(0,0) glVertex2d(1,0); glVertex2d(1,1); glVertex2d(0,1);glEnd();
(0,0) (1,0)
(1,1)(0,1)
44
![Page 45: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/45.jpg)
glBegin(GL_POLYGON);{
glVertex2f(0.0, 0.0);glVertex2f(4.0, 0.0);glVertex2f(6.0, 1.5);glVertex2f(4.0, 3.0);glVertex2f(0.0, 3.0);
}glEnd();
OpenGL : Dessin
![Page 46: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/46.jpg)
glBegin(GL_POINTS);{
glVertex2f(0.0, 0.0);glVertex2f(4.0, 0.0);glVertex2f(6.0, 1.5);glVertex2f(4.0, 3.0);glVertex2f(0.0, 3.0);
}glEnd();
Geometric Drawing Primitives
![Page 47: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/47.jpg)
OpenGL : Points
GL_POINTS
V0
V2
V4
V3
V1
47
![Page 48: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/48.jpg)
OpenGL : Lignes
GL_LINES
V0
V1
V2
V3
V4
V5
V6
V7
GL_LINE_STRIP
V0
V1
V2
V3
V4
GL_LINE_LOOP
V0
V1
V2
V3
V4
48
![Page 49: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/49.jpg)
OpenGL : Triangles
GL_TRIANGLES
V0
V1
V2
V3
V4
V5
V6
V7
V8
49
GL_TRIANGLE_STRIP
V0
V1
V2
V3
V4
V5
V6
GL_TRIANGLE_FAN
V0
V1
V2
V3
V4
![Page 50: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/50.jpg)
OpenGL : Quadrilatères
50
GL_QUADS
V0
V1
V2
V3
V4V
5
V6
V7
GL_QUAD_STRIP
V0
V1
V2
V3
V4
V5
V6
V7
![Page 51: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/51.jpg)
OpenGL : Polygone
GL_POINTS
V0
V2
V4
V3
V1
GL_POLYGON
V0
V2
V4
V3
V1
51
![Page 52: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/52.jpg)
glBegin() & glEnd()
V0V1
V2
V3
V4V5
V6
V7
GL_POINTS
![Page 53: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/53.jpg)
glBegin() & glEnd()
V0V1
V2
V3
V4V5
V6
V7
GL_LINES
![Page 54: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/54.jpg)
glBegin() & glEnd()
V0V1
V2
V3
V4V5
V6
V7
GL_LINE_LOOP
![Page 55: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/55.jpg)
glBegin() & glEnd()
V0V1
V2
V3
V4V5
V6
V7
GL_TRIANGLES
![Page 56: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/56.jpg)
glBegin() & glEnd()
V0V1
V2
V3
V4V5
V6
V7
GL_POLYGON
![Page 57: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/57.jpg)
OpenGL : Dessins
Exemple#define PI 3.141592#define n 20…glBegin(GL_LINE_LOOP); for(int i=0;i<n;i++) {
angle = 2.0*PI*i/n; glVertex2f(cos(angle),sin(angle));
}glEnd();
…
Que dessine cet exemple ?57
![Page 58: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/58.jpg)
Un polygone peut être dessiné en mode
Un polygone possède deux faces Avant Arrière
OpenGL : Polygones
Fil de fer Rempli avec la couleur courante
GL_FRONT
GL_BACK
GL_LINEGL_FILL
GL_FRONT_AND_BACK58
![Page 59: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/59.jpg)
Faces avant/arrière ?
Ordre trigo Face avant
Ordre “Clockwise” Face arrière
V0
V1
V2
V0
V2
V1
![Page 60: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/60.jpg)
OpenGL : Polygones
void glPolygonMode(GLenum face, GLenum mode);Controle le mode de dessin des faces avant et arrière d’un polygone
face : GL_FRONT, GL_BACK GL_FRONT_AND_BACK
mode :GL_POINT, GL_LINE, GL_FILL
![Page 61: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/61.jpg)
Exemple :glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glPolygonMode(GL_FRONT, GL_FILL);
glPolygonMode(GL_FRONT, GL_LINE);
glPolygonMode(GL_BACK, GL_LINE);
glPolygonMode(GL_BACK, GL_FILL);
OpenGL : Polygones
61
![Page 62: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/62.jpg)
OpenGL : Couleurs
Il existe deux modes d’utilisation des couleurs
RVBA : glColor*() Indexé : glIndex*()
RVBA : glColor*()
Trois valeurs pour définir la couleur Une 4ème (optionnelle) pour spécifier l’opacité du point
glColor3f(0.0,0.0,0.0,0.0); //NoirglColor3f(1.0,0.0,0.0,0.0); //RougeglColor3f(1.0,1.0,1.0,0.0); //Blanc
62
![Page 63: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/63.jpg)
Exemple
// couleur courante fixée à bleu
glColor3f( 0.0f, 0.0f, 1.0f );// vache
afficherVache();// couleur courante fixée à vert
glColor3f( 0.0f, 1.0f, 0.0f );// sol
afficherSol();
Couleur courante
![Page 64: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/64.jpg)
OpenGL : Taille
taille par défaut 1.0 représentation par un carré
Void glPointSize(GLfloat Size);
Void glLineWidth (GLfloat Size);
largeur par défaut 1.0
64
Contrôler la taille d’un point
Contrôler la largeur d’une ligne
![Page 65: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/65.jpg)
1. Une fonction d’initialisation (void initialiser()).2. Une fonction d’affichage (void afficher()).3. Une fonction de fenêtrage (void refenêtrer()).4. Une fonction de gestion de clavier (void clavier()).5. Une fonction de gestion de la souris (void souris()).6. La partie principale (main).
initialiser() afficher() refenêtrer() clavier() souris()
main()
OpenGL : Programme type
Un programme est généralement constitué de 5 parties :
65
![Page 66: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/66.jpg)
Void Initialiser(){
glClearColor(0,0,0,0);glColor3f(1.0,2.0,3.0);
}
Initialiser()
66
![Page 67: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/67.jpg)
Void afficher(){
glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_POLYGON)
glVertex3f(10.0,12.0,15.0) ;….
glEnd();}
afficher()
67
![Page 68: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/68.jpg)
Void refenetrer(){}
refenetrer()
68
![Page 69: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/69.jpg)
Void clavier(){
switch(touche){case 27 :
exit(0) ;case ‘a’ : case ‘A’ :
…. }
}
clavier()
69
![Page 70: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/70.jpg)
Void souris(int btn, int state, int x, int y){
switch(bouton){case GLUT_LEFT_BUTTON :
if (etat==GLUT_DOWN) ….
break ; case GLUT_MIDDLE_BUTTON :
if (etat==GLUT_DOWN) ….
break ; case GLUT_RIGHT_BUTTON :
if (etat==GLUT_DOWN) ….
break ; }
}
souris()
70
![Page 71: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/71.jpg)
void main(int argc, char** argv){ glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); glutInitWindowSize(500,500) ; //taille initiale de la fenêtre glutInitWindowPosition(200,200); //position de la fenêtre glutCreateWindow(argv[0]) ; //création de la fenêtre Init() ; glutDisplayFunc(afficher); glutDisplayFunc(refenetrer); glutDisplayFunc(clavier); glutDisplayFunc(souris); glutMainLoop(); //lancement de la boucle principale return (0);}
main(int argc, char** argv)
71
![Page 72: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/72.jpg)
Sélection de la matrice active : glMatrixMode()
Initialisation de la matrice active : glLoadIdentity()
Modification de la matrice active : glLoadMatrix(), glMultMatrix()
Gestion de la pile des matrices : glPushMatrix(), glPopMatrix()
OpenGL : Matrices
![Page 73: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/73.jpg)
Matrice Push / Pop
void glPushMatrix(void);
“rappelle-toi où tu es”
Matrice du haut copiée :
Contenu 1ère matrice (matrice courante)
=contenu 2ème matrice
Push MatrixPush Matrix
![Page 74: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/74.jpg)
Matrice Push / Pop
Pop MatrixPop Matrix
void glPopMatrix(void);
“retourne où tu étais”
![Page 75: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/75.jpg)
affichageVoiture(){ glTranslatef( c_x, c_y, c_z); affichageCarrosserie(); glPushMatrix(); glTranslate( f_x, f_y, f_z); glPushMatrix(); glTranslate( l_x, l_y, l_z); affichagePneu(); glPopMatrix(); glPushMatrix(); glTranslate( r_x, r_y, r_z); affichagePneu(); glPopMatrix(); glPopMatrix(); . . .}
Matrice Push / Pop
![Page 76: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/76.jpg)
Rotation :
Translation :
Changement d'échelle :
Repère de l'œil :
OpenGL : Transformations
77
glRotatef(angle, x, y, z);
glTranslatef(x, y, z);
glScalef(x, y, z);
gluLookAt( … );
![Page 77: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/77.jpg)
Transformations
![Page 78: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/78.jpg)
Listes d'affichage
![Page 79: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/79.jpg)
Liste d'affichage Un groupe de commandes OpenGL seulement
Stockées et destinées à être exécutées plus tard dans l’ordre dans lequel elles ont été crées
Optimise les performances d’affichage
Car affichage d’un seul coup de tout le contenu de la liste
![Page 80: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/80.jpg)
glNewList(listName, mode)mode = GL_COMPILE
ou mode = GL_COMPILE_AND_EXECUTE
Liste d'affichage : création
GL_COMPILE pour ne pas exécuter les commandes dès qu’elles sont placées dans la liste
GL_COMPILE_AND_EXECUTE pour exécuter les commandes Immédiatement et les réutiliser après
![Page 81: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/81.jpg)
Gluint MaListe ; /* index de liste */glNewList (MaListe, GL_COMPILE) ; glColor3f (1.0, 0.0,0.0) ; glBegin (GL_POINTS) ; glVertex2f (0.0, 0.0) ; glEnd () ; glTranslatef (1.5, 0.0, 0.0) ;glEndList ();
Liste d'affichage : création
![Page 82: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/82.jpg)
glCallList(MaListe);Exécute la liste MaListe
Liste d'affichage : appel
glNewList (velo, GL_COMPILE) ;
glCallList(guidon) ; glCallList(cadre) ; glTranslatef (1.0, 0.0, 0.0) ; glCallList(roue) ; glTranslatef (3.0, 0.0, 0.0) ; glCallList(roue) ;
glEndList ();
![Page 83: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/83.jpg)
Liste d'affichage : gestion
glGenLists (Glsizei range) ; générer une suite de nouveaux numéros de liste MaListe = glGenLists (1);
glIsList (Gluint list) ; retourne GL_TRUE si le numéro est déjà utilisé
glDleteLists (Gluint list, Glsizei range) ; efface une suite de listes
![Page 84: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/84.jpg)
Liste d'affichage : Exemple
void triangle(){
glBegin(GL_TRIANGLES);glColor3f(0.0,1.0,0.0);glVertex3f(0.0,1.0,0.0);glVertex3f(0.0,0.0,0.0);glVertex3f(1.0,0.0,0.0);
glEnd();}
![Page 85: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/85.jpg)
Liste d'affichage : Exemple
void init(){ LeTriangle=glGenLists(1); glNewList(LeTriangle,GL_COMPILE);
triangle(); glEndList(); }
void affichage(){
glCallList(LeTriangle);glFlush();
}
![Page 86: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/86.jpg)
Interaction
![Page 87: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/87.jpg)
Clavier
Modifier des variables dans clavier() Mettre à jour avec
Void clavier(){
switch(touche){case 27 :
exit(0) ;case ‘a’ : case ‘A’ :
…glutPostRedisplay( );
break;
glutPostRedisplay( )
![Page 88: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/88.jpg)
Souris
Modifier des variables dans souris() Mettre à jour avec glutPostRedisplay( )
Void souris(int btn, int state, int x, int y){
switch(bouton){case GLUT_LEFT_BUTTON :
if (etat==GLUT_DOWN) ….
glutPostRedisplay( );break ;
![Page 89: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/89.jpg)
Animation
Modifier des variables dans anim1( ) Mettre à jour avec Appeler glutIdleFunction( anim1)
;
Void anim1( ){
angle+=2.0;if(angle>360)
angle-=360;glutPostRedisplay( );
}
GLfloat angle;
glutPostRedisplay( )
![Page 90: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/90.jpg)
Visualisation
![Page 91: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/91.jpg)
Visualisation 3D avec OpenGL
Transformations de modélisation
Transformations de Projection Perspective Parallèle
Transformations de clôture93
![Page 92: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/92.jpg)
Trois types de matrices prédéfinies:
Une seule matrice active à la fois
Matrices de modélisation-visualisation : GL_MODELVIEW Matrices de projection : GL_PROJECTIONMatrices de texture : GL_TEXTURE
glMatrixMode(mode);
Visualisation sous OpenGL
94
![Page 93: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/93.jpg)
Matrices de modélisation-visualisation : GL_MODELVIEW
glTranslate*(), glRotate*(), glScale*()gluLookAt(oeilx,oeily,oeilz,
centrex,centrey,centrez,
upx,upy,upz);Exemple :glMatrixMode( GL_MODELVIEW);glLoadIdentity();gluLookAt(0 , 0 , 5 , 0 , 0 , 0 , 0 , 1 , 0);glScalef(1.0,2.0,1.0);
Visualisation sous OpenGL
95
![Page 94: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/94.jpg)
Visualisation sous OpenGL
Deux primitives importantes :
glLoadMatrix{fd}(M); M est un tableau de 16 valeurs : m1,m2,m3,.....m16 Modifie la matrice actice avec les valeurs de M
glMultMatrix{fd}(M); Multiplie M par la matrice active (à droite CM) et stocke le résultat comme matrice active
161284
151173
141062
13951
mmmm
mmmm
mmmm
mmmm
Mpers
96
![Page 95: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/95.jpg)
Règle : Définir les transformations dans l'ordre inverseExemple : glMatrixMode( GL_MODELVIEW);glLoadIdentity();glMultMatrixf(N);glMultMatrixf(M);glMultMatrixf(L);// L est appliqué en premier : N(M(Lv))glBegin(GL_POINTS);glVertex3f(v); glEnd();
Visualisation sous OpenGL
97
![Page 96: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/96.jpg)
•Approche indirecte •Suite de transformations :
glTranslatef + glRotatef Opérations matricielles
•Changement de repère : set_view_reference_point +
set_view_plane_normal + set_view_up
•Approche directegluLookAt
Transformations de modélisation
98
![Page 97: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/97.jpg)
glMatrixMode(GL_MODELVIEW) ; glTranslatef(0.0,0.0,1.0) ; glRotatef(90.0,0.0,1.0,0.0) ;
1ère approche : suite de transformations
99
![Page 98: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/98.jpg)
set_view_reference_point(x,y,z) permet de définir l’emplacement de la caméra (x,y,z)
set_view_plane_normal(nx,ny,nz) permet de définir la normale du plan de vision
set_view_up(hx,hy,hz) permet de définir le haut du plan de vision
2ème approche : changement de repère
100
![Page 99: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/99.jpg)
gluLookAt( Oeilx, Oeily, Oeilz, PRx, PRy, PRz,
Vx, Vy, Vz );
Oeily
Oeilz
Oeilx PRy
Y
X
Z
V
3ème approche : gluLookAt
101
![Page 100: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/100.jpg)
PR
z
x
yH
N = oeil - PR P = V NH = N P
V // Y
N PH P
3ème approche : gluLookAt
102
N
V
P
N H
![Page 101: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/101.jpg)
Pile de matrices :glMatrixMode(GL_PROJECTION);
Projection des objets de la scène sur l’image de la caméra.
Transformations de projection
Objectif : définir un volume de vision
103
![Page 102: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/102.jpg)
glFrustum(GLdouble xmin, GLdouble xmax, Gldouble ymin, Gldouble ymax, Gldouble zmin, Gldouble zmax) ;
(xmin, ymin, zmin)
(xmax, ymax, zmax)
z
x
y
Transformations de projection : Perspective
104
![Page 103: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/103.jpg)
Matrices de projection : GL_PROJECTION Objectif : définir un volume de vision
Projection en perspective : glFrustum(gauche, droit,bas,haut,proche, eloigne);
haut
gauche
droit
bas
Visualisation sous OpenGL
105
![Page 104: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/104.jpg)
glFrustum(); N'est pas trés intuitive :
gluPerspective(angle,aspect, proche, eloigne);
h h
waspect
w
Visualisation sous OpenGL
106
![Page 105: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/105.jpg)
gluPerspective(angle_de_vue, rapport, zmin, zmax)
(zmin)
(zmax)
z
x
y
Transformations de projection : Perspective
107
![Page 106: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/106.jpg)
Projection Perspective
Oeil Oeil
Plan Clipping Proche
Plan Clipping Proche
Plan Clipping Eloigné
Plan Clipping Eloigné
Plan Clipping Droit Plan Clipping Droit
![Page 107: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/107.jpg)
glOrtho(xmin, xmax, ymin, ymax, zmin, zmax)
z
x
y
(xmin, ymin, zmin)
(xmax, ymax, zmax)
Transformations de projection : Parallèle
109
Projection orthogonale
glOrtho(gauche, droit,bas,haut,proche, eloigne);
![Page 108: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/108.jpg)
Projection Orthographique
Oeil Oeil
Plan Clipping Proche
Plan Clipping Proche
Plan Clipping Eloigné
Plan Clipping Eloigné
Plan Clipping Droit Plan Clipping Droit
![Page 109: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/109.jpg)
glViewport(GLint x, GLint y, GLsizei largeur, GLsizei hauteur)
(x,y)largeur
hauteur
Transformations de clôture
Transformations de cadrage : définition d'une zone dans la fenêtre de travail
111
![Page 110: Modélisation Géométrique et Synthèse d’image Sandrine LANQUETIN Marc NEVEU 1](https://reader036.vdocuments.net/reader036/viewer/2022062307/551d9dd9497959293b8e768e/html5/thumbnails/110.jpg)
Projections