def _compile(self): """Compile the Sphere into a data.DisplayList""" self.display_list.begin() verts = [] texcs = [] norms = [] space = self.detail for b in xrange(0, 180, space): b *= 1.0 for a in xrange(0, 360, space): a *= 1.0 _v = [] _t = [] for i in xrange(2): for j in xrange(2): s1 = space * i s2 = space * j x = math.sin( math3d.safe_div(a + s1, 180) * math.pi) * math.sin( math3d.safe_div(b + s2, 180) * math.pi) z = math.cos( math3d.safe_div(a + s1, 180) * math.pi) * math.sin( math3d.safe_div(b + s2, 180) * math.pi) y = math.cos(math3d.safe_div(b + s2, 180) * math.pi) u = math3d.safe_div(a + s1, 360) v = math3d.safe_div(b + s2, 360) _v.append((x, y, z)) _t.append((u, 1 - v * 2)) verts.extend([_v[0], _v[1], _v[3], _v[0], _v[3], _v[2]]) texcs.extend([_t[0], _t[1], _t[3], _t[0], _t[3], _t[2]]) norms.extend([math3d.calcTriNormal(*verts[-6:-3])] * 3) norms.extend([math3d.calcTriNormal(*verts[-3::])] * 3) if self.show_inside: verts.extend(reversed(verts[-6::])) texcs.extend(reversed(texcs[-6::])) norms.extend([math3d.calcTriNormal(*verts[-6:-3])] * 3) norms.extend([math3d.calcTriNormal(*verts[-3::])] * 3) glBegin(GL_TRIANGLES) for i in xrange(len(verts)): u, v = texcs[i] glTexCoord2f(u, v) glNormal3f(*norms[i]) x, y, z = verts[i] glVertex3f(x, y, z) glEnd() self.display_list.end()
def _compile(self): """Compile the cube's rendering into a data.DisplayList""" self.display_list.begin() top = (0,0.5,0) bottom = (0,-0.5,0) midleft = (-math.sqrt(3)*0.25,0,0.25) midright = (math.sqrt(3)*0.25,0,0.25) midback = (0,0,-0.5) tpoints = [[top, midleft, midright], [top, midright, midback], [top, midback, midleft], [bottom,midright,midleft], [bottom,midleft,midback], [bottom,midback,midright]] ttp = [] if not "topfront" in self.hide_faces: ttp.append(tpoints[0]) if not "topright" in self.hide_faces: ttp.append(tpoints[1]) if not "topleft" in self.hide_faces: ttp.append(tpoints[2]) if not "bottomfront" in self.hide_faces: ttp.append(tpoints[3]) if not "bottomright" in self.hide_faces: ttp.append(tpoints[4]) if not "bottomleft" in self.hide_faces: ttp.append(tpoints[5]) glBegin(GL_TRIANGLES) for i in ttp: coords = ((0.5,1), (0,0), (1,0)) glNormal3f(*math3d.calcTriNormal(i[0],i[1],i[2],False)) for p in xrange(3): glTexCoord2fv(coords[p]) glVertex3f(*i[p]) glEnd() self.display_list.end()
def _compile(self, fix_order): if not self.verts: return self.display_list.begin() norms = [] if fix_order and test_clockwise3d(self.verts): new = list(self.verts) new.reverse() self.verts = new new = list(self.texcs) new.reverse() self.texcs = new n = 0 while len(self.verts) % 3: self.verts.append(self.verts[n]) self.texcs.append(self.texcs[n]) n += 1 for i in xrange(0, len(self.verts), 3): norms.append(math3d.calcTriNormal(self.verts[i], self.verts[i+1], self.verts[i+2])) glBegin(self.usage) if norms: for i in xrange(len(norms)): x = i * 3 glNormal3f(*norms[i]) for j in xrange(x, x+3): glTexCoord2f(*self.texcs[j]) glVertex3f(*self.verts[j]) else: for i in xrange(len(self.verts)): glTexCoord2f(*self.texcs[i]) glVertex3f(*self.verts[i]) glEnd() self.display_list.end()
def _compile(self, fix_order): if not self.verts: return self.display_list.begin() norms = [] if fix_order and test_clockwise3d(self.verts): new = list(self.verts) new.reverse() self.verts = new new = list(self.texcs) new.reverse() self.texcs = new n = 0 while len(self.verts) % 3: self.verts.append(self.verts[n]) self.texcs.append(self.texcs[n]) n += 1 for i in xrange(0, len(self.verts), 3): norms.append( math3d.calcTriNormal(self.verts[i], self.verts[i + 1], self.verts[i + 2])) glBegin(self.usage) if norms: for i in xrange(len(norms)): x = i * 3 glNormal3f(*norms[i]) for j in xrange(x, x + 3): glTexCoord2f(*self.texcs[j]) glVertex3f(*self.verts[j]) else: for i in xrange(len(self.verts)): glTexCoord2f(*self.texcs[i]) glVertex3f(*self.verts[i]) glEnd() self.display_list.end()