#include #include // function prototypes void display(void); void reshape(int width, int height); void keyboard(unsigned char key, int x, int y); void init(void); class golfClub { public: initializeGraphics(); draw(); golfClub(); // add your own ~golfClub(); // add to private: int hClub; // handle to the club call list GLUquadricObj* theClub; // club GLUquadricObj* theHead; // head of the golf club }; golfClub::initializeGraphics() { // create the club theClub= gluNewQuadric(); // create the head theHead= gluNewQuadric(); // initialize the club list // draw the club hClub = glGenLists(1); glNewList(hClub, GL_COMPILE); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, hTexture); glColor3f(1.0f,1.0f,1.0f); glPushMatrix(); glTranslatef(1.0f, 4.0f, 0.0f); glRotatef(10.0f,0.0f,0.0f,1.0f); glTranslatef(0.0f,50.0f,0.0f); glRotatef(90.0f,1.0f,0.0f,0.0f); gluCylinder(theClub, 2.0, 1.0, 49.5, 16, 32); glPopMatrix(); // draw the head glPushMatrix(); // draw back face glPushMatrix(); glTranslatef(0.0f, 0.0f, 1.0f); glBegin(GL_QUAD_STRIP); glColor3f(.9f,.9f,.9f); glVertex3f(1.0f, 5.0f, 0.0f); glVertex3f(9.0f, 5.0f, 0.0f); glVertex3f(0.0f, 4.0f, 0.0f); glVertex3f(10.0f, 4.0f, 0.0f); glColor3f(.4f, .4f, .4f); glVertex3f(1.0f, 0.0f, -0.5f); glVertex3f(9.0f, 0.0f, -0.5f); glEnd(); glPopMatrix(); // draw front face glPushMatrix(); glTranslatef(0.0f, 0.0f, -1.0f); glBegin(GL_QUAD_STRIP); glColor3f(.9f,.9f,.9f); glVertex3f(1.0f, 5.0f, 0.0f); glVertex3f(9.0f, 5.0f, 0.0f); glVertex3f(0.0f, 4.0f, 0.0f); glVertex3f(10.0f, 4.0f, 0.0f); glColor3f(.5f, .5f, .5f); glVertex3f(1.0f, 0.0f, 0.1f); glVertex3f(9.0f, 0.0f, 0.1f); glEnd(); glPopMatrix(); // draw sides glBegin(GL_QUAD_STRIP); glColor3f(0.8f, 0.8f, 0.8f); glVertex3f(1.0f, 5.0f, -1.0f); glVertex3f(1.0f, 5.0f, 1.0f); glVertex3f(9.0f, 5.0f, -1.0f); glVertex3f(9.0f, 5.0f, 1.0f); glColor3f(0.9f, 0.9f, 0.9f); glVertex3f(10.0f, 4.0f, -1.0f); glVertex3f(10.0f, 4.0f, 1.0f); glColor3f(0.3f, 0.3f, 0.3f); glVertex3f(9.0f, 0.0f, -0.9f); glVertex3f(9.0f, 0.0f, 0.50f); glVertex3f(1.0f, 0.0f, -0.9f); glVertex3f(1.0f, 0.0f, 0.5f); glColor3f(0.9f, 0.9f, 0.9f); glVertex3f(0.0f, 4.0f, -1.0f); glVertex3f(0.0f, 4.0f, 1.0f); glColor3f(0.8f, 0.8f, 0.8f); glVertex3f(1.0f, 5.0f, -1.0f); glVertex3f(1.0f, 5.0f, 1.0f); glEnd(); glPopMatrix(); glEndList(); } golfClub::golfClub() { } golfClub::~golfClub() { gluDeleteQuadric(theClub); glDeleteLists(1,hClub); } golfClub::draw() { glCallList(hClub); } golfClub theClub; int main(int argc, char **argv) { // set up window glutInitWindowSize(400, 400); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutCreateWindow("Test Harness"); // register callback functions glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); // initalize opengl parameters init(); // loop until something happens glutMainLoop(); return 0; } void init() { // initialize viewing system glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0, 1.0, 1.0, 3.0); glMatrixMode(GL_MODELVIEW); // initialize background color to black glClearColor(0.0,0.0,0.0,0.0); // enable depth buffering glEnable(GL_DEPTH_TEST); // initialize graphics theClub.initializeGraphics(); } void reshape(int width, int height) { glViewport(0,0,width,height); } void display() { // initialize modelview matrix glLoadIdentity(); gluLookAt(0.0,0.0,2.0,0.0,0.0,0.0,0.0,1.0,0.0); glTranslatef(0.0f,-0.5f,0.0f); // translate the world down so we aren't // looking at the triangle edge-on // clear buffers glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); theClub.draw(); } void keyboard(unsigned char key, int x, int y) { }