import sys, math from pyglet.gl import * window = pyglet.window.Window() glEnable(GL_DEPTH_TEST) glEnable(GL_LIGHTING) glEnable(GL_LIGHT0) cameraDist = 15 cameraXrot = 0 cameraYrot = 0 @window.event def on_draw(): global cameraDist, cameraXrot, cameraYrot glClearColor(0, 0.3, 0.5, 0) 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) glLightfv(GL_LIGHT0, GL_POSITION, (GLfloat*4)(*[-1, 0, 1, 0])) glMaterialfv(GL_FRONT, GL_DIFFUSE, (GLfloat*4)(*[1, 0.7, 0, 1])) glMaterialfv(GL_FRONT, GL_SPECULAR, (GLfloat*4)(*[1, 1, 1, 1])) glMaterialf(GL_FRONT, GL_SHININESS, 80) glShadeModel(GL_FLAT) drawRing() def drawRing(): glBegin(GL_TRIANGLE_STRIP) for theta in range(0,370,10): x = 5 * math.sin(theta * math.pi/180.0) z = 5 * math.cos(theta * math.pi/180.0) nx = math.sin(theta*math.pi/180.0) nz = math.cos(theta*math.pi/180.0) glNormal3f(nx, 0, nz) glVertex3f(x, -1, z) glVertex3f(x, 1, z) glEnd() @window.event def on_key_press(key, modifiers): global cameraDist global cameraXrot, cameraYrot if key == pyglet.window.key.PERIOD: cameraDist = cameraDist - 1 elif key == pyglet.window.key.COMMA: cameraDist = cameraDist + 1 elif key == pyglet.window.key.LEFT: cameraYrot = cameraYrot - 3 elif key == pyglet.window.key.RIGHT: cameraYrot = cameraYrot + 3 elif key == pyglet.window.key.UP: cameraXrot = cameraXrot - 3 elif key == pyglet.window.key.DOWN: cameraXrot = cameraXrot + 3 pyglet.app.run()