import sys, time, math from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * startTime = time.time() def drawWorld(): glEnable(GL_LIGHTING) # draw ground glBegin(GL_QUADS) glNormal3f(0, 1, 0) glVertex3f(-10, -5, 10) glVertex3f(10, -5, 10) glVertex3f(10, -5, -10) glVertex3f(-10, -5, -10) glEnd() # draw near cone glPushMatrix() glTranslatef(0, -4, 0) glRotatef(-90, 1, 0, 0) glutWireCone(1.0, 8.0, 8, 2) glPopMatrix() # draw moving cube glPushMatrix() glTranslatef(-3, -4, 50*math.sin(time.time())-45) glRotatef(-90, 1, 0, 0) glutWireCube(2.0) glPopMatrix() # draw moving sphere glPushMatrix() glRotatef((time.time() - startTime)*45, 0, 1, 0) glTranslatef(4, 2, 0) glutWireSphere(1.0, 16, 8) glPopMatrix() def draw(): glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(50.0, 1.0, 1.0, 1000.0) glMatrixMode(GL_MODELVIEW) # Left eye glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_FALSE) glLoadIdentity() glTranslatef(-0.2, 0.0, -15.0) drawWorld() # Right eye glClear(GL_DEPTH_BUFFER_BIT) glColorMask(GL_FALSE, GL_TRUE, GL_TRUE, GL_FALSE) glLoadIdentity() glTranslatef(0.2, 0.0, -15.0) drawWorld() glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE) glutSwapBuffers() def keyboard(key, x, y): if key == chr(27): sys.exit(0) glutInit([]) glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH) glutInitWindowSize(700,700) glutCreateWindow(sys.argv[0]) glutDisplayFunc(draw) glutKeyboardFunc(keyboard) glutIdleFunc(glutPostRedisplay) glEnable(GL_DEPTH_TEST) glEnable(GL_LIGHTING) glEnable(GL_LIGHT0) glLightfv(GL_LIGHT0, GL_POSITION, [0.5, 1, 1, 0]) glLightfv(GL_LIGHT0, GL_AMBIENT, [0.1, 0.1, 0.1, 1]) glMaterialfv(GL_FRONT, GL_AMBIENT, [1, 1, 1, 1]) glLineWidth(2) glutMainLoop()