1 / 16

OpenGL

OpenGL. Marc Neveu. Principe. Bibliothèque de base Libre, ouvert, norme Fonctions : Gestion des fenêtres et interactions Modélisation Visualisation Organisation en 3 « moteurs Utilitaires supplémentaires (glu, glut, glui, …). Organisation générale d’un programme OpenGL avec GLUT.

celine
Download Presentation

OpenGL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. OpenGL Marc Neveu

  2. Principe • Bibliothèque de base • Libre, ouvert, norme • Fonctions : • Gestion des fenêtres et interactions • Modélisation • Visualisation • Organisation en 3 « moteurs • Utilitaires supplémentaires (glu, glut, glui, …)

  3. Organisation générale d’un programme OpenGL avec GLUT • #include <GL/glut.h> • void affichage(); • void clavier(unsigned char touche,int x,int y); • int main(int argc,char **argv) • { • /* initialisation de glut et création de la fenetre */ • glutInit(&argc,argv); • glutInitDisplayMode(GLUT_RGB); • glutInitWindowPosition(200,200); • glutInitWindowSize(500,500); • glutCreateWindow("ogl1"); • /* Initialisation d'OpenGL */ • glClearColor(0.0,0.0,0.0,0.0); • glColor3f(1.0,1.0,1.0); • /* enregistrement des fonctions de rappel */ • glutDisplayFunc(affichage); • glutKeyboardFunc(clavier); • /* Entrée dans la boucle principale glut */ • glutMainLoop(); • return 0; • }

  4. L’affichage • Allure d’une fonction • Void glNomit(param) • i = 2,3,4 = dimension • t = type des paramètres • Ex: float x,y,z; glVertex3f(x,y,z); • glBegin(mode); glVertex3f(sommet); ………………. • glEnd();

  5. SUITE DE TRACES SUIVANT LES DIFFERENTS MODES glBegin(GL_POINTS); glBegin(GL_LINE_STRIP); glBegin(GL_TRIANGLES); glBegin(GL_TRIANGLE_STRIP); glBegin(GL_POLYGON); glBegin(GL_QUADS); glBegin(GL_QUAD_STRIP);

  6. attributs • void glColor3f(GLfloat r, GLfloat v,GLfloat b); • void glNormal3f(GLfloat nx,GLfloat ny, GLfloat nz); • void glPointSize(GLfloat size);

  7. Exemple • void affichage() • { • /* effacement de l'image avec la couleur de fond */ • glClear(GL_COLOR_BUFFER_BIT); • /* Dessin du polygone */ • glBegin(GL_POLYGON); • glColor3f(1.0,0.0,0.0); glVertex2f(-0.5,-0.5); glColor3f(0.0,1.0,0.0); glVertex2f(0.5,-0.5); glColor3f(0.0,0.0,1.0); glVertex2f(0.5,0.5); glColor3f(1.0,1.0,1.0); glVertex2f(-0.5,0.5); • glEnd(); • /* on force l'affichage du resultat */ • glFlush(); • }

  8. Mode de tracé des faces • void glPolygonMode(GLenum face,GLenum mode); • GL_FRONT : face avant · • GL_BACK : face arrière · • GL_FRONT_AND_BACK : les deux faces · • GL_FILL : le polygone est entièrement rempli. • GL_LINE : mode fil de fer. • GL_POINT : sommets du polygone .

  9. Exemple d’interaction Clavier • void clavier(unsigned char touche,int x,int y) • { • switch (touche) { • case 'p': /* affichage du carre plein */ glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glutPostRedisplay(); break; • case 'f': /* affichage en mode fil de fer */ glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); glutPostRedisplay(); break; • case 's' : /* Affichage en mode sommets seuls */ glPolygonMode(GL_FRONT_AND_BACK,GL_POINT); glutPostRedisplay(); break; • case 'q' : /*la touche 'q' permet de quitter le programme */ • exit(0); • } • }

  10. int main(int argc,char **argv) { /* initialisation de glut et creation de la fenetre */ glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowPosition(200,200); glutInitWindowSize(500,500); glutCreateWindow("cube"); Initialisation d'OpenGL */ glClearColor(0.0,0.0,0.0,0.0); glColor3f(1.0,1.0,1.0); glPointSize(2.0); glEnable(GL_DEPTH_TEST); /*enregistrement des fonctions de rappel */ glutDisplayFunc(affichage); glutKeyboardFunc(clavier); glutReshapeFunc(reshape); glutMouseFunc(mouse); glutMotionFunc(mousemotion); /* Entree dans la boucle principale glut */ glutMainLoop(); return 0; } Un peu plus élaboré

  11. Redimensionnement • void reshape(int x,int y) • { • if (x<y) glViewport(0,(y-x)/2,x,x); • else glViewport((x-y)/2,0,y,y); • }

  12. void mouse(int button, int state,int x,int y) { /* si on appuie sur le bouton gauche */ if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { presse = 1; /* le booleen presse passe a 1 (vrai) */ xold = x; /* on sauvegarde la position de la souris */ yold=y; } /* si on relache le bouton gauche */ if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) presse=0; /* le booleen presse passe a 0 (faux) */ } void mousemotion(int x,int y) { if (presse) /* si le bouton gauche est presse */ { /* on modifie les angles de rotation de l'objet en fonction de la position actuelle de la souris et de la derniere position sauvegardee */ anglex=anglex+(x-xold); angley=angley+(y-yold); glutPostRedisplay(); /* on demande un rafraichissement de l'affichage */ } xold=x; /* sauvegarde des valeurs courante de le position de la souris */ yold=y; } Gestion de souris (exemple)

  13. Transformations • Piles • Transfo de modélisation • Transfo de visualisation • Transfo de texture • Opération matricielles communes => quelle pile ? • glMatrixMode(GL_MODELVIEW); • glMatrixMode(GL_PROJECTION);

  14. Opérations • Communes • glLoadIdentity(); • glMultMatrix(GLfloat * m); • Pour la modélisation • glTranslatef(GLfloat dx, GLfloat dy, GLfloat dz); • glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); • glScalef(GLfloat sx, GLfloat sy, GLfloat sz); • /* Dessin des objets */ • Hiérarchisation • glPushMatrix(); • glPopMatrix();

  15. Hiérarchie glPushMatrix(); // RwRauto TRS + Carrosserie glPushMatrix();//RautoRr1 TRS glPushMatrix(); TRS + boulon1 etc… glPopMatrix(); // Rr1 ………. glPopMatrix(); // Rauto …….. glPopMatrix();

  16. Projection • gluPerspective(theta,1.0,0.1,40.0);

More Related