import sys, random, time from OpenGL.GLUT import * from OpenGL.GL import * from OpenGL.GLU import * class Triangle: def __init__(self): self.pos = [0,0] self.color = [1,1,1] self.radius = .1 self.angle = 0 def draw(self): glColor3fv(self.color) glPushMatrix() glTranslate(self.pos[0], self.pos[1], 0) glRotatef(self.angle, 0, 0, 1) glBegin(GL_TRIANGLES) glVertex2f(-self.radius, -self.radius) glVertex2f(self.radius, -self.radius) glVertex2f(0, self.radius) glEnd() glPopMatrix() def update(self): self.pos[0] += random.uniform(-0.001, 0.001) self.pos[1] += random.uniform(-0.001, 0.001) class Square: def __init__(self): self.pos = [0,0] self.color = [1,1,1] self.radius = .1 self.angle = 0 def draw(self): glColor3fv(self.color) glPushMatrix() glTranslate(self.pos[0], self.pos[1], 0) glRotatef(self.angle, 0, 0, 1) glBegin(GL_QUADS) glVertex2f(-self.radius, -self.radius) glVertex2f(self.radius, -self.radius) glVertex2f(self.radius, self.radius) glVertex2f(-self.radius, self.radius) glEnd() glPopMatrix() def update(self): self.angle += 0.1 t = Triangle() t.pos = [-0.5, 0.2] t.color = [1,0,0] objects = [t, Square()] def draw(): glEnable(GL_DEPTH_TEST) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glLoadIdentity() for o in objects: o.draw() glutSwapBuffers() def keyboard(key, x, y): if key == chr(27): sys.exit(0) elif key == ' ': t = Triangle() t.pos = [random.uniform(-1,1), random.uniform(-1,1)] t.color = [random.uniform(0,1), random.uniform(0,1), random.uniform(0,1)] objects.append(t) elif key == 'a': t = Square() t.pos = [random.uniform(-1,1), random.uniform(-1,1)] t.color = [random.uniform(0,1), random.uniform(0,1), random.uniform(0,1)] objects.append(t) def update(): for o in objects: o.update() glutPostRedisplay() glutInit(sys.argv) glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) glutInitWindowSize(700, 700) glutInitWindowPosition(0,0) glutCreateWindow(sys.argv[0]) glutDisplayFunc(draw) glutKeyboardFunc(keyboard) glutIdleFunc(update) glEnable(GL_DEPTH_TEST) glutMainLoop()