1

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

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

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

maya 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)

在尝试提取顶点位于与另一个对象的接缝边界上的对象上的法线时,我注意到了这种差异。法线已在 Maya 中使用Normals > Average Normals菜单Polygons集进行平均。

我知道没有示例对象很困难,但我希望有人以前见过这个问题。

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

4

1 回答 1

2

我认为您的 cmds 调用很幸运。的通常行为polyNormalPerVertex是返回与顶点相关的所有法线——如果它是多个面的一部分,将是同一个问题的多个答案。例如在香草上polyCube

import maya.cmds as cmds cmds.polyNormalPerVertex('pCube1.vtx[0]', q=True, normalXYZ=True) # 结果: [-1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, -1.0, 0.0 ] #

因为vert是三个不同面的一部分。

根据文档,API 调用getVertexNormal将返回平均法线。

如果您在两端都使用 vertexFaces,那么您应该会有更好的运气——这些不那么模棱两可。

于 2017-02-07T00:20:24.723 回答