Advertisement
Guest User

Untitled

a guest
Apr 12th, 2011
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.19 KB | None | 0 0
  1. #include "Display.h"
  2. #include "Bitmap.h"
  3. #include "Glut/glut.h"
  4. #include "GL/gl.h"
  5. #include "GL/glu.h"
  6. #include "PoolLight.h"
  7.  
  8. unsigned int Display::_textureHandles[_textureCount];
  9.  
  10. void Display::Init(int argc, char ** argv)
  11. {
  12.     glutInit(&argc, argv); // initializes glut
  13.     // sets display mode. These parameter set RGB colour model
  14.     // and double buffering.
  15.     glutInitWindowSize(800, 600);
  16.     glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
  17.     glutCreateWindow("200886396 - 3D Pool");
  18.     // Set glut callback functions
  19.     glutDisplayFunc(Display::DisplayScene);
  20.     glutIdleFunc(Display::Idle);
  21.     glutReshapeFunc(Display::Resize);
  22.     glutKeyboardFunc(Display::Keyboard);
  23.     atexit(Display::Quit);
  24.  
  25.     glEnable(GL_TEXTURE_2D);
  26.     glEnable(GL_DEPTH_TEST);
  27.     glEnable(GL_LIGHTING);
  28.     glPointSize(6);
  29.  
  30.     PoolLight spotlight = PoolLight(GL_LIGHT0, GL_DIFFUSE, 1, 1, 0.5, false, 0, 0, -4);
  31.     spotlight.setSpotlight(10, 1, 0, 0, -1);
  32.     spotlight = PoolLight(GL_LIGHT1, GL_DIFFUSE, 1, 1, 0.5, false, 0, 45, -4);
  33.     spotlight.setSpotlight(10, 1, 0, 0, -1);
  34.     spotlight = PoolLight(GL_LIGHT2, GL_DIFFUSE, 1, 1, 0.5, false, 0, -45, -4);
  35.     spotlight.setSpotlight(10, 1, 0, 0, -1);
  36.    
  37.  
  38.     glGenTextures(_textureCount, _textureHandles); //Generates 1 texture, puts the ID in m_TextureID
  39.     //TODO: createTexture(Bitmap image, unsigned int textureID);
  40.        
  41.     // Begin glut main loop
  42.     glutMainLoop();
  43.    
  44. }
  45.  
  46. void Display::createTexture(Bitmap image, unsigned int textureID) {
  47.     glBindTexture(GL_TEXTURE_2D, textureID);
  48.  
  49.     glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
  50.     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
  51.     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  52.     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  53.     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  54.  
  55.     gluBuild2DMipmaps(GL_TEXTURE_2D, 3, image.width, image.height, GL_RGB, GL_UNSIGNED_BYTE, image.data); //Copy image to graphics card
  56. }
  57.  
  58. void Display::DisplayScene()
  59. {
  60.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear the back buffer
  61.     //glEnable(GL_TEXTURE_2D);
  62.    
  63.     drawPoolTable();
  64.     drawPoolRim();
  65.     drawPoolLegs();
  66.     //drawLighting();
  67.     //drawBalls();
  68.     //drawCue();
  69.  
  70.     //glDisable(GL_TEXTURE_2D);
  71.  
  72.     glutSwapBuffers(); // Swap the front and back buffers
  73. }
  74.  
  75. void Display::drawPoolTable() {
  76.     //glBindTexture(GL_TEXTURE_2D, textureHandles[0]);
  77.  
  78.     glNormal3f(0, 0, 1); //Top face
  79.     glBegin(GL_TRIANGLE_STRIP);
  80.         for (int i = 90; i >= -90; i -= 10) {
  81.             glColor3f(0, .5 + (float) abs(i) / 400, 0);
  82.             glVertex3f(-45, i, -11);
  83.             glVertex3f(45, i, -11);
  84.         }
  85.     glEnd();
  86.  
  87.     glNormal3f(-1, 0, 0); //Left face
  88.     glBegin(GL_TRIANGLE_STRIP);
  89.         for (int i = 90; i >= -90; i -= 10) {
  90.             glColor3f(.3 + (float) abs(i) / 400, .15 + (float) abs(i) / 400, 0);
  91.             glVertex3f(-45, i, -11);
  92.             glVertex3f(-45, i, -51);
  93.         }
  94.     glEnd();
  95.  
  96.     glNormal3f(0, 1, 0); //Upper face
  97.     glBegin(GL_TRIANGLE_STRIP);
  98.         for (int i = 45; i >= -45; i -= 10) {
  99.             glColor3f(.3 + (float) abs(i) / 200, .15 + (float) abs(i) / 200, 0);
  100.             glVertex3f(i, 90, -11);
  101.             glVertex3f(i, 90, -51);
  102.         }
  103.     glEnd();
  104.  
  105.     glNormal3f(1, 0, 0); //Right face
  106.     glBegin(GL_TRIANGLE_STRIP);
  107.         for (int i = 90; i >= -90; i -= 10) {
  108.             glColor3f(.3 + (float) abs(i) / 400, .15 + (float) abs(i) / 400, 0);
  109.             glVertex3f(45, i, -11);
  110.             glVertex3f(45, i, -51);
  111.         }
  112.     glEnd();
  113.  
  114.     glNormal3f(0, -1, 0); //Lower face
  115.     glBegin(GL_TRIANGLE_STRIP);
  116.         for (int i = 45; i >= -45; i -= 10) {
  117.             glColor3f(.3 + (float) abs(i) / 200, .15 + (float) abs(i) / 200, 0);
  118.             glVertex3f(i, -90, -11);
  119.             glVertex3f(i, -90, -51);
  120.         }
  121.     glEnd();
  122.  
  123.     glNormal3f(0, 0, -1); //Bottom face
  124.     glBegin(GL_TRIANGLE_STRIP);
  125.         for (int i = 90; i >= -90; i -= 10) {
  126.             glColor3f(.3 + (float) abs(i) / 400, .15 + (float) abs(i) / 400, 0);
  127.             glVertex3f(-45, i, -51);
  128.             glVertex3f(45, i, -51);
  129.         }
  130.     glEnd();
  131. }
  132.  
  133. void Display::drawPoolRim() {
  134.     //glBindTexture(GL_TEXTURE_2D, textureHandles[0]);
  135.  
  136.     //Upper cuboid
  137.     glBegin(GL_TRIANGLE_STRIP);
  138.         glColor3f(0.2, 0, 0);
  139.         //Top face
  140.         glNormal3f(0, 0, 1);
  141.         glVertex3f(-45, 90, -5);
  142.         glVertex3f(45, 90, -5);
  143.         glVertex3f(-45, 80, -5);
  144.         glVertex3f(45, 80, -5);
  145.         //Lower face
  146.         glNormal3f(0, -1, 0);
  147.         glVertex3f(-45, 80, -11);
  148.         glVertex3f(45, 80, -11);
  149.         //Bottom face
  150.         glNormal3f(0, 0, -1);
  151.         glVertex3f(-45, 90, -11);
  152.         glVertex3f(45, 90, -11);
  153.         //Upper face
  154.         glNormal3f(0, 1, 0);
  155.         glVertex3f(-45, 90, -5);
  156.         glVertex3f(45, 90, -5);
  157.     glEnd();
  158.     glBegin(GL_QUADS);
  159.         //Left face
  160.         glNormal3f(-1, 0, 0);
  161.         glVertex3f(-45, 90, -5);
  162.         glVertex3f(-45, 80, -5);
  163.         glVertex3f(-45, 80, -11);
  164.         glVertex3f(-45, 90, -11);
  165.         //Right face
  166.         glNormal3f(1, 0, 0);
  167.         glVertex3f(45, 90, -5);
  168.         glVertex3f(45, 80, -5);
  169.         glVertex3f(45, 80, -11);
  170.         glVertex3f(45, 90, -11);
  171.     glEnd();
  172.  
  173.     //Lower cuboid
  174.     glBegin(GL_TRIANGLE_STRIP);
  175.         glColor3f(0.2, 0, 0);
  176.         //Top face
  177.         glNormal3f(0, 0, 1);
  178.         glVertex3f(-45, -90, -5);
  179.         glVertex3f(45, -90, -5);
  180.         glVertex3f(-45, -80, -5);
  181.         glVertex3f(45, -80, -5);
  182.         //Lower face
  183.         glNormal3f(0, -1, 0);
  184.         glVertex3f(-45, -80, -11);
  185.         glVertex3f(45, -80, -11);
  186.         //Bottom face
  187.         glNormal3f(0, 0, -1);
  188.         glVertex3f(-45, -90, -11);
  189.         glVertex3f(45, -90, -11);
  190.         //Upper face
  191.         glNormal3f(0, 1, 0);
  192.         glVertex3f(-45, -90, -5);
  193.         glVertex3f(45, -90, -5);
  194.     glEnd();
  195.     glBegin(GL_QUADS);
  196.         //Left face
  197.         glNormal3f(-1, 0, 0);
  198.         glVertex3f(-45, -90, -5);
  199.         glVertex3f(-45, -80, -5);
  200.         glVertex3f(-45, -80, -11);
  201.         glVertex3f(-45, -90, -11);
  202.         //Right face
  203.         glNormal3f(1, 0, 0);
  204.         glVertex3f(45, -90, -5);
  205.         glVertex3f(45, -80, -5);
  206.         glVertex3f(45, -80, -11);
  207.         glVertex3f(45, -90, -11);
  208.     glEnd();
  209.  
  210.     //Left cuboid
  211.     glBegin(GL_TRIANGLE_STRIP);
  212.         glColor3f(0.2, 0, 0);
  213.         //Top face
  214.         glNormal3f(0, 0, 1);
  215.         glVertex3f(-35, 80, -5);
  216.         glVertex3f(-45, 80, -5);
  217.         glVertex3f(-35, -80, -5);
  218.         glVertex3f(-45, -80, -5);
  219.         //Lower face
  220.         glNormal3f(0, -1, 0);
  221.         glVertex3f(-35, -80, -11);
  222.         glVertex3f(-45, -80, -11);
  223.         //Bottom face
  224.         glNormal3f(0, 0, -1);
  225.         glVertex3f(-35, -80, -11);
  226.         glVertex3f(-45, 80, -11);
  227.         //Upper face
  228.         glNormal3f(0, 1, 0);
  229.         glVertex3f(-35, 80, -5);
  230.         glVertex3f(-45, 80, -5);
  231.     glEnd();
  232.     glBegin(GL_QUADS);
  233.         //Left face
  234.         glNormal3f(-1, 0, 0);
  235.         glVertex3f(-45, 80, -5);
  236.         glVertex3f(-45, -80, -5);
  237.         glVertex3f(-45, -80, -11);
  238.         glVertex3f(-45, 80, -11);
  239.         //Right face
  240.         glNormal3f(1, 0, 0);
  241.         glVertex3f(-35, 80, -5);
  242.         glVertex3f(-35, -80, -5);
  243.         glVertex3f(-35, -80, -11);
  244.         glVertex3f(-35, 80, -11);
  245.     glEnd();
  246.  
  247.     //Right cuboid
  248.     glBegin(GL_TRIANGLE_STRIP);
  249.         glColor3f(0.2, 0, 0);
  250.         //Top face
  251.         glNormal3f(0, 0, 1);
  252.         glVertex3f(35, 80, -5);
  253.         glVertex3f(45, 80, -5);
  254.         glVertex3f(35, -80, -5);
  255.         glVertex3f(45, -80, -5);
  256.         //Lower face
  257.         glNormal3f(0, -1, 0);
  258.         glVertex3f(35, -80, -11);
  259.         glVertex3f(45, -80, -11);
  260.         //Bottom face
  261.         glNormal3f(0, 0, -1);
  262.         glVertex3f(35, -80, -11);
  263.         glVertex3f(45, 80, -11);
  264.         //Upper face
  265.         glNormal3f(0, 1, 0);
  266.         glVertex3f(35, 80, -5);
  267.         glVertex3f(45, 80, -5);
  268.     glEnd();
  269.     glBegin(GL_QUADS);
  270.         //Left face
  271.         glNormal3f(-1, 0, 0);
  272.         glVertex3f(45, 80, -5);
  273.         glVertex3f(45, -80, -5);
  274.         glVertex3f(45, -80, -11);
  275.         glVertex3f(45, 80, -11);
  276.         //Right face
  277.         glNormal3f(1, 0, 0);
  278.         glVertex3f(35, 80, -5);
  279.         glVertex3f(35, -80, -5);
  280.         glVertex3f(35, -80, -11);
  281.         glVertex3f(35, 80, -11);
  282.     glEnd();
  283.  
  284. }
  285.  
  286. void Display::drawPoolLegs() {
  287.     //glBindTexture(GL_TEXTURE_2D, textureHandles[0]);
  288.  
  289.      //Upper Left Leg
  290.     glBegin(GL_TRIANGLE_STRIP);
  291.         //Upper face
  292.         glNormal3f(0, 1, 0);
  293.         glVertex3f(-45, 90, -51);
  294.         glVertex3f(-45, 90, -151);
  295.         glVertex3f(-25, 90, -51);
  296.         glVertex3f(-25, 80, -151);
  297.         //Right face
  298.         glNormal3f(1, 0, 0);
  299.         glVertex3f(-25, 65, -51);
  300.         glVertex3f(-25, 65, -151);
  301.         //Lower face
  302.         glNormal3f(0, -1, 0);
  303.         glVertex3f(-45, 65, -51);
  304.         glVertex3f(-45, 65, -151);
  305.         //Left face
  306.         glNormal3f(-1, 0, 0);
  307.         glVertex3f(-45, 90, -51);
  308.         glVertex3f(-45, 90, -151);
  309.     glEnd();
  310.  
  311.      //Upper Right Leg
  312.     glBegin(GL_TRIANGLE_STRIP);
  313.         //Upper face
  314.         glNormal3f(0, 1, 0);
  315.         glVertex3f(45, 90, -51);
  316.         glVertex3f(45, 90, -151);
  317.         glVertex3f(25, 90, -51);
  318.         glVertex3f(25, 80, -151);
  319.         //Right face
  320.         glNormal3f(1, 0, 0);
  321.         glVertex3f(25, 65, -51);
  322.         glVertex3f(25, 65, -151);
  323.         //Lower face
  324.         glNormal3f(0, -1, 0);
  325.         glVertex3f(45, 65, -51);
  326.         glVertex3f(45, 65, -151);
  327.         //Left face
  328.         glNormal3f(-1, 0, 0);
  329.         glVertex3f(45, 90, -51);
  330.         glVertex3f(45, 90, -151);
  331.     glEnd();
  332.  
  333.      //Lower Left Leg
  334.     glBegin(GL_TRIANGLE_STRIP);
  335.         //Upper face
  336.         glNormal3f(0, 1, 0);
  337.         glVertex3f(-45, -90, -51);
  338.         glVertex3f(-45, -90, -151);
  339.         glVertex3f(-25, -90, -51);
  340.         glVertex3f(-25, -80, -151);
  341.         //Right face
  342.         glNormal3f(1, 0, 0);
  343.         glVertex3f(-25, -65, -51);
  344.         glVertex3f(-25, -65, -151);
  345.         //Lower face
  346.         glNormal3f(0, -1, 0);
  347.         glVertex3f(-45, -65, -51);
  348.         glVertex3f(-45, -65, -151);
  349.         //Left face
  350.         glNormal3f(-1, 0, 0);
  351.         glVertex3f(-45, -90, -51);
  352.         glVertex3f(-45, -90, -151);
  353.     glEnd();
  354.  
  355.      //Lower Right Leg
  356.     glBegin(GL_TRIANGLE_STRIP);
  357.         //Upper face
  358.         glNormal3f(0, 1, 0);
  359.         glVertex3f(45, -90, -51);
  360.         glVertex3f(45, -90, -151);
  361.         glVertex3f(25, -90, -51);
  362.         glVertex3f(25, -80, -151);
  363.         //Right face
  364.         glNormal3f(1, 0, 0);
  365.         glVertex3f(25, -65, -51);
  366.         glVertex3f(25, -65, -151);
  367.         //Lower face
  368.         glNormal3f(0, -1, 0);
  369.         glVertex3f(45, -65, -51);
  370.         glVertex3f(45, -65, -151);
  371.         //Left face
  372.         glNormal3f(-1, 0, 0);
  373.         glVertex3f(45, -90, -51);
  374.         glVertex3f(45, -90, -151);
  375.     glEnd();
  376.  
  377.    
  378. }
  379.  
  380. void Display::Resize(int w, int h)
  381. {
  382.     /* Resize is called when window is resized */
  383.     glMatrixMode(GL_PROJECTION);
  384.     glLoadIdentity();
  385.     glViewport(0,0,w,h);
  386.     gluPerspective(85, (float)w/(float)h, 1, 1000);
  387.     glMatrixMode(GL_MODELVIEW);
  388.     glLoadIdentity();
  389.     gluLookAt(0, 0, 80, //Camera location
  390.         0, 0, -1, //Where to look at
  391.         1, 0, 0); //Camera 'up' direction
  392. }
  393.  
  394. void Display::Idle()
  395. {
  396.     /* When nothing else is happening, idle is called.
  397.      * Simulation should be done here and then
  398.      * the display method should be called
  399.      */
  400.     glutPostRedisplay();
  401. }
  402.  
  403. void Display::Keyboard(unsigned char key, int x, int y) {
  404.     //Look();
  405. }
  406.  
  407. void Display::Look() {
  408.  
  409. }
  410.  
  411. void Display::Quit() {
  412.     glDeleteTextures(_textureCount, _textureHandles);
  413. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement