我有一个问题,我需要选择一个预先选择的面旁边的面。在
这可能很容易做到,但问题是,当我得到一个邻居的脸时,我需要知道它朝向哪个方向。在
所以现在我可以选择与边连接的面,但是我不能从第一个选择的面中获得例如左或右的面。我试过多种方法,但都找不到解决办法。在
我试过了:
pickwall-cmds.pickWalk()
-问题是它的行为无法预测,因为它是从摄影机的角度来行走网格的。
polyInfo-cmds.polyInfo()
-这是一个非常有用的函数,最接近答案。在这种方法中,我尝试从一个面提取边,然后用edgeToFace()
来查看哪些是该面的邻居。这很管用,但解决不了我的问题。更详细地说,当polyInfo
返回共享边的面时,它的返回方式并不是我总能知道edgesList[0]
(例如)是指向左或右的边。因此,如果我在不同的面上使用这个,在每种情况下,得到的面可能朝向不同的方向。
很难有很多从顶点到边再到面等的转换,但同样的问题是我不知道哪条边是顶部还是左侧。
conectedFaces()
方法,我调用选定的面,它返回与第一个面连接的面,但仍然是相同的问题,我不知道哪个面面向哪个方向。
为了清楚起见,我没有使用预先选择的面孔列表并检查它们,但我需要知道这些面孔,而不知道它们的名字或将它们保存在某个地方。有人知道一种选择面孔的方法吗?在
为了详细说明我的问题,我做了一个形象来说明:
正如你从例子中看到的,如果有选择的面,我需要选择任何一个指向的面,但那必须是我要选择的确切的面。其他方法选择所有相邻面,但我需要的方法,我可以说“选择正确”,并将从第一个选择的面选择正确的一个。在
polyListComponentConversion
在上/下/左/右与网格的变换(局部空间)对齐的规则下,这是一个相当一致的解决方案,尽管也可以是世界空间。在
我要做的第一件事是使用网格变换的平均面顶点位置、面法线和世界空间Y轴为每个网格面建立一个面相对坐标系。这涉及到一些向量数学,所以我将使用API来简化这一过程。第一部分将为每个面创建一个坐标系,我们将把它存储到列表中,以便将来查询。见下文。在
这些函数将查找并返回哪个面位于相对于该面特定方向(X和Y)的给定面旁边。它使用点积来查看哪个面更倾向于那个特定的方向。这应该适用于任何数量的面,但它只返回一个面,该面位于该方向的大部分。在
^{pr2}$所以你可以这样称呼它:
数字是脸部索引,你想从中得到“向上”的脸。在
试试这个,看看它是否满足你的需要。在
最简单的方法是在网格面上使用Pymel的connectedFaces():
http://download.autodesk.com/us/maya/2011help/pymel/generated/classes/pymel.core.general/pymel.core.general.MeshFace.html
相关问题 更多 >
编程相关推荐