python - 获取对象轴在 Maya 中指向的方向
问题描述
使用 python,我试图确认 Maya 中的给定变换节点的 Y 轴指向上方,Z 轴指向前方,X 轴指向侧面,如下图所示。变换节点可能是未知深度层次结构中另一个变换节点的子节点。
我的第一个想法是使用 xform 旋转枢轴矩阵?我不确定这是否正确或如何解释矩阵值。
解决方案
对于大多数对象,您可以非常简单地获得世界空间中的方向:
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
因此结果中没有歧义,在任何情况下都可能不清楚正确的操作过程。
推荐阅读
- c# - 获取 MS Access 数据库上打开的连接数
- spring-boot - Springboot 2 RSocket 应用程序启动然后立即停止,没有错误消息
- mysql - mySQL LIMIT OFFSET 不适用于更新
- html - HTML 链接文本呈现不佳
- python - 如何使图像中矩形以外的所有区域变白或模糊?
- javascript - 为什么在 Vue.js 中获取图像宽度有时效果很好,但有时却不行?
- java - View类中的onFinishInflate()方法有什么用
- android - 如何使用 viewmodel + livedata 进行单元测试改造 api 调用?
- reactjs - 第一次尝试在 npm install 上创建一个空的 React 组件 node_module
- gitlab - 将 repo 与 gitlab 分叉一起使用