Advertisement
sherry_ahmos

pyramid

Dec 27th, 2022
820
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.39 KB | None | 0 0
  1. #include <GL/glut.h>
  2. #include <GL/freeglut.h>
  3. #include <bits/stdc++.h>
  4.  
  5. //pyramid
  6. float ver[5][3] =
  7.     {
  8.         {0.0, 1.0, 0.0},
  9.         {-1.0, -1.0, 1.0},
  10.         {1.0, -1.0, 1.0},
  11.         {1.0, -1.0, -1.0},
  12.         {-1.0, -1.0, -1.0},
  13. };
  14.  
  15. GLfloat color[5][3] =
  16.     {
  17.         {1.0, 0.0, 0.0},//red
  18.         {0.0, 1.0, 0.0},//green
  19.         {0.0, 0.0, 1.0},//blue
  20.         {1.0, 1.0, 0.0},//yellow
  21.         {1.0, 0.0, 1.0},//pink
  22. };
  23.  
  24. void quad(int a, int b, int c, int d)
  25. {
  26.     glBegin(GL_QUADS);
  27.     glColor3fv(color[a]);
  28.     glVertex3fv(ver[a]);
  29.  
  30.     glColor3fv(color[b]);
  31.     glVertex3fv(ver[b]);
  32.  
  33.     glColor3fv(color[c]);
  34.     glVertex3fv(ver[c]);
  35.  
  36.     glColor3fv(color[d]);
  37.     glVertex3fv(ver[d]);
  38.     glEnd();
  39. }
  40. void colorcube()
  41. {
  42.     quad(0, 1, 2, 3);
  43.     quad(0, 1, 4, 3);
  44.     quad(0, 2, 3, 4);
  45.     quad(1, 2, 3, 4);
  46. }
  47. //rotate
  48. double rotate_y = 0;
  49. double rotate_x = 0;
  50. void specialKeys(int key, int x, int y)
  51. {
  52.     if (key == GLUT_KEY_RIGHT)
  53.         rotate_y += 5;
  54.     else if (key == GLUT_KEY_LEFT)
  55.         rotate_y -= 5;
  56.     else if (key == GLUT_KEY_UP)
  57.         rotate_x += 5;
  58.     else if (key == GLUT_KEY_DOWN)
  59.         rotate_x -= 5;
  60.     glutPostRedisplay();
  61. }
  62. // change the size of the cube with the mouse wheel
  63. // scale
  64. void mouseWheel(int button, int dir, int x, int y)
  65. {
  66.     if (dir > 0)
  67.     {
  68.         for (int i = 0; i < 8; i++)
  69.         {
  70.             ver[i][0] *= 1.1;
  71.             ver[i][1] *= 1.1;
  72.             ver[i][2] *= 1.1;
  73.         }
  74.     }
  75.     else
  76.     {
  77.         for (int i = 0; i < 8; i++)
  78.         {
  79.             ver[i][0] *= 0.9;
  80.             ver[i][1] *= 0.9;
  81.             ver[i][2] *= 0.9;
  82.         }
  83.     }
  84.     glutPostRedisplay();
  85. }
  86.  
  87. // change the position of the cube using W A S D keys without going out of the screen
  88. // translate
  89. void keyboard(unsigned char key, int x, int y)
  90. {
  91.     switch (key)
  92.     {
  93.     case 'w':
  94.         for (int i = 0; i < 8; i++)
  95.             ver[i][2] += 0.1;//z axis
  96.         break;
  97.     case 's':
  98.         for (int i = 0; i < 8; i++)
  99.             ver[i][2] -= 0.1;//z axis
  100.         break;
  101.     case 'a':
  102.         for (int i = 0; i < 8; i++)
  103.             ver[i][0] -= 0.1;//x axis
  104.         break;
  105.     case 'd':
  106.         for (int i = 0; i < 8; i++)
  107.             ver[i][0] += 0.1;//x axis
  108.         break;
  109.     }
  110.     glutPostRedisplay();//repeat
  111. }
  112.  
  113. void display()
  114. {
  115.     glClearColor(1, 1, 1, 1);//window color
  116.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  117.     glMatrixMode(GL_PROJECTION);//background
  118.     glLoadIdentity();//function ensures that each time when we enter the projection mode, the matrix will be reset to identity matrix
  119.     int w = glutGet(GLUT_WINDOW_WIDTH);
  120.     int h = glutGet(GLUT_WINDOW_HEIGHT);
  121.     gluPerspective(60, w / h, 0.1, 100);//??
  122.     glMatrixMode(GL_MODELVIEW);// object
  123.     glLoadIdentity();
  124.     gluLookAt(3, 3, 3,0, 0, 0,0, 0, 1);
  125.     glRotatef(rotate_x, 1.0, 0.0, 0.0);
  126.     glRotatef(rotate_y, 0.0, 1.0, 0.0);
  127.     colorcube();
  128.     glutSwapBuffers();
  129. }
  130.  
  131. int main(int argc, char **argv)
  132. {
  133.     glutInit(&argc, argv);// graphics mode
  134.     glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);
  135.     glutInitWindowSize(640, 480);
  136.     glutCreateWindow("GLUT");
  137.     glutDisplayFunc(display);
  138.     glutSpecialFunc(specialKeys);
  139.     glutMouseWheelFunc(mouseWheel);
  140.     glutKeyboardFunc(keyboard);
  141.     glEnable(GL_DEPTH_TEST);
  142.     glutMainLoop();
  143.     return 0;
  144. }
  145.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement