import sys, math, time, random from OpenGL.GLUT import * from OpenGL.GL import * from OpenGL.GLU import * class frameRateClock: def __init__(self): self.frameCount = 0 self.startTime = time.time() self.fps = 0 self.framesToCount = 50 def update(self): t = time.time() self.frameCount = self.frameCount + 1 if self.frameCount == self.framesToCount: self.fps = float(self.framesToCount) / (t - self.startTime) self.startTime = t self.frameCount = 0 fpsclock = frameRateClock() numTriangles = 1000 def draw(): glClear(GL_COLOR_BUFFER_BIT) glViewport(0, 40, glutGet(GLUT_WINDOW_WIDTH), glutGet(GLUT_WINDOW_HEIGHT)-40) glBegin(GL_TRIANGLES) for i in range(0,numTriangles): glColor3f(random.random(), random.random(), random.random()) glVertex2f(random.uniform(-1,1), random.uniform(-1,1)) glVertex2f(random.uniform(-1,1), random.uniform(-1,1)) glVertex2f(random.uniform(-1,1), random.uniform(-1,1)) glEnd() glViewport(0, 0, glutGet(GLUT_WINDOW_WIDTH), 40) glColor3f(1,1,1) glRasterPos2f(-0.95, -0.95) drawBitmapString('%d triangles, %.2f fps' % (numTriangles, fpsclock.fps)) glutSwapBuffers() fpsclock.update() def drawBitmapString(text, font=GLUT_BITMAP_TIMES_ROMAN_24): for c in text: glutBitmapCharacter(font, ord(c)) def keyboard(key, x, y): global numTriangles if key == chr(27): sys.exit(0) elif key == '=': numTriangles += 1000 elif key == '-': if numTriangles > 1000: numTriangles -= 1000 def idle(): glutPostRedisplay() glutInit([]) glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB) glutInitWindowSize(500,500) glutInitWindowPosition(0,0) glutCreateWindow(sys.argv[0]) glutDisplayFunc(draw) glutKeyboardFunc(keyboard) glutIdleFunc(idle) glutMainLoop()