我正在尝试编写一个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);
这会使相机变好,但不会移动它。翻译创建的对象我错过了什么?谢谢。
答案 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将不会返回失败。