def render(self): p = self.position a = self.material.ambient_rgb d = self.material.diffuse_rgb s = self.material.specular_rgb id = gl.GL_LIGHT0 + self.id gl.glEnable(gl.GL_LIGHTING) gl.glEnable(id) gl.glLightfv(id, gl.GL_POSITION, raw(p[0], p[1], p[2], 1.0)) gl.glLightfv(id, gl.GL_AMBIENT, raw(a[0], a[1], a[2], 1.0)) gl.glLightfv(id, gl.GL_DIFFUSE, raw(d[0], d[1], d[2], 1.0)) gl.glLightfv(id, gl.GL_SPECULAR, raw(s[0], s[1], s[2], 1.0))
def chain(self): gl.glPushMatrix() p = self.position r = self.rotation gl.glMultMatrixf( raw( r[0][0], r[1][0], r[2][0], 0.0, r[0][1], r[1][1], r[2][1], 0.0, r[0][2], r[1][2], r[2][2], 0.0, p[0], p[1], p[2], 1.0, ) ) self.material.apply() self.render() self.material.unapply() for c in self.children: c.chain() gl.glPopMatrix()
def apply(self): gl.glEnable(gl.GL_LIGHTING) for s in self.shaders: s.bind() for i, t in enumerate(self.textures): gl.glActiveTexture(gl.GL_TEXTURE0 + i) gl.glEnable(gl.GL_TEXTURE_2D) gl.glBindTexture(gl.GL_TEXTURE_2D, t.id) self.parameters["tex[%u]" % i] = i for k in self.parameters.keys(): if type(self.parameters[k]) == type(0): for s in self.shaders: s.uniformi(k, self.parameters[k]) if type(self.parameters[k]) == type(0.0): for s in self.shaders: s.uniformf(k, self.parameters[k]) a = self.ambient_rgb d = self.diffuse_rgb s = self.specular_rgb gl.glMaterialfv(gl.GL_FRONT_AND_BACK, gl.GL_AMBIENT, raw(a[0], a[1], a[2], 1.0)) gl.glMaterialfv(gl.GL_FRONT_AND_BACK, gl.GL_DIFFUSE, raw(d[0], d[1], d[2], 1.0)) gl.glMaterialfv(gl.GL_FRONT_AND_BACK, gl.GL_SPECULAR, raw(s[0], s[1], s[2], 1.0)) gl.glMaterialf(gl.GL_FRONT_AND_BACK, gl.GL_SHININESS, self.shininess)