我们得到一组三角形。每个三角形是三个点。每个点都是实数的三元组。我们可以计算每个三角形的表面法线。然而,对于 Gouraud 着色,我们需要顶点法线。因此我们必须访问每个顶点并查看共享该顶点的三角形,平均它们的表面法线,我们得到顶点法线。
实现这一目标的最有效算法和数据结构是什么?
一个天真的方法是这样的(伪python代码):
MAP = dict()
for T in triangles:
for V in T.vertices:
key = hash(V)
if MAP.has(key):
MAP[key].append(T)
else:
MAP[key] = []
MAP[key].append(T)
VNORMALS = dict()
for key in MAP.keys():
VNORMALS[key] = avg([T.surface_normal for T in MAP[key]])
有没有更有效的方法?