Jay*_*esh 4 algorithm graphics normals gouraud
我们有一组三角形。每个三角形都是三个点。每个点都是实数的三元组。我们可以计算每个三角形的表面法线。然而,对于 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]])
Run Code Online (Sandbox Code Playgroud)
有更有效的方法吗?