import sys, time, math, os from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * from OpenGL.GL.ARB.multitexture import * from dmsgl import * if hasattr(os,'uname') and os.uname()[0] == 'Darwin': import multitex glActiveTextureARB = multitex.activetexture startdir = os.getcwd() camera = PerspCamera() camera.moveBackward(12) light = Light() light.position = [1, 3, 2, 0] material1 = Material(diffuse=Color.White) xform = SimpleTransform(rotateAxis=[1, -1, 0.1]) rocktex = Texture2D('rock.jpg', minFilter=GL_LINEAR_MIPMAP_LINEAR) reflectionMap = Texture2D('flowers.tif') addTex = False def drawCylinder(): glPushMatrix() xform.apply() glRotatef(-90, 1, 0, 0) glTranslatef(0, 0, -3) gluCylinder(quadric, 1.5, 1.0, 6.0, 16, 1) glPopMatrix() def draw(): Color.X11['DeepSkyBlue'].clear() camera.apply() light.apply() material1.apply() glActiveTextureARB(GL_TEXTURE0_ARB) rocktex.apply() glActiveTextureARB(GL_TEXTURE1_ARB) glEnable(GL_TEXTURE_GEN_S) glEnable(GL_TEXTURE_GEN_T) glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP) glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP) reflectionMap.apply() drawCylinder() glDisable(GL_TEXTURE_GEN_S) glDisable(GL_TEXTURE_GEN_T) reflectionMap.disable() glActiveTextureARB(GL_TEXTURE0_ARB) rocktex.disable() glutSwapBuffers() def keyboard(key, x, y): global cameraVelDist, addTex if key == chr(27): sys.exit(0) elif key == '.': cameraVelDist += 4 elif key == ',': cameraVelDist += -4 elif key == ' ': addTex = not addTex def keyboardUp(key, x, y): global cameraVelDist if key == chr(27): sys.exit(0) elif key == '.': cameraVelDist -= 4 elif key == ',': cameraVelDist -= -4 def specialkey(key,x,y): global cameraVelPitch, cameraVelTurn if key == GLUT_KEY_LEFT: cameraVelTurn += 90 elif key == GLUT_KEY_RIGHT: cameraVelTurn -= 90 elif key == GLUT_KEY_UP: cameraVelPitch += 90 elif key == GLUT_KEY_DOWN: cameraVelPitch -= 90 def specialkeyUp(key,x,y): global cameraVelPitch, cameraVelTurn if key == GLUT_KEY_LEFT: cameraVelTurn -= 90 elif key == GLUT_KEY_RIGHT: cameraVelTurn += 90 elif key == GLUT_KEY_UP: cameraVelPitch -= 90 elif key == GLUT_KEY_DOWN: cameraVelPitch += 90 cameraVelPitch = 0.0 cameraVelTurn = 0.0 cameraVelDist = 0.0 prevTime = time.time() def update(): global cameraVelPitch, cameraVelTurn, cameraVelDist global prevTime t = time.time() dt = t - prevTime prevTime = t camera.pitch(cameraVelPitch * dt) camera.turn(cameraVelTurn * dt) camera.moveForward(cameraVelDist * dt) xform.rotateAngle += dt * 30 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) os.chdir(startdir) glEnable(GL_DEPTH_TEST) quadric = gluNewQuadric() gluQuadricTexture(quadric, GL_TRUE) glInitMultitextureARB() glutMainLoop()