Maya Python:应用转换矩阵

时间:2014-07-04 15:37:14

标签: python matrix maya

我一直在寻找答案,但我似乎无法在任何地方找到答案,所以我希望我能在这里得到答案......

我在Maya Python API中,我想将转换矩阵应用于网格。

这就是我制作网格的方式:

    mesh = om.MFnMesh()
    ShapeMesh = cmds.group(em=True)
    parentOwner = get_mobject( ShapeMesh )
    meshMObj = mesh.create(NumVerts, len(FaceCount), VertArray, FaceCount, FaceArray ,parentOwner)
    cmds.sets( ShapeMesh, e=True,forceElement='initialShadingGroup')
    defaultUVSetName = ''
    defaultUVSetName = mesh.currentUVSetName(-1)
    mesh.setUVs ( UArray, VArray, defaultUVSetName )
    mesh.assignUVs ( FaceCount,  FaceArray, defaultUVSetName )

这就是我创建TFM的方式:

m = struct.unpack("<16f",f.read(64))
mm = om.MMatrix()
om.MScriptUtil.createMatrixFromList(m,mm)
mt = om.MTransformationMatrix(mm)

基本上我读了16个浮点数并将它们转换成转换矩阵,但是我不知道如何将mt矩阵应用到我的网格...

我设法从这里获得了位置,旋转和缩放,但这可能有所帮助:

    translate = mt.translation(om.MSpace.kWorld)
    rotate = mt.rotation().asEulerRotation()
    scaleUtil = om.MScriptUtil()
    scaleUtil.createFromList([0,0,0],3)
    scaleVec = scaleUtil.asDoublePtr()
    mt.getScale(scaleVec,om.MSpace.kWorld)
    scale = [om.MScriptUtil.getDoubleArrayItem(scaleVec,i) for i in range(0,3)]

现在我的最后一步是将此矩阵应用于网格,但我找不到一个好方法,有人知道如何在maya上执行此操作吗?

提前致谢: Seyren。

1 个答案:

答案 0 :(得分:1)

通过将矩阵应用于网格物体不确定您的意思,但是如果您想通过使用该矩阵转换它们来更新每个点的位置,那么您可以在这里找到给定的MFnMesh mesh和给定的MMatrix matrix

import banana.maya
banana.maya.patch()
from maya import OpenMaya

mesh = OpenMaya.MFnMesh.bnn_get('pCubeShape1')
matrix = OpenMaya.MMatrix()

points = OpenMaya.MPointArray()
mesh.getPoints(points)
for i in range(points.length()):
    points.set(points[i] * matrix, i)

mesh.setPoints(points)

如果您不想直接更新网格的点,则需要通过检索其父变换并使用MFnTransform::set()方法将矩阵应用于变换节点。

请注意,我已在我的代码段中使用了一组我已编写过的扩展程序,如果您使用的是Maya Python API,这些扩展程序可能会有所帮助。该代码在GitHub上提供,并附带documentation以便您了解。