import sys, time, math, Image from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * from dmsgl import * camera = PerspCamera() camera.moveBackward(20) rotY = 0.0 rotX = 0.0 rotVelX = 0.0 rotVelY = 0.0 prevTime = time.time() treeTex = Texture2D("tree.png") def draw(): glClearColor(0.5, 0.7, 1, 0) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) camera.apply() glRotatef(rotX, 1.0, 0.0, 0.0) glRotatef(rotY, 0.0, 1.0, 0.0) glColor4f(0.1, 1, 0.2, 1) glBegin(GL_QUADS) glVertex3f(-20, -3, -20) glVertex3f(20, -3, -20) glVertex3f(20, -3, 20) glVertex3f(-20, -3, 20) glEnd() glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) for pos in [ [0,-8], [-2,-4], [3,0] ]: glPushMatrix() glTranslatef(pos[0], -3, pos[1]) drawTree() glPopMatrix() glDisable(GL_BLEND) glutSwapBuffers() def drawTree(): treeTex.apply() glColor4f(1,1,1,1) glBegin(GL_QUADS) glTexCoord2f(0,0) glVertex3f(-3, 0, 0) glTexCoord2f(1,0) glVertex3f(3, 0, 0) glTexCoord2f(1,1) glVertex3f(3, 8, 0) glTexCoord2f(0,1) glVertex3f(-3, 8, 0) glEnd() treeTex.disable() def keyboard(key, x, y): if key == chr(27): sys.exit(0) def specialkey(key,x,y): global rotVelX, rotVelY if key == GLUT_KEY_LEFT: rotVelY += 90 elif key == GLUT_KEY_RIGHT: rotVelY -= 90 elif key == GLUT_KEY_UP: rotVelX += 90 elif key == GLUT_KEY_DOWN: rotVelX -= 90 def specialkeyUp(key,x,y): global rotVelX, rotVelY if key == GLUT_KEY_LEFT: rotVelY -= 90 elif key == GLUT_KEY_RIGHT: rotVelY += 90 elif key == GLUT_KEY_UP: rotVelX -= 90 elif key == GLUT_KEY_DOWN: rotVelX += 90 def update(): global rotX, rotY, rotVelX, rotVelY, prevTime t = time.time() dt = t - prevTime prevTime = t rotX += rotVelX * dt rotY += rotVelY * dt glutPostRedisplay() glutInit([]) glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH) glutInitWindowSize(700,700) glutCreateWindow(sys.argv[0]) glutDisplayFunc(draw) glutKeyboardFunc(keyboard) glutSpecialFunc(specialkey) glutSpecialUpFunc(specialkeyUp) glutIgnoreKeyRepeat(1) glutIdleFunc(update) glEnable(GL_DEPTH_TEST) glutMainLoop()