Maya c++ API,移动对象?
Maya c++ API, moving an object?
我正在尝试编写 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);
我发现只要把space的形式MSpace::world改成MSpace::object,你之前提供的方法就可以了。也许是因为平移变换是最终世界矩阵的一部分,这个函数的变换space可能意味着space将添加变换矩阵。
变化:
fn.setTranslation(trans, MSpace::kWorld);
至:
fn.setTranslation(trans, MSpace::kObject);
对不起,我想我错了。使用 MSpace::kWorld 会 return 失败,因为 MFnTransform 对象不是由 dagPath 对象创建的,在这种情况下使用 MSpace::kObject 不会 return 失败。
我正在尝试编写 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);
我发现只要把space的形式MSpace::world改成MSpace::object,你之前提供的方法就可以了。也许是因为平移变换是最终世界矩阵的一部分,这个函数的变换space可能意味着space将添加变换矩阵。
变化:
fn.setTranslation(trans, MSpace::kWorld);
至:
fn.setTranslation(trans, MSpace::kObject);
对不起,我想我错了。使用 MSpace::kWorld 会 return 失败,因为 MFnTransform 对象不是由 dagPath 对象创建的,在这种情况下使用 MSpace::kObject 不会 return 失败。