我一直在寻找答案,但是我似乎在任何地方都找不到,所以我希望我能在这里得到答案...
我在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)]
现在,我的最后一步是将此Matrix应用于网格,但是我找不到一种很好的方法,有人知道如何在maya上进行此操作吗?
提前致谢:
世仁
最佳答案
不确定将矩阵应用于您的网格意味着什么,但是如果您想通过使用该矩阵对其进行变换来更新每个点的位置,则可以使用给定的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以便给您一个想法。
关于python - Maya Python:应用转换矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24577540/