import sys, time, math from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * from dmsgl import * groundtex = Texture2D("cobblestones.jpg") startTime = time.time() def drawWorld(): # draw ground groundtex.apply() glBegin(GL_QUADS) glNormal3f(0, 1, 0) glTexCoord2f(0,0) glVertex3f(-10, -5, 10) glTexCoord2f(1,0) glVertex3f(10, -5, 10) glTexCoord2f(1,1) glVertex3f(10, -5, -10) glTexCoord2f(0,1) glVertex3f(-10, -5, -10) glEnd() groundtex.disable() # 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(): ex = 0 ey = 0 ez = 15 near = 1 far = 100 for j in range(0,4): for i in range(0,4): SL = -7.5 + i*15.0/4 SR = -7.5 + (i+1)*15.0/4 SB = -7.5 + j*15.0/4 ST = -7.5 + (j+1)*15.0/4 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glMatrixMode(GL_PROJECTION) glLoadIdentity() glFrustum((SL-ex)*near/ez, (SR-ex)*near/ez, (SB-ey)*near/ez, (ST-ey)*near/ez, near, far) glMatrixMode(GL_MODELVIEW) glLoadIdentity() glTranslatef(-ex, -ey, -ez) drawWorld() glutSwapBuffers() data = glReadPixels(0, 0, glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT), GL_RGB, GL_UNSIGNED_BYTE) img = Image.fromstring('RGB', (glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT)), data).transpose(Image.FLIP_TOP_BOTTOM) img.save('screendump%d%d.png' % (j,i)) sys.exit() def keyboard(key, x, y): if key == chr(27): sys.exit(0) glutInit([]) glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH) glutInitWindowSize(512,512) 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()