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 + 'fire' + os.sep camera = PerspCamera() camera.moveBackward(5) light = Light() material = Material(diffuse=Color.Blue) textures = [] currentTexture = 0 for i in range(0,84): tex = Texture2D(dir + 'woodfire%02d.tif' % i) print 'loaded', tex.file textures.append(tex) def draw(): Color.X11['DeepSkyBlue'].clear() camera.apply() light.apply() material.apply() glutSolidTeapot(1.0) material.disable() textures[currentTexture].apply() glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) Color.White.apply() glBegin(GL_QUADS) glTexCoord2f(0, 0) glVertex2f(-1, 0.5) glTexCoord2f(1, 0) glVertex2f(1, 0.5) glTexCoord2f(1, 1) glVertex2f(1, 2.5) glTexCoord2f(0, 1) glVertex2f(-1, 2.5) glEnd() tex.disable() glDisable(GL_BLEND) 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, currentTexture global prevTime t = time.time() dt = t - prevTime prevTime = t camera.pitch(cameraVelX * dt) camera.turn(cameraVelY * dt) currentTexture = int(t * 20) % len(textures) 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()