在Maya 2017中使用PyMel求矩阵逆时遭遇AttributeError错误
解决PyMel矩阵求逆的AttributeError问题
嘿,我刚看到你在尝试用PyMel的pymel.core.datatypes获取矩阵逆时碰到了这个报错:
Error: line 1: AttributeError: file S:\Maya_2017_DI\build\Release\runTime\Python\Lib\site-packages\maya\OpenMaya.py line 54: asMatrixInverse #
这其实是因为你用错了方法——PyMel封装的Matrix对象并没有asMatrixInverse这个方法,这个方法属于OpenMaya原生API里的MMatrix类,直接调用自然会触发属性错误。
最简洁的正确解法
在PyMel中,求矩阵逆直接调用Matrix对象的inverse()方法就搞定了,举个例子:
import pymel.core.datatypes as dt # 创建一个测试用的变换矩阵 test_matrix = dt.Matrix([1,0,0,0, 0,1,0,0, 0,0,1,0, 3,6,9,1]) # 获取逆矩阵 inv_matrix = test_matrix.inverse() print(inv_matrix)
如果你非要用OpenMaya的方法(不推荐)
要是你习惯用OpenMaya的原生方法,得先把PyMel矩阵转换成MMatrix类型,调用asMatrixInverse后再转回来,步骤会麻烦一点:
import pymel.core.datatypes as dt import maya.OpenMaya as om test_matrix = dt.Matrix([1,0,0,0, 0,1,0,0, 0,0,1,0, 3,6,9,1]) # 转成OpenMaya的MMatrix om_mat = om.MMatrix(test_matrix) # 调用原生方法求逆 om_inv_mat = om_mat.asMatrixInverse() # 转回PyMel Matrix对象 pm_inv_mat = dt.Matrix(om_inv_mat) print(pm_inv_mat)
验证结果是否正确
你可以通过矩阵相乘来验证:原矩阵和它的逆矩阵相乘应该得到单位矩阵,用这个代码检查:
identity_mat = test_matrix * inv_matrix print(identity_mat.isIdentity()) # 正常会输出True
内容的提问来源于stack exchange,提问作者Hamaro
相关产品推荐
相关产品推荐

