首页 > 解决方案 > 在 obj 中重新标记人脸

问题描述

假设我已经给出了顶点坐标列表和面列表(这里的面是四边形),其中每个面都指向顶点列表中的索引(如 obj 格式)。一个小例子:

v = np.array([[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], [2, 0, 0], [2, 1, 0]])
f = np.array([[0, 1, 2, 3], [1, 4, 5, 2]])

f 的第一个条目意味着,在逆时针方向上,v 的前四个坐标对应于第一个面。但是可以说我出于某种原因不喜欢这种顶点的排序约定,并且想要一个看起来像这样的面部列表

f = np.array([[0, 1, 4, 3], [1, 2, 5, 4]])

为此,必须重新排序 v 中的顶点,使 v 看起来像这样

v = np.array([[0, 0, 0], [1, 0, 0], [2, 0, 0], [0, 1, 0], [1, 1, 0], [2, 1, 0]])

在这个小例子中,我只需交换 2 <-> 4。这实际上是对顶点的重新标记。

现在,我给出了巨大的列表,并且组合是一个网格结构(Z^2 组合),我想将给定的 f 重新标记为我的约定(我首先沿 x 轴计数)。所以我可以创建这个 f (我知道它是 amxn 网格)并且必须相应地重新排序 v 中的顶点。我怎样才能做到这一点?是否有一个聪明的排序内置函数可以做到这一点?

标签: pythonsortingblenderwavefront

解决方案


推荐阅读