import sys, time, math from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * from dmsgl import * from dmssg import * camera = PerspCamera() camera.moveBackward(5) light = Light() material = Material(diffuse=Color.Magenta) material.diffuse[3] = 0.5 tex = Texture2D('earth.jpg', texenv=GL_REPLACE) 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]) fog = Fog(mode=GL_LINEAR,start=0,end=10,color=Color.X11['DeepSkyBlue']) blend = Transparency(blendSource=GL_SRC_ALPHA, blendDest = GL_ONE_MINUS_SRC_ALPHA) coneNode = ObjectNode(name='cone',state=[material,blend]) coneNode.draw = lambda: glutSolidCone(1.0, 1.5, 16, 4) coneXformNode = TransformNode(transform=coneXform) earthNode = ObjectNode(name='earth',state=[material,tex]) earthNode.draw = lambda: gluSphere(quadric, 2.0, 32, 16) earthXformNode = TransformNode(transform=earthXform) cowNode = ObjectNode(name='cow') cowNode.draw = cow.draw cowXformNode = TransformNode(transform=cowXform) axesNode = ObjectNode(name='axes',state=Color.Red) axesNode.draw = drawAxes textNode = ObjectNode(name='text',state=Color.Black) textNode.draw = lambda: drawStrokeString('Test', [-1, -2, 1]) lightNode = LightNode(light=light) root = ObjectNode(name='root',state=fog) root.attach(lightNode) root.attach(axesNode) root.attach(textNode) root.attach(coneXformNode) coneXformNode.attach(coneNode) coneXformNode.attach(earthXformNode) earthXformNode.attach(earthNode) cowXformNode.attach(cowNode) root.attach(cowXformNode) def draw(): Color.X11['DeepSkyBlue'].clear() camera.apply() glEnable(GL_NORMALIZE) root.drawAll() glutSwapBuffers() def keyboard(key, x, y): global cameraVelFB if key == chr(27): sys.exit(0) elif key == '.': cameraVelFB += 3 elif key == ',': cameraVelFB -= 3 def keyboardUp(key, x, y): global cameraVelFB if key == chr(27): sys.exit(0) elif key == '.': cameraVelFB -= 3 elif key == ',': cameraVelFB += 3 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 cameraVelFB = 0.0 prevTime = time.time() def update(): global viewRotX, viewRotY, cameraVelX, cameraVelY, cameraVelFB global prevTime t = time.time() dt = t - prevTime prevTime = t camera.pitch(cameraVelX * dt) camera.turn(cameraVelY * dt) camera.moveForward(cameraVelFB * 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) glutKeyboardUpFunc(keyboardUp) glutSpecialFunc(specialkey) glutSpecialUpFunc(specialkeyUp) glutIgnoreKeyRepeat(1) glutIdleFunc(update) glEnable(GL_DEPTH_TEST) quadric = gluNewQuadric() gluQuadricTexture(quadric, GL_TRUE) glutMainLoop()