示例#1
0
def smooth_tris(tris):
    "Compute normals at each vertex from a list of triangles"
    from TupleMath import minus,cross,normalize
    norms = {}
    for pt0,pt1,pt2 in tris:
        n = normalize(cross(minus(pt1,pt0),minus(pt2,pt0)))
        # This is a bad idea, since I'm keying a dictionary on floats!
        addappend(norms,fixkey(pt0),n)
        addappend(norms,fixkey(pt1),n)
        addappend(norms,fixkey(pt2),n)
    newtris = []
    for pt0,pt1,pt2 in tris:
        newtris.append((pt0,average(norms[fixkey(pt0)]),
                        pt1,average(norms[fixkey(pt1)]),
                        pt2,average(norms[fixkey(pt2)])))
    return newtris
示例#2
0
def average(l):
    from TupleMath import normalize,plus
    avg = (0.,0.,0.)
    for xyz in l: avg = plus(avg,xyz)
    return normalize(avg)