import sys, time, math from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * from random 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(): glClear(GL_ACCUM_BUFFER_BIT) for j in range(-2,3,1): for i in range(-2,3,1): ex = i / 20.0 + uniform(-0.03,0.03) ey = j / 20.0 + uniform(-0.03,0.03) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glMatrixMode(GL_PROJECTION) glLoadIdentity() glFrustum((-7.5-ex)*1/15, (7.5-ex)*1/15, (-7.5-ey)*1/15, (7.5-ey)*1/15, 1, 100) glMatrixMode(GL_MODELVIEW) glLoadIdentity() glTranslatef(-ex, -ey, -15.0) drawWorld() glutSwapBuffers() # glAccum(GL_ACCUM, 1.0/25) # glAccum(GL_RETURN, 1.0) # glutSwapBuffers() def keyboard(key, x, y): if key == chr(27): sys.exit(0) glutInit([]) glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_ACCUM) 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()