utils.py 文件源码

python
阅读 19 收藏 0 点赞 0 评论 0

项目:quantized-mesh-tile 作者: loicgasser 项目源码 文件源码
def computeNormals(vertices, faces):
    numVertices = len(vertices)
    numFaces = len(faces)
    normalsPerFace = [None] * numFaces
    areasPerFace = [0.0] * numFaces
    normalsPerVertex = np.zeros(vertices.shape, dtype=vertices.dtype)

    for i in xrange(0, numFaces):
        face = faces[i]
        v0 = vertices[face[0]]
        v1 = vertices[face[1]]
        v2 = vertices[face[2]]
        ctrd = centroid(v0, v1, v2)

        v1A = c3d.subtract(v1, v0)
        v2A = c3d.subtract(v2, v0)
        normalA = np.cross(v1A, v2A)
        viewPointA = c3d.add(ctrd, normalA)

        normalB = np.cross(v2A, v1A)
        viewPointB = c3d.add(ctrd, normalB)

        area = triangleArea(v0, v1)
        areasPerFace[i] = area
        squaredDistanceA = c3d.magnitudeSquared(viewPointA)
        squaredDistanceB = c3d.magnitudeSquared(viewPointB)

        # Always take the furthest point
        if squaredDistanceA > squaredDistanceB:
            normalsPerFace[i] = normalA
        else:
            normalsPerFace[i] = normalB

    for i in xrange(0, numFaces):
        face = faces[i]
        weightedNormal = [c * areasPerFace[i] for c in normalsPerFace[i]]
        for j in face:
            normalsPerVertex[j] = c3d.add(normalsPerVertex[j], weightedNormal)

    for i in xrange(0, numVertices):
        normalsPerVertex[i] = c3d.normalize(normalsPerVertex[i])

    return normalsPerVertex
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号