This week only. Pastebin PRO Accounts Christmas Special! Don't miss out!Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Apr 12th, 2011  |  syntax: C++  |  size: 10.19 KB  |  views: 64  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  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. }
clone this paste RAW Paste Data