根据numpy中的顶点坐标选择网格的面

时间:2018-11-19 14:33:02

标签: python numpy indexing mesh matrix-indexing

我有两个numpy数组,一个用于网格的3D顶点,称为vert,一个用于三角形面,称为faces

vert数组是N x 3的{​​{1}}形状数组,因此有N个三维点。每个点的float坐标可以同时具有正值和负值。 仅作为示例,可以是x数组:

vert

由于网格居中,所以网格的 left 部分是具有正x分量的部分,并且相应的顶点索引可以通过[[ 2.886495 24.886948 15.909558] [ -13.916695 -58.985245 19.655312] [ 40.415527 8.968353 8.515955] ... [ 13.392465 -58.20602 18.752457] [ -12.504704 -58.307934 18.912386] [ 13.322185 -58.52817 19.165733]]

找到
np.where

我现在想过滤出那些完全由i_vert_left = np.where(vert[:,0]>0)[0] 正轴构成的三角形构成的面。

但是我在正确执行此索引操作时遇到了问题。 我的第一个尝试是对这些面进行子集处理,以使其对应的顶点具有x

x>0

但是在大​​型网格物体上,操作速度非常慢。 如何利用人脸的智能索引功能?

1 个答案:

答案 0 :(得分:1)

假设faces是一个Nx3整数数组,索引每个三角形的三个顶点,我认为您只需要:

# Check whether each vertex is left or not
vert_left_mask = vert[:, 0] > 0
# Check whether each face has all vertices on left or not
faces_left_mask = np.all(vert_left_mask[faces], axis=1)
# Select resulting left faces
faces_left = faces[faces_left_mask]

此处的主要“技巧”位于vert_left_mask[faces]中,它用指示布尔值是否存在的布尔值替换每个整数顶点号,因此很容易用{{1}来判断哪张脸完全离开了}。