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 * # This is needed for OSX - the OpenGL.GL.ARB.multitexture functions generate errors if hasattr(os,'uname') and os.uname()[0] == 'Darwin': import multitex glActiveTextureARB = multitex.activetexture glMultiTexCoord2fARB = multitex.texcoord2f startdir = os.getcwd() camera = PerspCamera() camera.moveBackward(25) light = Light() light.position = [1, 3, 2, 0] basetex = Texture2D('basetex.jpg', minFilter=GL_LINEAR_MIPMAP_LINEAR) detailtex = Texture2D('rock.jpg', minFilter=GL_LINEAR_MIPMAP_LINEAR) showTex1 = True showTex2 = True def drawSquare(): Color.White.apply() if showTex1: glActiveTextureARB(GL_TEXTURE0_ARB) basetex.apply() if showTex2: glActiveTextureARB(GL_TEXTURE1_ARB) detailtex.apply() glBegin(GL_QUADS) glTexCoord2f(0, 0) glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0, 0) glVertex3f(-10, -10, 0) glTexCoord2f(1, 0) glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 16, 0) glVertex3f(10, -10, 0) glTexCoord2f(1, 1) glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 16, 16) glVertex3f(10, 10, 0) glTexCoord2f(0, 1) glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0, 16) glVertex3f(-10, 10, 0) glEnd() glActiveTextureARB(GL_TEXTURE1_ARB) detailtex.disable() glActiveTextureARB(GL_TEXTURE0_ARB) basetex.disable() def draw(): Color.X11['DeepSkyBlue'].clear() camera.apply() light.apply() drawSquare() glutSwapBuffers() def keyboard(key, x, y): global cameraVelDist, showTex1, showTex2 if key == chr(27): sys.exit(0) elif key == '.': cameraVelDist += 4 elif key == ',': cameraVelDist += -4 elif key == '1': showTex1 = not showTex1 elif key == '2': showTex2 = not showTex2 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) 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) glInitMultitextureARB() glutMainLoop()