import sys from OpenGL.GLUT import * from OpenGL.GL import * from OpenGL.GLU import * cameraPos = [0, 0, 0] upX = 0 def draw(): glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(60, 1, 0.1, 1000) glMatrixMode(GL_MODELVIEW) global cameraPos, upX glLoadIdentity() gluLookAt(cameraPos[0], cameraPos[1], cameraPos[2], 0, 0, 0, upX, 1, 0) print cameraPos drawObjects() glutSwapBuffers() def drawObjects(): global cameraPos glColor3f(0, 0.5, 0) glBegin(GL_QUADS) glVertex3f(-100, -3, -100) glVertex3f(100, -3, -100) glVertex3f(100, -3, 100) glVertex3f(-100, -3, 100) glEnd() glColor3f(0, 0, 1) glPushMatrix() glRotatef(-90, 1, 0, 0) glutWireCone(1, 5, 8, 1) glPopMatrix() glColor3f(0.8, 0, 0.3) glPushMatrix() glTranslatef(-10, -3, -20) glRotatef(-90, 1, 0, 0) glutWireCone(1, 5, 8, 1) glPopMatrix() glColor3f(0.5, 0.3, 0.7) glPushMatrix() glTranslatef(10, -3, -10) glRotatef(-90, 1, 0, 0) glutWireCone(1, 5, 8, 1) glPopMatrix() def drawOverview(): glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glMatrixMode(GL_PROJECTION) glLoadIdentity() glOrtho(-20, 20, -20, 20, -10, 10) glMatrixMode(GL_MODELVIEW) global cameraPos, upX glLoadIdentity() glRotatef(90, 1, 0, 0) drawObjects() glBegin(GL_LINES) glColor3f(1, 1, 1) glVertex3fv(cameraPos) glColor3f(1, 1, 0) glVertex3fv([0,0,0]) glEnd() glutSwapBuffers() def keyboard(key, x, y): global upX if key == chr(27): sys.exit(0) elif key == ',': upX = upX - 0.1 elif key == '.': upX = upX + 0.1 postRedisplay() def specialKey(key, x, y): global cameraPos if key == GLUT_KEY_LEFT: cameraPos[0] = cameraPos[0] - 0.5 postRedisplay() elif key == GLUT_KEY_RIGHT: cameraPos[0] = cameraPos[0] + 0.5 postRedisplay() elif key == GLUT_KEY_UP: cameraPos[2] = cameraPos[2] - 0.5 postRedisplay() elif key == GLUT_KEY_DOWN: cameraPos[2] = cameraPos[2] + 0.5 postRedisplay() def postRedisplay(): glutSetWindow(window1) glutPostRedisplay() glutSetWindow(window2) glutPostRedisplay() glutInit(sys.argv) glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) glutInitWindowSize(400, 400) glutInitWindowPosition(0,0) window1 = glutCreateWindow(sys.argv[0]) glutDisplayFunc(draw) glutKeyboardFunc(keyboard) glutSpecialFunc(specialKey) glEnable(GL_DEPTH_TEST) glLineWidth(3) glutInitWindowSize(300, 300) glutInitWindowPosition(400,0) window2 = glutCreateWindow("overview") glutDisplayFunc(drawOverview) glEnable(GL_DEPTH_TEST) glLineWidth(3) glutMainLoop()