Exemple #1
0
    def mesh(self):
        vertices = self.vertices
        _vertices = tuple([v._obj for v in vertices])
        indices = self._obj.face_indices(_vertices)
        tcoords = [self.tcoords.get(v.id) for v in vertices]

        no_normal_verts = [v for v in vertices if v.id not in self.vnormals]
        _vnormals = {}

        for v in no_normal_verts:
            fnormals = [f.normal() for f in v._obj.faces()]
            fnormals = [Vector(*fn).normalize() for fn in fnormals]

            vnormal = Vector()
            for fn in fnormals:
                vnormal = vnormal + fn

            vnormal = vnormal.normalize()

            vnormal = (vnormal.x, vnormal.y, vnormal.z)
            _vnormals[v.id] = vnormal

        normals = []
        for index, v in enumerate(vertices):
            n = self.vnormals.get(v.id) or _vnormals[v.id]
            normals.append(n)
            vertices[index] = v.position
       
        return vertices, indices, normals, tcoords
Exemple #2
0
    def _compute_normal(self, center, vertices):
        
        normals = []
        c = center
        v1 = vertices[0]
        v1 = Vector(v1.x - c.x, v1.y - c.y, v1.z - c.z)

        for v in vertices[1:2]:
            v = Vector(v.x - c.x, v.y - c.y, v.z - c.z)
            n = v1.cross(v)
            normals.append(n.normalize())

        normal = Vector()
        for _n in normals:
            normal =  normal + _n
        
        return normal.normalize()