Maya c ++ API,移动一个对象?

时间:2018-01-03 12:59:31

标签: c++ plugins maya

我正在尝试编写一个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);

这会使相机变好,但不会移动它。翻译创建的对象我错过了什么?谢谢。

2 个答案:

答案 0 :(得分:1)

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

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);

答案 1 :(得分:0)

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

更改:

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

收件人:

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

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