import sys from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * print """Controls: k - enable/disable key light f - enable/disable fill light b - enable/disable back light""" viewRotY = 0 viewRotX = 0 keyLight = True fillLight = False backLight = False def draw(): glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(50.0, 1.0, 1.0, 100.0) glMatrixMode(GL_MODELVIEW) glLoadIdentity() if keyLight: glEnable(GL_LIGHT0) else: glDisable(GL_LIGHT0) if fillLight: glEnable(GL_LIGHT1) else: glDisable(GL_LIGHT1) if backLight: glEnable(GL_LIGHT2) else: glDisable(GL_LIGHT2) glTranslatef(0.0, 0.0, -5.0) glRotatef(viewRotX, 1.0, 0.0, 0.0) glRotatef(viewRotY, 0.0, 1.0, 0.0) glutSolidTeapot(1.0) glutSwapBuffers() def keyboard(key, x, y): global keyLight, fillLight, backLight if key == chr(27): sys.exit(0) elif key == 'k': keyLight = not keyLight elif key == 'f': fillLight = not fillLight elif key == 'b': backLight = not backLight glutPostRedisplay() def specialkey(key,x,y): global viewRotX, viewRotY if key == GLUT_KEY_LEFT: viewRotY = viewRotY + 3 elif key == GLUT_KEY_RIGHT: viewRotY = viewRotY - 3 elif key == GLUT_KEY_UP: viewRotX = viewRotX + 3 elif key == GLUT_KEY_DOWN: viewRotX = viewRotX - 3 glutPostRedisplay() glutInit([]) glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH) glutInitWindowSize(700,700) glutCreateWindow(sys.argv[0]) glutDisplayFunc(draw) glutKeyboardFunc(keyboard) glutSpecialFunc(specialkey) glEnable(GL_DEPTH_TEST) glEnable(GL_LIGHTING) glLightfv(GL_LIGHT0, GL_POSITION, [-1, 0, 1, 0]) glLightfv(GL_LIGHT0, GL_DIFFUSE, [1, 1, 1, 1]) glLightfv(GL_LIGHT1, GL_POSITION, [1, 0, 1, 0]) glLightfv(GL_LIGHT1, GL_DIFFUSE, [0.25, 0.25, 0.0, 1]) glLightfv(GL_LIGHT2, GL_POSITION, [1, 0, -1, 0]) glLightfv(GL_LIGHT2, GL_DIFFUSE, [0.0, 0.25, 0.5, 1]) glLightfv(GL_LIGHT0, GL_AMBIENT, [0, 0, 0, 1]) glLightModelfv(GL_LIGHT_MODEL_AMBIENT, [0, 0, 0, 0]) glutMainLoop()