Advertisement
P22DX

3D box

Jan 7th, 2019
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.80 KB | None | 0 0
  1. // g++ cube.cc -lm -lglut -lGL -lGLU -o cube
  2.  
  3. #define GL_GLEXT_PROTOTYPES
  4. #ifdef __APPLE__
  5. #include <GLUT/glut.h>
  6. #else
  7. #include <GL/glut.h>
  8. #endif
  9. #include <math.h>
  10.  
  11. // Rotate X
  12. double rX=0;
  13. // Rotate Y
  14. double rY=0;
  15.  
  16. // The coordinates for the vertices of the cube
  17. double x = 0.6;
  18. double y = 0.6;
  19. double z = 0.6;
  20.  
  21. void drawCube()
  22. {
  23.         // Set Background Color
  24.     glClearColor(0.4, 0.4, 0.4, 1.0);
  25.         // Clear screen
  26.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  27.  
  28.     // Reset transformations
  29.     glLoadIdentity();
  30.  
  31.     // Rotate when user changes rX and rY
  32.     glRotatef( rX, 1.0, 0.0, 0.0 );
  33.     glRotatef( rY, 0.0, 1.0, 0.0 );
  34.  
  35.     // BACK
  36.         glBegin(GL_TRIANGLES);
  37.             glColor3f(0.4, 0.3, 0.5);
  38.                 glVertex3f(x, y, z);
  39.                 glVertex3f(x, -y, z);
  40.                 glVertex3f(-x, y, z);
  41.         glEnd();
  42.  
  43.         glBegin(GL_TRIANGLES);
  44.             glColor3f(0.5, 0.3, 0.2);
  45.                 glVertex3f(-x, -y, z);
  46.                 glVertex3f(x, -y, z);
  47.                 glVertex3f(-x, y, z);
  48.         glEnd();
  49.  
  50.         // FRONT
  51.         // Using 4 trianges!
  52.         glBegin(GL_TRIANGLES);
  53.             glColor3f(0.1, 0.5, 0.3);
  54.                 glVertex3f(-x, y, -z);
  55.                 glVertex3f(0, 0, -z);
  56.                 glVertex3f(-x, -y, -z);
  57.         glEnd();
  58.  
  59.         glBegin(GL_TRIANGLES);
  60.                 glColor3f(0.0, 0.5, 0.0);
  61.                 glVertex3f(-x, -y, -z);
  62.                 glVertex3f(0, 0, -z);
  63.                 glVertex3f(x, -y, -z);
  64.         glEnd();
  65.  
  66.         glBegin(GL_TRIANGLES);
  67.             glColor3f(0.1, 0.3, 0.3);
  68.                 glVertex3f(-x, y, -z);
  69.                 glVertex3f(x, y, -z);
  70.                 glVertex3f(0, 0, -z);
  71.         glEnd();
  72.  
  73.         glBegin(GL_TRIANGLES);
  74.                 glColor3f(0.2, 0.2, 0.2);
  75.                 glVertex3f(0, 0, -z);
  76.                 glVertex3f(x, y, -z);
  77.                 glVertex3f(x, -y, -z);
  78.         glEnd();
  79.  
  80.         // LEFT
  81.         glBegin(GL_TRIANGLES);
  82.         glColor3f(0.3, 0.5, 0.6);
  83.                 glVertex3f(-x, -y, -z);
  84.                 glVertex3f(-x, -y, z);
  85.                 glVertex3f(-x, y, -z);
  86.         glEnd();
  87.  
  88.         glBegin(GL_TRIANGLES);
  89.                 glColor3f(0.5, 0.5, 0.5);
  90.                 glVertex3f(-x, y, z);
  91.                 glVertex3f(-x, -y, z);
  92.                 glVertex3f(-x, y, -z);
  93.         glEnd();
  94.  
  95.         // RIGHT
  96.         glBegin(GL_TRIANGLES);
  97.         glColor3f(0.2, 0.2, 0.2);
  98.                 glVertex3f(x, y, z);
  99.                 glVertex3f(x, y, -z);
  100.                 glVertex3f(x, -y, z);
  101.         glEnd();
  102.  
  103.         glBegin(GL_TRIANGLES);
  104.         glColor3f(0.0, 0.0, 0.0);
  105.                 glVertex3f(x, -y, -z);
  106.                 glVertex3f(x, y, -z);
  107.                 glVertex3f(x, -y, z);
  108.         glEnd();
  109.  
  110.         // TOP
  111.         glBegin(GL_TRIANGLES);
  112.         glColor3f(0.6, 0.0, 0.0);
  113.                 glVertex3f(x, y, z);
  114.                 glVertex3f(x, y, -z);
  115.                 glVertex3f(-x, y, -z);
  116.         glEnd();
  117.  
  118.         glBegin(GL_TRIANGLES);
  119.         glColor3f(0.6, 0.1, 0.2);
  120.                 glVertex3f(-x, y, z);
  121.                 glVertex3f(x, y, z);
  122.                 glVertex3f(-x, y, -z);
  123.         glEnd();
  124.  
  125.         // BOTTOM
  126.         glBegin(GL_TRIANGLES);
  127.         glColor3f(0.4, 0.0, 0.4);
  128.                 glVertex3f(-x, -y, -z);
  129.                 glVertex3f(-x, -y, z);
  130.                 glVertex3f(x, -y, z);
  131.         glEnd();
  132.  
  133.         glBegin(GL_TRIANGLES);
  134.                 glColor3f(0.3, 0.0, 0.3);
  135.                 glVertex3f(x, -y, -z);
  136.                 glVertex3f(-x, -y, -z);
  137.                 glVertex3f(x, -y, z);
  138.         glEnd();
  139.  
  140.     glFlush();
  141.     glutSwapBuffers();
  142. }
  143.  
  144. void keyboard(int key, int x, int y)
  145. {
  146.     if (key == GLUT_KEY_RIGHT)
  147.         {
  148.                 rY += 10;
  149.         }
  150.     else if (key == GLUT_KEY_LEFT)
  151.         {
  152.                 rY -= 10;
  153.         }
  154.     else if (key == GLUT_KEY_DOWN)
  155.         {
  156.                 rX -= 10;
  157.         }
  158.     else if (key == GLUT_KEY_UP)
  159.         {
  160.                 rX += 10;
  161.         }
  162.  
  163.     // Request display update
  164.     glutPostRedisplay();
  165. }
  166.  
  167.  
  168. int main(int argc, char **argv)
  169. {
  170.         // Initialize GLUT and process user parameters
  171.         glutInit(&argc, argv);
  172.  
  173.         // Request double buffered true color window with Z-buffer
  174.         glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  175.  
  176.         glutInitWindowSize(700,700);
  177.         glutInitWindowPosition(100, 100);
  178.  
  179.         // Create window
  180.         glutCreateWindow("kotak ajaib");
  181.  
  182.         // Enable Z-buffer depth test
  183.         glEnable(GL_DEPTH_TEST);
  184.  
  185.         // Callback functions
  186.         glutDisplayFunc(drawCube);
  187.         glutSpecialFunc(keyboard);
  188.  
  189.         // Pass control to GLUT for events
  190.         glutMainLoop();
  191.  
  192.         return 0;
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement