import sys, time, math from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * from dmsgl import * camera = PerspCamera() camera.moveBackward(5) light = Light() material = Material(diffuse=Color.Magenta) tex = Texture2D('earth.jpg') cow = WFObject('cow.obj') coneXform = SimpleTransform(translate=[0, 2, 0], rotateAngle=-90) earthXform = SimpleTransform(translate=[5,0,0]) cowXform = SimpleTransform(translate=[-2,1,0], scale=[0.2,0.2,0.2]) def draw(): Color.X11['DeepSkyBlue'].clear() camera.apply() Color.Black.apply() drawStrokeString('Test', [-1, -2, 1]) Color.Red.apply() drawAxes() light.apply() material.apply() coneXform.pushApply() glutSolidCone(1.0, 1.5, 16, 4) coneXform.pop() tex.apply() earthXform.pushApply() gluSphere(quadric, 2.0, 32, 16) earthXform.pop() tex.disable() material.disable() glEnable(GL_NORMALIZE) glEnable(GL_LIGHTING) cowXform.pushApply() cow.draw() cowXform.pop() glutSwapBuffers() def keyboard(key, x, y): global viewDistance if key == chr(27): sys.exit(0) elif key == '.': camera.moveForward(1) elif key == ',': camera.moveBackward(1) def specialkey(key,x,y): global cameraVelX, cameraVelY if key == GLUT_KEY_LEFT: cameraVelY += 90 elif key == GLUT_KEY_RIGHT: cameraVelY -= 90 elif key == GLUT_KEY_UP: cameraVelX += 90 elif key == GLUT_KEY_DOWN: cameraVelX -= 90 def specialkeyUp(key,x,y): global cameraVelX, cameraVelY if key == GLUT_KEY_LEFT: cameraVelY -= 90 elif key == GLUT_KEY_RIGHT: cameraVelY += 90 elif key == GLUT_KEY_UP: cameraVelX -= 90 elif key == GLUT_KEY_DOWN: cameraVelX += 90 cameraVelX = 0.0 cameraVelY = 0.0 prevTime = time.time() def update(): global viewRotX, viewRotY, cameraVelX, cameraVelY global prevTime t = time.time() dt = t - prevTime prevTime = t camera.pitch(cameraVelX * dt) camera.turn(cameraVelY * dt) coneXform.rotateAngle += dt * 50 glutPostRedisplay() glutInit([]) glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH) glutInitWindowSize(400,400) glutCreateWindow(sys.argv[0]) glutDisplayFunc(draw) glutKeyboardFunc(keyboard) glutSpecialFunc(specialkey) glutSpecialUpFunc(specialkeyUp) glutIgnoreKeyRepeat(1) glutIdleFunc(update) glEnable(GL_DEPTH_TEST) tex.define() quadric = gluNewQuadric() gluQuadricTexture(quadric, GL_TRUE) glutMainLoop()