from OpenGL.GL import * class Light: nextLightNum = 0 def __init__(self): if Light.nextLightNum < GL_MAX_LIGHTS: self.lightNumber = GL_LIGHT0 + Light.nextLightNum Light.nextLightNum += 1 else: print "Warning: Maximum number of lights (", GL_MAX_LIGHTS, ") exceeded" self.lightNumber = GL_LIGHT0 + GL_MAX_LIGHTS - 1 self.ambient = [0, 0, 0, 1] self.diffuse = [1, 1, 1, 1] self.specular = [1, 1, 1, 1] self.position = [0, 0, 1, 0] self.attenuation = [1, 0, 0] self.spotDirection = [0, 0, -1] self.spotCutoff = 180 self.spotExponent = 0 def apply(self): glEnable(self.lightNumber) glLightfv(self.lightNumber, GL_POSITION, self.position) glLightfv(self.lightNumber, GL_AMBIENT, self.ambient) glLightfv(self.lightNumber, GL_DIFFUSE, self.diffuse) glLightfv(self.lightNumber, GL_SPECULAR, self.specular) glLightf(self.lightNumber, GL_CONSTANT_ATTENUATION, self.attenuation[0]) glLightf(self.lightNumber, GL_LINEAR_ATTENUATION, self.attenuation[1]) glLightf(self.lightNumber, GL_QUADRATIC_ATTENUATION, self.attenuation[2]) glLightf(self.lightNumber, GL_SPOT_CUTOFF, self.spotCutoff) if self.spotCutoff < 180: glLightfv(self.lightNumber, GL_SPOT_DIRECTION, self.spotDirection.vec) glLightf(self.lightNumber, GL_SPOT_EXPONENT, self.spotExponent) def enable(self): glEnable(self.lightNumber) def disable(self): glDisable(self.lightNumber)