<p>通常,您需要在API中创建一个MMatrix或MTransformationMatrix,然后将它们串联起来以获得所需的转换。麻烦是从Python中获取值到这些类中,这需要可怕的<a href="http://download.autodesk.com/us/maya/2011help/API/class_m_script_util.html" rel="nofollow noreferrer">MScriptUtil</a></p>
<pre><code>import maya.OpenMaya as OpenMaya
import maya.cds as cmds
def APIMatrix ( valList ): # where vallist is a list of floats
mat = OpenMaya.MMatrix()
OpenMaya.MScriptUtil.createMatrixFromList( valList, mat )
return mat
</code></pre>
<p>例如,将从python编号列表创建MMatrix。在Pymel中,使用<a href="http://download.autodesk.com/us/maya/2011help/PyMel/generated/classes/pymel.core.datatypes/pymel.core.datatypes.Matrix.html" rel="nofollow noreferrer">Matrix</a>类比较容易:</p>
^{pr2}$
<p>将矩阵相乘后,可以使用xform命令应用它们:</p>
<pre><code>cmds.xform(item, m = my_new_matrix)
</code></pre>
<p>或者在皮梅尔:</p>
<pre><code>import pymel.core as pm
pm.xform(item, my_new_pymel_matrix)
</code></pre>
<p>MMatrix是一个原始矩阵-只需要数字来进行数学运算<a href="http://download.autodesk.com/us/maya/2011help/API/class_m_transformation_matrix.html" rel="nofollow noreferrer">MTransformationMatrix</a>更像是对象的实际转换:它提供了一些方法,例如,在不知道哪些矩阵成员需要手动旋转的情况下,将数字插入平移或旋转:</p>
<pre><code>def get_obj_quaternion ( mayaTransform, worldSpace=True ):
'''
gets the rotation quat for the supplied dag node in world or local space
'''
#convert from mMatrix to MTransformationMatrix....
mMatrix = matrix_from_transform( mayaTransform, worldSpace=worldSpace )
mTransformMtx = OpenMaya.MTransformationMatrix( mMatrix )
# MscriptUtil. Sigh
xPtr = OpenMaya.MScriptUtil(0.0)
x = xPtr.asDoublePtr()
yPtr = OpenMaya.MScriptUtil(0.0)
y = yPtr.asDoublePtr()
zPtr = OpenMaya.MScriptUtil(0.0)
z = zPtr.asDoublePtr()
wPtr = OpenMaya.MScriptUtil(0.0)
w = wPtr.asDoublePtr()
mTransformMtx.getRotationQuaternion( x, y, z, w )
# getRotationQuaternion is an MTransformationMatrix method
#convert them back to normal python floats
x = OpenMaya.MScriptUtil().getDouble( x )
y = OpenMaya.MScriptUtil().getDouble( y )
z = OpenMaya.MScriptUtil().getDouble( z )
w = OpenMaya.MScriptUtil().getDouble( w )
return x, y, z, w
</code></pre>
<p>所以在你的情况下,你应该:</p>
<p><strong>1)</strong>获取目标对象的矩阵</p>
<p><strong>2)</strong>获取反射对象的矩阵</p>
<p><strong>3)</strong>制作反射矩阵,例如:</p>
<pre><code> -1 0 0 0
0 1 0 0
0 0 -1 0
0 0 0 1
</code></pre>
<p>反射X轴和Z轴的反射矩阵</p>
<p><strong>4)</strong>将目标反映为:</p>
<pre><code>reflected_matrix = reflectXZMatrix * reflectionObjectMatrix
result = target_matrix * reflected_matrix
cmds.xform( target_object, m = result)
</code></pre>
<p>这是一个只使用mmatrics的最简版本-如果您需要自己构造矩阵,mttransformationmatrix将允许您设置旋转或缩放矩阵,而无需手动管理矩阵中的数字。在</p>