import sys, time, math, os from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * from dmsgl import * dir = os.getcwd() + os.sep + 'falls' + os.sep camera = PerspCamera() camera.moveBackward(5) images = [] currentImage = 0 tex = Texture2D(dir + '000.jpg') for i in range(0,80): img = Image.open(dir + '%03d.jpg' % i).transpose(Image.FLIP_TOP_BOTTOM).convert('RGBA') images.append({"x":img.size[0], "y":img.size[1], "data":img.tostring()}) def draw(): Color.X11['DeepSkyBlue'].clear() camera.apply() tex.apply() imgd = images[currentImage] glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, imgd['x'], imgd['y'], 0, GL_RGBA, GL_UNSIGNED_BYTE, imgd['data']) Color.White.apply() glBegin(GL_QUADS) glTexCoord2f(0, 0) glVertex2f(-1, -1) glTexCoord2f(1, 0) glVertex2f(1, -1) glTexCoord2f(1, 1) glVertex2f(1, 1) glTexCoord2f(0, 1) glVertex2f(-1, 1) glEnd() tex.disable() 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, currentImage global prevTime t = time.time() dt = t - prevTime prevTime = t camera.pitch(cameraVelX * dt) camera.turn(cameraVelY * dt) currentImage = int(t*15) % len(images) 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) glutMainLoop()