#main.cpp #include #include "camera.h" #include "track.h" Camera camera; // Create a camera for viewing Track track; // Create the track with length 1000m, and parameters b,c,d void display() { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); camera.createModelViewMatrix(); glViewport(0, 0, 1280, 800); track.draw(); glFlush(); glutSwapBuffers(); } void reshape(int w, int h) { glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); camera.createViewVolume(40.0f, (GLfloat) w / (GLfloat) h, 0.5f, 50.0f); // angle,aspect,near,far glMatrixMode(GL_MODELVIEW); glLoadIdentity(); camera.createModelViewMatrix(); } void init() { glEnable(GL_DEPTH_TEST); // Use removing of hidden surfaces glEnable(GL_NORMALIZE); // Normalize vectors camera.create(0, 0, 10, 0, 0, 0, 0, 1, 0); camera.slide(0.0, -9.0, -2.0); camera.pitch(-40.0); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH ); glutInitWindowSize(1280,800); glutInitWindowPosition(100,50); glutCreateWindow("Ă˜ving 6 - Racetrack"); glutDisplayFunc(display); glutReshapeFunc(reshape); init(); glutMainLoop(); return 0; } #track.h #ifndef __track_h__ #define __track_h__ class Track { public: Track(); void draw(); void loadTextures(); private: GLuint texture; }; #endif #track.cpp #include #include "util_graphics.h" #include #include "track.h" Track::Track() { loadTextures(); } void Track::loadTextures() { unsigned char* data; unsigned int width; unsigned int height; unsigned int components; glEnable( GL_TEXTURE_2D ); glGenTextures( 1, &texture ); glBindTexture( GL_TEXTURE_2D, texture ); data = loadJPEG("textures/road.jpg", &width,&height,&components); gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGB, width, height, GL_RGB, GL_UNSIGNED_BYTE, data); free(data); } void Track::draw() { glEnable( GL_TEXTURE_2D ); glBindTexture( GL_TEXTURE_2D, texture ); glBegin(GL_POLYGON); glNormal3f(0,0,1); glTexCoord2i(0,0); glVertex3i(0,0,0); glTexCoord2i(0,1); glVertex3i(0,1,0); glTexCoord2i(1,0); glVertex3i(1,1,0); glTexCoord2i(1,1); glVertex3i(1,0,0); glEnd(); glDisable( GL_TEXTURE_2D ); }