Esempio n. 1
0
    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()
Esempio n. 2
0
    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()
Esempio n. 3
0
    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()
Esempio n. 4
0
    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()