#### Car.cpp ### Car::Car() { init(); } void Car::init() { setupTireDL(); } void Car::draw(float h, float w, float d) { glPushMatrix(); glPushAttrib(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 1.0, 0.0); glScaled(h, w, d); drawTires(); glTranslated(0.0, 0.0, h/2.0); glColor3f(1.0, 0.0, 0.0); glPushMatrix(); glScaled(1.0, 0.5, 0.5); glutSolidCube(1.0); glPopMatrix(); glPopAttrib(); glPopMatrix(); } void Car::drawTires() { glPushMatrix(); glTranslated(-0.5, 0.0, 0.25); glCallList(tireDL); glTranslated(0.0, 0.0, -0.5); glCallList(tireDL); glTranslated(1.0, 0.0, 0.0); glCallList(tireDL); glTranslated(0.0, 0.0, 0.5); glCallList(tireDL); glPopMatrix(); } void Car::setupTireDL() { tireDL = glGenLists(1); glNewList(tireDL, GL_COMPILE); glutSolidCube(0.25); glEndList(); } ### Test.cpp ### DONT WORK Car car; void display() { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); car.draw(3.6, 2.4, 2.4); glFlush(); glutSwapBuffers(); } void init() { ... } int main(int argc, char **argv) { ... glutDisplayFunc(display); init(); glutMainLoop(); return 0; } ### Test.cpp ### WORKS Car* car; void display() { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); car->draw(3.6, 2.4, 2.4); glFlush(); glutSwapBuffers(); } void init() { ... car = new Car(); } int main(int argc, char **argv) { ... glutDisplayFunc(display); init(); glutMainLoop(); return 0; }