【问题标题】:maya api vs python commands: vertex normalsmaya api vs python 命令:顶点法线
【发布时间】:2017-02-06 18:45:22
【问题描述】:

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

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

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

ma​​ya 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 中使用 Polygons 菜单集中的 Normals &gt; Average Normals 进行平均。

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

谁能为这种差异提供一个可能的解释?

【问题讨论】:

    标签: python maya maya-api


    【解决方案1】:

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

    将 maya.cmds 导入为 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] #

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

    getVertexNormal 的API 调用将返回平均法线according to the docs

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

    【讨论】:

    • 好的,谢谢您的回答。但是,即使对 polyNormalPerVertex 的结果进行平均也不等于 getVertexNormal 返回的向量(我已经尝试了所有参数组合)。他们不应该是一样的吗?
    • 如果你选择了正确的权重函数,它们应该是相同的——但是每次你询问时都会重新计算,并且可能会改变,例如,你移动一个顶点的另一侧同一张脸。
    猜你喜欢
    • 1970-01-01
    • 2022-10-08
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多