import sys, math from OpenGL.GLUT import * from OpenGL.GL import * from OpenGL.GLU import * cameraDist = 10 cameraXrot = 0 cameraYrot = 0 def draw(): global cameraDist, cameraXrot, cameraYrot glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(60, 1, 0.1, 1000) glMatrixMode(GL_MODELVIEW) glLoadIdentity() glTranslatef(0, 0, -cameraDist) glRotatef(-cameraXrot, 1, 0, 0) glRotatef(-cameraYrot, 0, 1, 0) drawTriangle(triangle1) drawTriangle(triangle2) glutSwapBuffers() point0 = { "color":[1, 1, 0], "vertex":[0, 0, 0] } point1 = { "color":[0, 1, 0], "vertex":[3, 0, 0] } point2 = { "color":[0.2, 0, 0.4], "vertex":[2, 4, -1] } triangle1 = [ point0, point1, point2 ] triangle2 = [ { "color":[1, 0, 0], "vertex":[-2, -2, 0] }, { "color":[1, 0, 0], "vertex":[0, -3, 0] }, { "color":[1, 0, 0], "vertex":[0, 0, 0] }, { "color":[0, 1, 0], "vertex":[-2, -2, 0] }, { "color":[0, 1, 0], "vertex":[0, -3, 0] }, { "color":[1, 0, 1], "vertex":[-2, -3, 2] } ] def drawTriangle(tri): glBegin(GL_TRIANGLES) for t in tri: glColor3fv(t["color"]) glVertex3fv(t["vertex"]) glEnd() def keyboard(key, x, y): global cameraDist if key == chr(27): sys.exit(0) elif key == '.': cameraDist = cameraDist - 1 elif key == ',': cameraDist = cameraDist + 1 glutPostRedisplay() def specialkey(key,x,y): global cameraXrot, cameraYrot if key == GLUT_KEY_LEFT: cameraYrot = cameraYrot - 3 elif key == GLUT_KEY_RIGHT: cameraYrot = cameraYrot + 3 elif key == GLUT_KEY_UP: cameraXrot = cameraXrot - 3 elif key == GLUT_KEY_DOWN: cameraXrot = cameraXrot + 3 glutPostRedisplay() glutInit(sys.argv) glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) glutInitWindowSize(400, 400) glutInitWindowPosition(0,0) glutCreateWindow(sys.argv[0]) glutDisplayFunc(draw) glutKeyboardFunc(keyboard) glutSpecialFunc(specialkey) glEnable(GL_DEPTH_TEST) glutMainLoop()