我正在创建一个工具集,用于使用 python 在 Maya 中创建 nurbs 曲线/曲面。
我有一组字典,其中包括 cvPositions、knots、form 等。每个字典都描述了一个预设的 3d 形状(立方体、圆形、金字塔等)。我还有一个存储在节点元数据中的 3d 矩阵,用作形状的偏移量。这允许您在不移动变换的情况下缩放/移动/旋转形状。
问题在于我应用这个矩阵的方式非常慢:
首先,我将在包含曲线的(原始)变换的位置创建一个新的(编辑)变换。接下来,我将把世界空间中的 cv 位置从 (orig)transform 转移到 (edit)transform 接下来我将把 (edit)transform 移动到矩阵位置。最后,我会将 cvPositions 转移回 (orig) 变换
当创建数百个形状时,这变得非常缓慢......
有人可以描述一种将矩阵应用于一组 3d 点的数学方法吗?也许使用数学模块或numpy之一?
或者,
有没有办法使用 OpenMaya api 函数来做到这一点?也许用 MPointArray?这是我在这方面得到的:
crv = OpenMaya.MFnNurbsCurve( self.dagPath )
cvs = OpenMaya.MPointArray()
space = OpenMaya.MSpace.kWorld
crv.getCVs(cvs, space)
positions = []
for i in range(cvs.length()):
pt = cvs[i]
positions.append( (pt[0], pt[1], pt[2]) )