halfo

Untitled

Mar 30th, 2015
293
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.70 KB | None | 0 0
  1. // #pragma comment (lib,"glut32.lib")
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5.  
  6. #include <GL/glut.h>
  7.  
  8. // window size (side)
  9. int w_side = 600;
  10.  
  11. // position of camera
  12. float x = 0, z = 5;
  13. // look-at perspective to camera position
  14. float look_x = 0, look_z = -1;
  15.  
  16. // angle for rotation
  17. float angle = 0.0f;
  18.  
  19. // ground's size (side)
  20. float g_side = 30;
  21.  
  22. void drawHouse () {
  23.     glColor3f(0.0f, 1.0f, 0.0f); // Green
  24.  
  25.     glBegin(GL_QUADS);
  26.       // Top face (y = 1.0f)
  27.     glVertex3f( 1.0f, 1.0f, -1.0f);
  28.     glVertex3f(-1.0f, 1.0f, -1.0f);
  29.     glVertex3f(-1.0f, 1.0f,  1.0f);
  30.     glVertex3f( 1.0f, 1.0f,  1.0f);
  31.  
  32.     // Bottom face (y = -1.0f)
  33.     glVertex3f( 1.0f, -1.0f,  1.0f);
  34.     glVertex3f(-1.0f, -1.0f,  1.0f);
  35.     glVertex3f(-1.0f, -1.0f, -1.0f);
  36.     glVertex3f( 1.0f, -1.0f, -1.0f);
  37.  
  38.     // Front face  (z = 1.0f)
  39.     glVertex3f( 1.0f,  1.0f, 1.0f);
  40.     glVertex3f(-1.0f,  1.0f, 1.0f);
  41.     glVertex3f(-1.0f, -1.0f, 1.0f);
  42.     glVertex3f( 1.0f, -1.0f, 1.0f);
  43.  
  44.     // Back face (z = -1.0f)
  45.     glVertex3f( 1.0f, -1.0f, -1.0f);
  46.     glVertex3f(-1.0f, -1.0f, -1.0f);
  47.     glVertex3f(-1.0f,  1.0f, -1.0f);
  48.     glVertex3f( 1.0f,  1.0f, -1.0f);
  49.  
  50.     // Left face (x = -1.0f)
  51.     glVertex3f(-1.0f,  1.0f,  1.0f);
  52.     glVertex3f(-1.0f,  1.0f, -1.0f);
  53.     glVertex3f(-1.0f, -1.0f, -1.0f);
  54.     glVertex3f(-1.0f, -1.0f,  1.0f);
  55.  
  56.     // Right face (x = 1.0f)
  57.     glVertex3f(1.0f,  1.0f, -1.0f);
  58.     glVertex3f(1.0f,  1.0f,  1.0f);
  59.     glVertex3f(1.0f, -1.0f,  1.0f);
  60.     glVertex3f(1.0f, -1.0f, -1.0f);
  61.     glEnd();  // End of drawing color-cube
  62. }
  63.  
  64. void drawGround () {
  65.     glColor3f (0.9f, 0.9f, 0.9f);
  66.  
  67.     glBegin (GL_QUADS);
  68.     glVertex3f (-g_side - 10, 0.0f, -g_side);
  69.     glVertex3f (-g_side - 10, 0.0f,  g_side);
  70.     glVertex3f ( g_side - 10, 0.0f,  g_side);
  71.     glVertex3f ( g_side - 10, 0.0f, -g_side);
  72.     glEnd ();
  73. }
  74.  
  75. void changeSize (int w, int h) {
  76.     h = (h > 0 ? h : 1);
  77.     float ratio = (w * 1.0) / h;
  78.  
  79.     // Use the Projection Matrix
  80.     glMatrixMode (GL_PROJECTION);
  81.  
  82.     // Reset Matrix
  83.     glLoadIdentity ();
  84.  
  85.     // Set the viewport to be the entire window
  86.     glViewport (0, 0, w, h);
  87.  
  88.     // Set the correct perspective.
  89.     gluPerspective (45.0, ratio, 0.1, 100.0);
  90.  
  91.     // Get Back to the Modelview
  92.     glMatrixMode (GL_MODELVIEW);
  93. }
  94.  
  95. void render () {
  96.     // Clear Color and Depth Buffers
  97.     glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  98.  
  99.     // Reset transformations
  100.     glLoadIdentity ();
  101.  
  102.     // Set the camera
  103.     gluLookAt (x,          1.0, z, // camera position
  104.                x + look_x, 1.0, z + look_z, // look at
  105.                0.0,        1.0, 0.0); // up
  106.  
  107.     drawGround ();
  108.     for (int i = -3; i < 3; ++i) {
  109.         for (int j = -3; j < 3; ++j) {
  110.             glPushMatrix (); {
  111.                 glTranslatef (i * 10.0, 0, j * 10.0);
  112.                 drawHouse ();
  113.             } glPopMatrix ();
  114.         }
  115.     }
  116.  
  117.     glutSwapBuffers ();
  118. }
  119.  
  120. void changeMode (unsigned char key, int _x, int _y) {
  121. }
  122.  
  123. void keyEvent (int key, int _x, int _y) {
  124.     float fraction = 0.1f;
  125.  
  126.     switch (key) {
  127.         case GLUT_KEY_LEFT :
  128.             angle -= .01;
  129.             look_x =  sin (angle);
  130.             look_z = -cos (angle);
  131.             break;
  132.         case GLUT_KEY_RIGHT :
  133.             angle += .01;
  134.             look_x =  sin (angle);
  135.             look_z = -cos (angle);
  136.             break;
  137.         case GLUT_KEY_UP :
  138.             x += look_x * fraction;
  139.             z += look_z * fraction;
  140.             break;
  141.         case GLUT_KEY_DOWN :
  142.             x -= look_x * fraction;
  143.             z -= look_z * fraction;
  144.             break;
  145.     }
  146. }
  147.  
  148. int main (int argc, char **argv) {
  149.     glutInit (&argc, argv);
  150.     glutInitDisplayMode (GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
  151.     glutInitWindowPosition (100, 100);
  152.     glutInitWindowSize (2 * w_side, w_side);
  153.     glutCreateWindow ("Graphics Lab Project");
  154.  
  155.     // register callbacks
  156.     glutDisplayFunc (render);
  157.     glutReshapeFunc(changeSize);
  158.     glutIdleFunc (render);
  159.     glutKeyboardFunc (changeMode);
  160.     glutSpecialFunc (keyEvent);
  161.  
  162.     glEnable (GL_DEPTH_TEST);
  163.     glutMainLoop ();
  164.  
  165.     return 0;
  166. }
Advertisement
Add Comment
Please, Sign In to add comment