modélisation géométrique et synthèse d’image sandrine lanquetin marc neveu 1

Post on 04-Apr-2015

113 Views

Category:

Documents

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related