import sys, time, math, random from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * from dmsgl import * prevTime = time.time() camera = OrthoCamera(-50,50, 0,100, -100,100) light = Light() light.position = [0, 1, 2] ballMaterial = Material(diffuse=Color.Grey10, specular=Color.White, shininess=20) ballXform = SimpleTransform(translate=[-50, 0, 0]) cannonMaterial = Material(diffuse=Color.Grey50, shininess=40) cannonXform = SimpleTransform(rotateAngle=45,rotateAxis=[0,0,1],translate=[-50, 0, 0]) mountainMaterial = Material(diffuse=Color.Green) mountainXform = SimpleTransform(rotateAngle=-90, rotateAxis=[1,0,0]) targetMaterial = Material(diffuse=Color.X11['brown']) targetXform = SimpleTransform(translate=[40,5,0]) def draw(): Color.X11['LightSkyBlue'].clear() camera.apply() light.apply() ballMaterial.apply() ballXform.pushApply() gluSphere(quadric, 2.0, 32, 16) ballXform.pop() ballMaterial.disable() cannonMaterial.apply() cannonXform.pushApply() glRotatef(90.0, 0.0, 1.0, 0.0) gluCylinder(quadric, 2.5, 2.0, 9.0, 20, 1) cannonXform.pop() cannonMaterial.disable() mountainMaterial.apply() mountainXform.pushApply() gluCylinder(quadric, 25, 1, 60, 10, 1) mountainXform.pop() mountainMaterial.disable() targetMaterial.apply() targetXform.pushApply() glutSolidCube(10) targetXform.pop() targetMaterial.disable() glutSwapBuffers() def keyboard(key, x, y): global viewDistance if key == chr(27): sys.exit(0) elif key == GLUT_KEY_UP: cannonXform.rotateAngle += 1 elif key == GLUT_KEY_DOWN: cannonXform.rotateAngle -= 1 elif key == ' ': fire() def fire(): pass def update(): global prevTime t = time.time() dt = t - prevTime prevTime = t glutPostRedisplay() glutInit([]) glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH) glutInitWindowSize(400,400) glutCreateWindow(sys.argv[0]) glutDisplayFunc(draw) glutKeyboardFunc(keyboard) glutSpecialFunc(keyboard) glutIdleFunc(update) glEnable(GL_DEPTH_TEST) quadric = gluNewQuadric() glutMainLoop()