Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2019
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.51 KB | None | 0 0
  1.  
  2. /*********************************************************/
  3. /*        TP1: primitives 2D et transformations          */
  4. /*********************************************************/
  5. /*                                                       */
  6. /*       ESGI: Algorithmiques pour l'infographies        */
  7. /*                                                       */
  8. /*********************************************************/
  9. /*                                                       */
  10. /*  Objectif: afficher des formes 2D et les transformer  */
  11. /*                                                       */
  12. /*********************************************************/
  13.  
  14.  
  15.  
  16. #include<windows.h>
  17.  
  18. #ifdef __APPLE__
  19. #include <GLUT/glut.h>
  20. #else
  21. #include <GL/glut.h>
  22. #endif
  23.  
  24.  
  25. #include<stdlib.h>
  26. #include<stdio.h>
  27.  
  28.  
  29.  
  30.  
  31. float angle = 0.0;
  32. float cameraAngle = 10.0;
  33.  
  34. /* prototypes de fonctions */
  35. void initRendering();                           // Initialisation du rendu
  36. void display();                             // modélisation
  37. void reshape(int w,int h);                      // visualisation
  38. void update(int value);                         // mise à jour: appelle Timer pour l'animation de la scène
  39. void keyboard(unsigned char key, int x, int y); // fonction clavier
  40.  
  41.  
  42. /* Programme principal */
  43. int main(int argc,       // argc: nombre d'arguments, argc vaut au moins 1
  44.           char **argv){  // argv: tableau de chaines de caractères, argv[0] contient le nom du programme lancé (plus un éventuel chemin)
  45.  
  46.  
  47.     /* Initialisation de glut et creation de la fenetre */
  48.     glutInit(&argc, argv);                       // Initialisation
  49.     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); // mode d'affichage RGB, et test prafondeur
  50.     glutInitWindowSize(500, 500);                // dimension fenêtre
  51.     glutInitWindowPosition (100, 100);           // position coin haut gauche
  52.     glutCreateWindow("TP1: formes 2D et transformation");  // nom
  53.  
  54.     /* Initialisation d'OpenGL */
  55.     initRendering();
  56.  
  57.     /* Enregistrement des fonctions de rappel
  58.      => initialisation des fonctions callback appelées par glut */
  59.     glutDisplayFunc(display);
  60.     glutReshapeFunc(reshape);
  61.     glutKeyboardFunc(keyboard);
  62.  
  63.     /* rq: le callback de fonction (fonction de rappel) est une fonction qui est passée en argument à une
  64.     autre fonction. Ici, le main fait usage des deux fonctions de rappel (qui fonctionnent en même temps)
  65.     alors qu'il ne les connaît pas par avance.*/
  66.  
  67.  
  68.     /* Entrée dans la boucle principale de glut, traitement des évènements */
  69.     glutMainLoop();         // lancement de la boucle de réception des évènements
  70.     return 0;               // pour finir
  71. }
  72.  
  73.  
  74. /* Initialisation d'OpenGL pour le rendu de la scène */
  75. void initRendering() {
  76.  
  77.     /* Active le z-buffer */
  78.     glEnable(GL_DEPTH_TEST);
  79.  
  80.     /* Activation des couleurs */
  81.     glEnable(GL_COLOR_MATERIAL);
  82.  
  83.     /* définit la couleur d'effacement et la couleur de fond */
  84.     glClearColor(0.0, 0.0, 0.0, 0.0);
  85.  
  86.     /*  définit la taille d'un pixel*/
  87.     glPointSize(2.0);
  88.  
  89. }
  90.  
  91. /* Création de la scène */
  92. void display(){
  93.  
  94.     /* Efface les tampons de couleur et de profondeur de l'image avec la couleur de fond.
  95.     rq: buffer: mémoire tampon, c'est donc une surface en memoire utilisée pour stocker une image*/
  96.     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  97.  
  98.     /* la mat de visualisation-modélisation est modifiable par défaut */
  99.     glMatrixMode(GL_MODELVIEW);
  100.  
  101.     /* on charge l'identité dans la matrice de modélisation-visualisation*/
  102.     glLoadIdentity();
  103.  
  104.  
  105.     /* Permet de créer un point de vue. Définit une matrice de modélisation-visualisation et la multiplie
  106.     à droite de lma matrice active, ici l'identité*/
  107.     gluLookAt(0.0, 0.0, 5.0,      // position caméra
  108.               0.0, 0.0, 0.0,      // point de mire
  109.               0.0, 1.0, 0.0);     // vecteur d'orientation caméra
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.     /* A vous de jouer */
  117.     glPushMatrix();
  118.         glTranslatef(0.0,-1.0,0.0);
  119.         glRotatef(10,0.0,0.0,1.0);
  120.  
  121.         glBegin(GL_QUADS);
  122.             glColor3f(1.0,0.0,0.0);
  123.             glVertex3f(-0.7,-0.5,0.0);
  124.             glColor3f(0.0,1.0,0.0);
  125.             glVertex3f(0.7,-0.5,0.0);
  126.             glColor3f(1.0,1.0,1.0);
  127.             glVertex3f(0.4,0.5,0.0);
  128.             glColor3f(0.0,0.0,1.0);
  129.             glVertex3f(-0.4,0.5,0.0);
  130.         glEnd();
  131.     glPopMatrix();
  132.  
  133.     glPushMatrix();
  134.         glTranslatef(-1.0,1.0,0.0);
  135.         glRotatef(10,1.0,2.0,3.0);
  136.  
  137.         glBegin(GL_TRIANGLES);
  138.             glColor3f(0.0,0.33,0.0);
  139.             glVertex3f(0.5,-0.5,0.0);
  140.  
  141.             glColor3f(0.0,0.66,0.0);
  142.             glVertex3f(0.0,0.5,0.0);
  143.  
  144.             glColor3f(0.0,1.0,0.0);
  145.             glVertex3f(-0.5,-0.5,0.0);
  146.         glEnd();
  147.     glPopMatrix();
  148.  
  149.     glPushMatrix();
  150.         glTranslatef(1.0,1.0,0.0);
  151.         glRotatef(10,0.0,1.0,0.0);
  152.         glScalef(0.7,0.7,0.7);
  153.  
  154.         glBegin(GL_TRIANGLES);
  155.             glColor3f(1.0,0.3,0.0);
  156.             glVertex3f(-0.5,-0.5,0.0);
  157.  
  158.             glColor3f(1.0,0.3,0.0);
  159.             glVertex3f(0.5,-0.5,0.0);
  160.  
  161.             glColor3f(1.0,0.3,0.0);
  162.             glVertex3f(-0.5,0.0,0.0);
  163.         glEnd();
  164.         glBegin(GL_TRIANGLES);
  165.             glColor3f(0.0,0.0,0.0);
  166.             glVertex3f(-0.5,0.0,0.0);
  167.  
  168.             glColor3f(0.0,0.0,0.0);
  169.             glVertex3f(0.5,-0.5,0.0);
  170.  
  171.             glColor3f(0.0,0.0,0.0);
  172.             glVertex3f(0.5,0.0,0.0);
  173.         glEnd();
  174.         glBegin(GL_TRIANGLES);
  175.             glColor3f(0.0,0.0,0.0);
  176.             glVertex3f(-0.5,0.0,0.0);
  177.  
  178.             glColor3f(0.0,0.0,0.0);
  179.             glVertex3f(0.5,0.0,0.0);
  180.  
  181.             glColor3f(0.0,0.0,0.0);
  182.             glVertex3f(0.0,0.5,0.0);
  183.         glEnd();
  184.  
  185.     glPopMatrix();
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.     /* On swap (échange) les buffers, càd, on fait passer l'image calculée et dessinée
  199.     dans le back buffer au buffer qui va l'afficher: le front buffer (en général), c'est le bouble buffering
  200.     Cela évite une image animée sacadée, si elle était directement tracée dans le front buffer*/
  201.     glutSwapBuffers();
  202.  
  203.     /* On force l'affichage */
  204.     glFlush(); // nettoie les fenêtres précédentes
  205. }
  206.  
  207.  
  208.  
  209. /*  Mise en forme de la scène pour l'affichage */
  210. void reshape(int w,  // w: largeur fenêtre
  211.              int h)  // h: hauteur fenêtre
  212. {
  213.     /* Viewport: cadrage. Spécifie la région (position et taille en px) que l'image observée de la scène occupe
  214.     à l'écran => réduction et agrandissement de l'image possible*/
  215.     glViewport(0, 0,(GLsizei) w, (GLsizei) h);
  216.  
  217.     /* Spécifie que la matrice de projection va être modifiée  */
  218.     glMatrixMode(GL_PROJECTION);
  219.     glLoadIdentity();             // matrice courante: l'identité
  220.     //glOrtho(-2.0, 2.0, -2.0, 2.0, 1.5, 20.0);
  221.     //glFrustum(-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
  222.  
  223.     /* Perspective avec point de fuite */
  224.     gluPerspective(60.0,                       // angle d'ouverture vertical caméra
  225.                    (GLfloat) w / (GLfloat) h,  // ratio largeur-hauteur
  226.                    1.0,                        // plan proche z=1
  227.                    200.0);                     // plan éloigné z=200
  228.  
  229.  
  230. }
  231.  
  232. /* Fonction de gestion du clavier */
  233. void keyboard(unsigned char key,       // Touche qui a été pressée
  234.                     int x, int y) {    // Coordonnées courante de la souris
  235.  
  236.         switch (key){
  237.  
  238.             case 'p':   /* affichage du carré plein*/
  239.                 glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
  240.                 glutPostRedisplay();
  241.                 break;
  242.  
  243.             case 'f':   /* affichage en mode fil de fer*/
  244.                 glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
  245.                 glutPostRedisplay();
  246.                 break;
  247.  
  248.             case 's':   /* affichage en mode sommets seuls*/
  249.                 glPolygonMode(GL_FRONT_AND_BACK,GL_POINT);
  250.                 glutPostRedisplay();
  251.                 break;
  252.  
  253.             case 'q':   /* Quitter le programme */
  254.                 exit(0);
  255.         }
  256. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement