Post on 04-Apr-2015
Modélisation Géométrique et
Synthèse d’image
Sandrine LANQUETINMarc NEVEU
1
OpenGL
2
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
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
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
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
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
Installation freeglut VS lambda
8
Installation freeglut VS lambda
Copier freeglut.dll dans Debug ou Release
9
Installation freeglut Linux
(Ubuntu) Admin
sudo apt-get install freeglut3 freeglut3-dev
Pas admin
10
Code C++
Inclure#include freeglut.h
#include GL/glu.h
ou #include GL/freeglut.h
11
Fonctions OpenGL
Primitives géométriques :
points, segments, polygones
préfixe : gl
glColor2f()
12
GLUT :OpenGL Utility Toolkit
Gestion de fenêtres
Gestion d ’événements (souris, clavier)
Affichage et mise à jour
Primitives : sphère, cylindre…
glutMouseFunc()
13
GLUOpenGL Utility Library
Transformations géométriques
Triangulation de polygones
Rendu des surfaces
gluLookAt()
14
GLUT : fenêtres
glutInit(int *arg, char **argv)
initialise GLUT
15
Ex :int main(int argc, char** argv){
glutInit(&argc,argv); …}
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
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) ;
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]) ;
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
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(){…}
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
GLUT : Actualisation Affichage
void clavier(…){
switch(touche){case 27 :
exit(0) ;case ‘a’ : case ‘A’ :
…. glutPostRedisplay();
break;}
}
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){…}
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){…}
GLUT : évènements
Touches spéciales GLUT_KEY_UP GLUT_KEY_DOWN GLUT_KEY_LEFT GLUT_KEY_RIGHT
freeglut_std.h
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){…}
GLUT : évènements
Bouton GLUT_LEFT_BUTTON GLUT_RIGHT_BUTTON GLUT_MIDDLE_BUTTON
Etat GLUT_DOWN GLUT_UP
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){…}
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(){…}
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
glutSolidSphere (GLdouble r, GLint m, GLint p);
glutWireSphere (GLdouble r, GLint m, GLint p);
GLUT : sphère
32glutSolidSphere (2.0, 30, 20);
glutSolidCube (GLdouble taille);
glutWireCube (GLdouble taille);
GLUT : cube
33
glutSolidCube (1.5);
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);
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);
glutSolidTeapot (GLdouble taille);
glutWireTeapot (GLdouble taille);
GLUT : théière
36
glutSolidTeapot (2.0);
void glutSolidCylinder (GLdouble r, GLdouble h, GLint m, GLint p)
freeGLUT : cylindre
37
glutSolidCylinder (0.5, 1.0, 10, 5)
glutSolidDodecahedron ( );glutWireDodecahedron ( );
glutSolidOctahedron ( );glutWireOctahedron ( );
glutSolidTetraahedron ( );glutWireTetraahedron ( );
GLUT : objets 3D
38
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
OpenGL : Dessin
Un Point Un sommet
Un sommet
Un Segment
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()
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();
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
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
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
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
OpenGL : Points
GL_POINTS
V0
V2
V4
V3
V1
47
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
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
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
OpenGL : Polygone
GL_POINTS
V0
V2
V4
V3
V1
GL_POLYGON
V0
V2
V4
V3
V1
51
glBegin() & glEnd()
V0V1
V2
V3
V4V5
V6
V7
GL_POINTS
glBegin() & glEnd()
V0V1
V2
V3
V4V5
V6
V7
GL_LINES
glBegin() & glEnd()
V0V1
V2
V3
V4V5
V6
V7
GL_LINE_LOOP
glBegin() & glEnd()
V0V1
V2
V3
V4V5
V6
V7
GL_TRIANGLES
glBegin() & glEnd()
V0V1
V2
V3
V4V5
V6
V7
GL_POLYGON
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
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
Faces avant/arrière ?
Ordre trigo Face avant
Ordre “Clockwise” Face arrière
V0
V1
V2
V0
V2
V1
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
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
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
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
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
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
Void Initialiser(){
glClearColor(0,0,0,0);glColor3f(1.0,2.0,3.0);
}
Initialiser()
66
Void afficher(){
glClear(GL_COLOR_BUFFER_BIT);glBegin(GL_POLYGON)
glVertex3f(10.0,12.0,15.0) ;….
glEnd();}
afficher()
67
Void refenetrer(){}
refenetrer()
68
Void clavier(){
switch(touche){case 27 :
exit(0) ;case ‘a’ : case ‘A’ :
…. }
}
clavier()
69
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
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
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
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
Matrice Push / Pop
Pop MatrixPop Matrix
void glPopMatrix(void);
“retourne où tu étais”
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
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( … );
Transformations
Listes d'affichage
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
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
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
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 ();
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
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();}
Liste d'affichage : Exemple
void init(){ LeTriangle=glGenLists(1); glNewList(LeTriangle,GL_COMPILE);
triangle(); glEndList(); }
void affichage(){
glCallList(LeTriangle);glFlush();
}
Interaction
Clavier
Modifier des variables dans clavier() Mettre à jour avec
Void clavier(){
switch(touche){case 27 :
exit(0) ;case ‘a’ : case ‘A’ :
…glutPostRedisplay( );
break;
glutPostRedisplay( )
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 ;
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( )
Visualisation
Visualisation 3D avec OpenGL
Transformations de modélisation
Transformations de Projection Perspective Parallèle
Transformations de clôture93
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
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
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
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
•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
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
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
gluLookAt( Oeilx, Oeily, Oeilz, PRx, PRy, PRz,
Vx, Vy, Vz );
Oeily
Oeilz
Oeilx PRy
Y
X
Z
V
3ème approche : gluLookAt
101
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
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
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
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
glFrustum(); N'est pas trés intuitive :
gluPerspective(angle,aspect, proche, eloigne);
h h
waspect
w
Visualisation sous OpenGL
106
gluPerspective(angle_de_vue, rapport, zmin, zmax)
(zmin)
(zmax)
z
x
y
Transformations de projection : Perspective
107
Projection Perspective
Oeil Oeil
Plan Clipping Proche
Plan Clipping Proche
Plan Clipping Eloigné
Plan Clipping Eloigné
Plan Clipping Droit Plan Clipping Droit
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);
Projection Orthographique
Oeil Oeil
Plan Clipping Proche
Plan Clipping Proche
Plan Clipping Eloigné
Plan Clipping Eloigné
Plan Clipping Droit Plan Clipping Droit
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
Projections