2017-02-06 55 views
0

我想提取特定顶点的网格对象的顶点法线。我注意到,当使用python API而不是maya python命令时,我得到了不同的结果。maya api vs python命令:顶点法线

Python命令(给我的结果,我想)

cmds.polyNormalPerVertex("<myshapename>.vtx[523]", q=True,normalXYZ=True) 

玛雅的Python API调用(给我一个不同的结果)

# empty selection list 
selectionList = om.MSelectionList() 
selectionList.add(<myshapename>) 

# create empty dag path object 
dagPath = selectionList.getDagPath(0) 

# get mesh 
mesh = om.MFnTransform(dagPath) 

# get vertex normal 
mesh.getVertexNormal(523, False, space=om.MSpace.kWorld) 

我注意到这个差异当试图提取其顶点在与另一个对象的接缝边界上的对象时提取法线。玛雅人的法线使用Polygons菜单集中的Normals > Average Normals进行平均。

我知道这很困难没有一个示例对象,但我希望有人之前已经看到过这个问题。

任何人都可以提供这种差异的可能解释吗?

回答

1

我觉得你刚刚对你的CMDS电话很幸运。对于polyNormalPerVertex通常的行为是返回所有与VERT相关法线的 - 这,如果是多张人脸的一部分,将有多个答案同样的问题。例如在香草polyCube

进口maya.cmds作为CMDS cmds.polyNormalPerVertex( 'pCube1.vtx [0]',Q =真,normalXYZ =真) #结果:[-1.0,0.0,0.0, 0.0,0.0,1.0,0.0,-1.0,0.0]#

由于VERT是三个不同的面的一部分。

的API调用getVertexNormal将返回正常平均值,according to the docs。那些是那么模糊 -

,如果你在两端使用vertexFaces你应该有更好的运气。

+0

好的,谢谢你的回答。然而,即使平均来自'polyNormalPerVertex'的结果也不等于'getVertexNormal'返回的向量(并且我尝试了所有参数组合)。他们不应该一样吗? – user2635364

+0

如果您选择了正确的加权函数,它们应该是相同的 - 但是,如果您在同一面的另一侧移动垂直线,则每次要求时都会重新计算,并且可能会发生变化。 – theodox