Maya c++ API,移动对象?

Maya c++ API, moving an object?

本文关键字:对象 移动 c++ API Maya      更新时间:2023-10-16

我正在尝试编写Maya c ++插件,但遇到了一些麻烦。

我只想创建一个摄像机,然后将其移动到视口中。我有:

MObject camera;
MDagPath cameraPath;
// create new camera
MFnCamera fnCamera;
fnCamera.create(camera);
fnCamera.getPath(cameraPath);
MFnTransform fn(camera);
MVector trans(12, 12, 12);
fn.setTranslation(trans, MSpace::kWorld);

这会很好地创建相机,但不会移动它。翻译创建的对象缺少什么?谢谢。

啊,我完全错了。这有效:

MDagModifier dagModifier;
//Create the camera transform node.
MObject cameraTransformObj = dagModifier.createNode("transform");
dagModifier.renameNode(cameraTransformObj, "myCameraTransform");
//Create the camera shape node as a child of the camera transform node.
MObject cameraShapeObj = dagModifier.createNode("camera", cameraTransformObj);
dagModifier.renameNode(cameraShapeObj, "myCameraShape");
dagModifier.doIt();
MFnTransform transformFn(cameraTransformObj);
transformFn.setTranslation(MVector(0, 5, 30), MSpace::kTransform);

我发现如果您只是将空格形式MSpace::world更改为MSpace::object,则您提供的先前方法就可以了。也许是因为平移变换是最终世界矩阵的一部分,而这个函数的变换空间可能意味着将添加变换矩阵的空间。

改变:

fn.setTranslation(trans, MSpace::kWorld);

自:

fn.setTranslation(trans, MSpace::kObject);

对不起,我想我错了。使用 MSpace::kWorld 将返回失败,因为 MFnTransform 对象不是由 dagPath 对象创建的,在这种情况下,使用 MSpace::kObject 不会返回失败。