This file contains the two functions in gl_canvas.cc that were modified to make the "car-world" example program. -------------------------------------------------------------------------- void GLCanvas::createWorld() { Model *world = new Model(); // This holds all the objects in the world. xRotate = new Rotate(5,1,0,0); // (Variables defined in gl_canvas.h.) yRotate = new Rotate(0,0,1,0); world->addTransform(xRotate) // The rotations affect the entire world. ->addTransform(yRotate); sunRotate = new Rotate(-60,0,0,1); moonRotate = new Rotate(-240,0,0,1); carRotate = new Rotate(0,0,1,0); Model *sun = new Model(); sun->addObject( (new BasicObject(SPHERE)) ->setEmissiveColor(0.8,0.8,0)); sun->addObject( (new Light(0,0,0,1)) ->setColor(.8,.8,.6) ); sun->addTransform( new Translate(-5,0,0) ); sun->addTransform(sunRotate); Model *moon = new Model(); moon->addObject( (new BasicObject(SPHERE)) ->addTransform(new Scale(0.6)) ->setEmissiveColor(0.5,0.5,0.6)); moon->addObject( (new Light(0,0,0,1)) ->setColor(.3,.3,.4) ); moon->addTransform( new Translate(-5,0,0) ); moon->addTransform(moonRotate); Model *axel = new Model(); axel->setColor(0,0,1); axel->setSpecularColor(0,0,0); axel->addObject( (new BasicObject(CYLINDER)) ->addTransform(new Scale(0.3,6,0.3)) ->addTransform(new Rotate(90,1,0,0)) ); axel->addObject( (new BasicObject(TORUS)) ->addTransform(new Scale(2)) ->addTransform(new Translate(0,0,3)) ); axel->addObject( (new BasicObject(TORUS)) ->addTransform(new Scale(2)) ->addTransform(new Translate(0,0,-3)) ); Model *car = new Model(); car->setSpecularColor(0.2,0.2,0.2); car->addObject( new Model(axel,new Translate(5,0,0)) ); car->addObject( new Model(axel,new Translate(-5,0,0)) ); car->addObject( (new BasicObject(CUBE)) ->setColor(1,0,0) ->addTransform(new Scale(12,2,5)) ->addTransform(new Translate(0,1,0)) ); car->addObject( (new BasicObject(CUBE)) ->setColor(1,0,0) ->addTransform(new Scale(5,2,4.5)) ->addTransform(new Translate(1,2,0)) ); car->addObject( (new BasicObject(SPHERE)) ->setColor(1,1,0) ->addTransform(new Scale(0.2,1,1)) ->addTransform(new Translate(-6,1,-1.7)) ); car->addObject( (new BasicObject(SPHERE)) ->setColor(1,1,0) ->addTransform(new Scale(0.2,1,1)) ->addTransform(new Translate(-6,1,1.7)) ); car->addTransform(new Scale(0.15)) ->addTransform(new Translate(0,0.15,-3)) ->addTransform(carRotate); Model *tree = new Model(); tree->setSpecularColor(0,0,0); tree->addObject( (new BasicObject(CONE)) ->setColor(0.2,0.8,0.3) ->addTransform(new Translate(0,0.5,0)) ->addTransform(new Scale(1,1.5,1)) ); tree->addObject( (new BasicObject(CYLINDER)) ->setColor(0.6,0.5,0.2) ->addTransform(new Scale(0.2,1,0.2)) ); tree->addTransform( new Translate(0,0.5,0) ); Object *ground = (new BasicObject(CYLINDER)) ->setColor(0,0.5,0.2) ->setSpecularColor(0,0,0) ->addTransform( new Scale(8,0.1,8) ) ->addTransform( new Translate(0,-0.05,0) ); world->addObject( sun ); world->addObject( moon ); world->addObject( ground ); world->addObject( car ); world->addObject( tree ); world->addObject( (new Model(tree)) ->addTransform(new Scale(0.7)) ->addTransform(new Translate(1.5,0,1)) ); world->addObject( (new Model(tree)) ->addTransform(new Scale(0.5)) ->addTransform(new Translate(-1.8,0,1.2)) ); world->addObject( (new Model(tree)) ->addTransform(new Scale(0.7)) ->addTransform(new Translate(0.3,0,-2)) ); world->addObject( (new Model(tree)) ->addTransform(new Scale(0.3)) ->addTransform(new Translate(-0.5,0,-1)) ); float ambient[4] = {0.3,0.3,0.3,1}; glLightModelfv(GL_LIGHT_MODEL_AMBIENT,ambient); worldview = new View(world); // Let worldview be a view of the world // that was just created. } ------------------------------------------------------------------------- void GLCanvas::timerEvent(QTimerEvent *evt) { float angle = sunRotate->getAngle(); angle -= 3; if (angle <= 0) angle += 360; sunRotate->setAngle(angle); moonRotate->setAngle(angle+180); updateGL(); angle = carRotate->getAngle(); angle += 5; if (angle > 360) angle -= 360; carRotate->setAngle(angle); }