np.ndarray索引场景中,tris = vertices[faces]的实际作用是什么?
关于
tris = vertices[faces]操作的解释 先明确各变量的定义:
vertices是形状为(A,3)的NumPy数组,每个元素对应一个3D顶点的坐标(比如[x,y,z]),A代表模型的顶点总数。faces是形状为(B,3)的NumPy数组,每个元素是三个顶点的索引值,用来定义一个三角形面,B代表模型中三角形面的总数(题目标注B>A,说明多个面会复用同一个顶点)。
tris = vertices[faces]这个索引操作的实际作用是:
- 根据
faces里存储的顶点索引,从vertices中批量取出对应顶点的坐标,重新组织成形状为(B,3,3)的数组。 - 新数组
tris的维度含义清晰:第一维对应B个三角形面,第二维对应每个面的3个顶点,第三维对应每个顶点的3个坐标分量。
举个直观的小例子:
假设vertices有2个顶点:[[0,0,0], [1,1,1]],faces有3个面:[[0,1,0], [1,0,1], [0,0,1]],执行该操作后tris会变成:
[ [[0,0,0], [1,1,1], [0,0,0]], [[1,1,1], [0,0,0], [1,1,1]], [[0,0,0], [0,0,0], [1,1,1]] ]
这样后续计算法线时,就能直接用tris里每个面的完整顶点坐标来计算三角形法向量,无需再单独做索引操作,大幅简化了批量处理的代码逻辑。
内容的提问来源于stack exchange,提问作者K. Zhu
相关产品推荐
相关产品推荐

