Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Display.h"
- #include "Bitmap.h"
- #include "Glut/glut.h"
- #include "GL/gl.h"
- #include "GL/glu.h"
- #include "PoolLight.h"
- unsigned int Display::_textureHandles[_textureCount];
- void Display::Init(int argc, char ** argv)
- {
- glutInit(&argc, argv); // initializes glut
- // sets display mode. These parameter set RGB colour model
- // and double buffering.
- glutInitWindowSize(800, 600);
- glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
- glutCreateWindow("200886396 - 3D Pool");
- // Set glut callback functions
- glutDisplayFunc(Display::DisplayScene);
- glutIdleFunc(Display::Idle);
- glutReshapeFunc(Display::Resize);
- glutKeyboardFunc(Display::Keyboard);
- atexit(Display::Quit);
- glEnable(GL_TEXTURE_2D);
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_LIGHTING);
- glPointSize(6);
- PoolLight spotlight = PoolLight(GL_LIGHT0, GL_DIFFUSE, 1, 1, 0.5, false, 0, 0, -4);
- spotlight.setSpotlight(10, 1, 0, 0, -1);
- spotlight = PoolLight(GL_LIGHT1, GL_DIFFUSE, 1, 1, 0.5, false, 0, 45, -4);
- spotlight.setSpotlight(10, 1, 0, 0, -1);
- spotlight = PoolLight(GL_LIGHT2, GL_DIFFUSE, 1, 1, 0.5, false, 0, -45, -4);
- spotlight.setSpotlight(10, 1, 0, 0, -1);
- glGenTextures(_textureCount, _textureHandles); //Generates 1 texture, puts the ID in m_TextureID
- //TODO: createTexture(Bitmap image, unsigned int textureID);
- // Begin glut main loop
- glutMainLoop();
- }
- void Display::createTexture(Bitmap image, unsigned int textureID) {
- glBindTexture(GL_TEXTURE_2D, textureID);
- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
- gluBuild2DMipmaps(GL_TEXTURE_2D, 3, image.width, image.height, GL_RGB, GL_UNSIGNED_BYTE, image.data); //Copy image to graphics card
- }
- void Display::DisplayScene()
- {
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear the back buffer
- //glEnable(GL_TEXTURE_2D);
- drawPoolTable();
- drawPoolRim();
- drawPoolLegs();
- //drawLighting();
- //drawBalls();
- //drawCue();
- //glDisable(GL_TEXTURE_2D);
- glutSwapBuffers(); // Swap the front and back buffers
- }
- void Display::drawPoolTable() {
- //glBindTexture(GL_TEXTURE_2D, textureHandles[0]);
- glNormal3f(0, 0, 1); //Top face
- glBegin(GL_TRIANGLE_STRIP);
- for (int i = 90; i >= -90; i -= 10) {
- glColor3f(0, .5 + (float) abs(i) / 400, 0);
- glVertex3f(-45, i, -11);
- glVertex3f(45, i, -11);
- }
- glEnd();
- glNormal3f(-1, 0, 0); //Left face
- glBegin(GL_TRIANGLE_STRIP);
- for (int i = 90; i >= -90; i -= 10) {
- glColor3f(.3 + (float) abs(i) / 400, .15 + (float) abs(i) / 400, 0);
- glVertex3f(-45, i, -11);
- glVertex3f(-45, i, -51);
- }
- glEnd();
- glNormal3f(0, 1, 0); //Upper face
- glBegin(GL_TRIANGLE_STRIP);
- for (int i = 45; i >= -45; i -= 10) {
- glColor3f(.3 + (float) abs(i) / 200, .15 + (float) abs(i) / 200, 0);
- glVertex3f(i, 90, -11);
- glVertex3f(i, 90, -51);
- }
- glEnd();
- glNormal3f(1, 0, 0); //Right face
- glBegin(GL_TRIANGLE_STRIP);
- for (int i = 90; i >= -90; i -= 10) {
- glColor3f(.3 + (float) abs(i) / 400, .15 + (float) abs(i) / 400, 0);
- glVertex3f(45, i, -11);
- glVertex3f(45, i, -51);
- }
- glEnd();
- glNormal3f(0, -1, 0); //Lower face
- glBegin(GL_TRIANGLE_STRIP);
- for (int i = 45; i >= -45; i -= 10) {
- glColor3f(.3 + (float) abs(i) / 200, .15 + (float) abs(i) / 200, 0);
- glVertex3f(i, -90, -11);
- glVertex3f(i, -90, -51);
- }
- glEnd();
- glNormal3f(0, 0, -1); //Bottom face
- glBegin(GL_TRIANGLE_STRIP);
- for (int i = 90; i >= -90; i -= 10) {
- glColor3f(.3 + (float) abs(i) / 400, .15 + (float) abs(i) / 400, 0);
- glVertex3f(-45, i, -51);
- glVertex3f(45, i, -51);
- }
- glEnd();
- }
- void Display::drawPoolRim() {
- //glBindTexture(GL_TEXTURE_2D, textureHandles[0]);
- //Upper cuboid
- glBegin(GL_TRIANGLE_STRIP);
- glColor3f(0.2, 0, 0);
- //Top face
- glNormal3f(0, 0, 1);
- glVertex3f(-45, 90, -5);
- glVertex3f(45, 90, -5);
- glVertex3f(-45, 80, -5);
- glVertex3f(45, 80, -5);
- //Lower face
- glNormal3f(0, -1, 0);
- glVertex3f(-45, 80, -11);
- glVertex3f(45, 80, -11);
- //Bottom face
- glNormal3f(0, 0, -1);
- glVertex3f(-45, 90, -11);
- glVertex3f(45, 90, -11);
- //Upper face
- glNormal3f(0, 1, 0);
- glVertex3f(-45, 90, -5);
- glVertex3f(45, 90, -5);
- glEnd();
- glBegin(GL_QUADS);
- //Left face
- glNormal3f(-1, 0, 0);
- glVertex3f(-45, 90, -5);
- glVertex3f(-45, 80, -5);
- glVertex3f(-45, 80, -11);
- glVertex3f(-45, 90, -11);
- //Right face
- glNormal3f(1, 0, 0);
- glVertex3f(45, 90, -5);
- glVertex3f(45, 80, -5);
- glVertex3f(45, 80, -11);
- glVertex3f(45, 90, -11);
- glEnd();
- //Lower cuboid
- glBegin(GL_TRIANGLE_STRIP);
- glColor3f(0.2, 0, 0);
- //Top face
- glNormal3f(0, 0, 1);
- glVertex3f(-45, -90, -5);
- glVertex3f(45, -90, -5);
- glVertex3f(-45, -80, -5);
- glVertex3f(45, -80, -5);
- //Lower face
- glNormal3f(0, -1, 0);
- glVertex3f(-45, -80, -11);
- glVertex3f(45, -80, -11);
- //Bottom face
- glNormal3f(0, 0, -1);
- glVertex3f(-45, -90, -11);
- glVertex3f(45, -90, -11);
- //Upper face
- glNormal3f(0, 1, 0);
- glVertex3f(-45, -90, -5);
- glVertex3f(45, -90, -5);
- glEnd();
- glBegin(GL_QUADS);
- //Left face
- glNormal3f(-1, 0, 0);
- glVertex3f(-45, -90, -5);
- glVertex3f(-45, -80, -5);
- glVertex3f(-45, -80, -11);
- glVertex3f(-45, -90, -11);
- //Right face
- glNormal3f(1, 0, 0);
- glVertex3f(45, -90, -5);
- glVertex3f(45, -80, -5);
- glVertex3f(45, -80, -11);
- glVertex3f(45, -90, -11);
- glEnd();
- //Left cuboid
- glBegin(GL_TRIANGLE_STRIP);
- glColor3f(0.2, 0, 0);
- //Top face
- glNormal3f(0, 0, 1);
- glVertex3f(-35, 80, -5);
- glVertex3f(-45, 80, -5);
- glVertex3f(-35, -80, -5);
- glVertex3f(-45, -80, -5);
- //Lower face
- glNormal3f(0, -1, 0);
- glVertex3f(-35, -80, -11);
- glVertex3f(-45, -80, -11);
- //Bottom face
- glNormal3f(0, 0, -1);
- glVertex3f(-35, -80, -11);
- glVertex3f(-45, 80, -11);
- //Upper face
- glNormal3f(0, 1, 0);
- glVertex3f(-35, 80, -5);
- glVertex3f(-45, 80, -5);
- glEnd();
- glBegin(GL_QUADS);
- //Left face
- glNormal3f(-1, 0, 0);
- glVertex3f(-45, 80, -5);
- glVertex3f(-45, -80, -5);
- glVertex3f(-45, -80, -11);
- glVertex3f(-45, 80, -11);
- //Right face
- glNormal3f(1, 0, 0);
- glVertex3f(-35, 80, -5);
- glVertex3f(-35, -80, -5);
- glVertex3f(-35, -80, -11);
- glVertex3f(-35, 80, -11);
- glEnd();
- //Right cuboid
- glBegin(GL_TRIANGLE_STRIP);
- glColor3f(0.2, 0, 0);
- //Top face
- glNormal3f(0, 0, 1);
- glVertex3f(35, 80, -5);
- glVertex3f(45, 80, -5);
- glVertex3f(35, -80, -5);
- glVertex3f(45, -80, -5);
- //Lower face
- glNormal3f(0, -1, 0);
- glVertex3f(35, -80, -11);
- glVertex3f(45, -80, -11);
- //Bottom face
- glNormal3f(0, 0, -1);
- glVertex3f(35, -80, -11);
- glVertex3f(45, 80, -11);
- //Upper face
- glNormal3f(0, 1, 0);
- glVertex3f(35, 80, -5);
- glVertex3f(45, 80, -5);
- glEnd();
- glBegin(GL_QUADS);
- //Left face
- glNormal3f(-1, 0, 0);
- glVertex3f(45, 80, -5);
- glVertex3f(45, -80, -5);
- glVertex3f(45, -80, -11);
- glVertex3f(45, 80, -11);
- //Right face
- glNormal3f(1, 0, 0);
- glVertex3f(35, 80, -5);
- glVertex3f(35, -80, -5);
- glVertex3f(35, -80, -11);
- glVertex3f(35, 80, -11);
- glEnd();
- }
- void Display::drawPoolLegs() {
- //glBindTexture(GL_TEXTURE_2D, textureHandles[0]);
- //Upper Left Leg
- glBegin(GL_TRIANGLE_STRIP);
- //Upper face
- glNormal3f(0, 1, 0);
- glVertex3f(-45, 90, -51);
- glVertex3f(-45, 90, -151);
- glVertex3f(-25, 90, -51);
- glVertex3f(-25, 80, -151);
- //Right face
- glNormal3f(1, 0, 0);
- glVertex3f(-25, 65, -51);
- glVertex3f(-25, 65, -151);
- //Lower face
- glNormal3f(0, -1, 0);
- glVertex3f(-45, 65, -51);
- glVertex3f(-45, 65, -151);
- //Left face
- glNormal3f(-1, 0, 0);
- glVertex3f(-45, 90, -51);
- glVertex3f(-45, 90, -151);
- glEnd();
- //Upper Right Leg
- glBegin(GL_TRIANGLE_STRIP);
- //Upper face
- glNormal3f(0, 1, 0);
- glVertex3f(45, 90, -51);
- glVertex3f(45, 90, -151);
- glVertex3f(25, 90, -51);
- glVertex3f(25, 80, -151);
- //Right face
- glNormal3f(1, 0, 0);
- glVertex3f(25, 65, -51);
- glVertex3f(25, 65, -151);
- //Lower face
- glNormal3f(0, -1, 0);
- glVertex3f(45, 65, -51);
- glVertex3f(45, 65, -151);
- //Left face
- glNormal3f(-1, 0, 0);
- glVertex3f(45, 90, -51);
- glVertex3f(45, 90, -151);
- glEnd();
- //Lower Left Leg
- glBegin(GL_TRIANGLE_STRIP);
- //Upper face
- glNormal3f(0, 1, 0);
- glVertex3f(-45, -90, -51);
- glVertex3f(-45, -90, -151);
- glVertex3f(-25, -90, -51);
- glVertex3f(-25, -80, -151);
- //Right face
- glNormal3f(1, 0, 0);
- glVertex3f(-25, -65, -51);
- glVertex3f(-25, -65, -151);
- //Lower face
- glNormal3f(0, -1, 0);
- glVertex3f(-45, -65, -51);
- glVertex3f(-45, -65, -151);
- //Left face
- glNormal3f(-1, 0, 0);
- glVertex3f(-45, -90, -51);
- glVertex3f(-45, -90, -151);
- glEnd();
- //Lower Right Leg
- glBegin(GL_TRIANGLE_STRIP);
- //Upper face
- glNormal3f(0, 1, 0);
- glVertex3f(45, -90, -51);
- glVertex3f(45, -90, -151);
- glVertex3f(25, -90, -51);
- glVertex3f(25, -80, -151);
- //Right face
- glNormal3f(1, 0, 0);
- glVertex3f(25, -65, -51);
- glVertex3f(25, -65, -151);
- //Lower face
- glNormal3f(0, -1, 0);
- glVertex3f(45, -65, -51);
- glVertex3f(45, -65, -151);
- //Left face
- glNormal3f(-1, 0, 0);
- glVertex3f(45, -90, -51);
- glVertex3f(45, -90, -151);
- glEnd();
- }
- void Display::Resize(int w, int h)
- {
- /* Resize is called when window is resized */
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glViewport(0,0,w,h);
- gluPerspective(85, (float)w/(float)h, 1, 1000);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- gluLookAt(0, 0, 80, //Camera location
- 0, 0, -1, //Where to look at
- 1, 0, 0); //Camera 'up' direction
- }
- void Display::Idle()
- {
- /* When nothing else is happening, idle is called.
- * Simulation should be done here and then
- * the display method should be called
- */
- glutPostRedisplay();
- }
- void Display::Keyboard(unsigned char key, int x, int y) {
- //Look();
- }
- void Display::Look() {
- }
- void Display::Quit() {
- glDeleteTextures(_textureCount, _textureHandles);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement