首页 > 解决方案 > 获取对象轴在 Maya 中指向的方向

问题描述

使用 python,我试图确认 Maya 中的给定变换节点的 Y 轴指向上方,Z 轴指向前方,X 轴指向侧面,如下图所示。变换节点可能是未知深度层次结构中另一个变换节点的子节点。

我的第一个想法是使用 xform 旋转枢轴矩阵?我不确定这是否正确或如何解释矩阵值。

在此处输入图像描述

标签: pythonorientationaxismaya

解决方案


对于大多数对象,您可以非常简单地获得世界空间中的方向:

import maya.cmds as cmds

world_mat = cmds.xform(my_object, q=True, m=True, ws=True)
x_axis = world_mat[0:3]
y_axis = world_mat[4:7]
z_axis = world_mat[8:11]

如果您希望它们采用矢量形式(因此您可以对它们进行标准化或点化),您可以使用 maya api 将它们作为矢量获取。所以例如

import maya.cmds as cmds
import maya.api.OpenMaya as api

my_object = 'pCube1'
world_mat = cmds.xform(my_object, q=True, m=True, ws=True)
x_axis = api.MVector(world_mat[0:3])
y_axis = api.MVector(world_mat[4:7])
z_axis = api.MVector(world_mat[8:11])

# 1 = straight up, 0 = 90 degrees from up, -1 = straight down
y_up = y_axis * api.MVector(0,1,0)

这将包括可能.rotateAxis对对象上的参数进行的任何修改,因此如果被操纵,则不能保证与视觉三脚架对齐。

如果您没有理由期望.rotateAxis已设置,这是最简单的方法。一个好的中间步骤是对非零的对象发出警告,.rotateAxis因此结果中没有歧义,在任何情况下都可能不清楚正确的操作过程。


推荐阅读