gpt4 book ai didi

c++ - 在 maya API 中计算 worldMatrix

转载 作者:行者123 更新时间:2023-11-28 07:08:52 25 4
gpt4 key购买 nike

我的自定义 DG 节点有问题。我在 C++ 中使用 Maya 的 API。

这是以下设置:

  • 我有一个 inputWorldMatrix 属性
  • 我有 outputTranslationX、Y 和 Z 属性

现在我的目标是创建与分解矩阵相同的效果

我将 transform(objA) 的 worldMatrix 插入我的 CustomNode 的 inputWorldMatrix attr,并将其 outputTranslationX、Y、Z 连接到另一个 transform(objB) 的 tx、ty、tz attr。

问题是在我完成所有连接后,转换节点 objB 不受影响无论如何。在我的计算函数中,当我 cout << translation.x << endl;它告诉我它变脏了(它应该变脏)并且这个值没有改变。

我的问题:问题出在哪里?

这里是计算函数的代码:

MStatus WorldMatrix::compute(const MPlug& plug, MDataBlock& data){

MStatus status;

if((plug == aOutTranslationX) || (plug == aOutTranslationY) || (plug == aOutTranslationZ))
{
//get worldMatrix dataHandle
MDataHandle hInputMatrix = data.inputValue(aWorldMatrix, &status);
CHECK_MSTATUS_AND_RETURN_IT(status);

//get the worldMatrix and the translation
MMatrix mInputMatrix = hInputMatrix.asMatrix();
MTransformationMatrix mTransMat(mInputMatrix);
MVector translation = mTransMat.getTranslation(MSpace::kWorld);

cout << translation.x << translation.y << translation. z << endl;

//get outMatrixX data
MDataHandle hOutMatrixX = data.outputValue(aOutTranslationX, &status);
CHECK_MSTATUS_AND_RETURN_IT(status);

//get outMatrixY data
MDataHandle hOutMatrixY = data.outputValue(aOutTranslationY, &status);
CHECK_MSTATUS_AND_RETURN_IT(status);

//get outMatrixZ data
MDataHandle hOutMatrixZ = data.outputValue(aOutTranslationZ, &status);
CHECK_MSTATUS_AND_RETURN_IT(status);

float outX = translation.x;//do some compute stuff
float outY = translation.y;//do some compute stuff
float outZ = translation.z;//do some compute stuff

//set outMatrixX with outX value
hOutMatrixX.setFloat(outX);

//set outMatrixY with outY value
hOutMatrixY.setFloat(outY);

//set outMatrixZ with outZ value
hOutMatrixZ.setFloat(outZ);

data.setClean(plug);
return MS::kSuccess;
}
else
{
return MS::kUnknownParameter;
}

我的 aWorldMatrix 属性由 MFnMatrixAttribute 创建,并在初始化函数中设置为 MFnMatrixAttribute::kFloat

当然,它会影响 OutputTranslationX、Y、Z 属性。我想我还需要将 vector 转换为 float (对于 setFloat),但不知道如何做。如果有人能帮助我,那就太棒了。提前致谢!!

干杯土耳其工程师

最佳答案

这是一般的 Maya 事物 不会使事物计算。而是通知 Maya 可能需要计算。如果场景中没有最后一行的项目、形状或 GUI 项目需要该值,则 Maya 将不会为您计算。所以问题不在于计算,而在于场景或影响网络。

因此,如果您的插头连接到具有子形状等形状的变换之类的东西,请连接输出。*您将看到 Maya 使用react。玛雅人只是把你优化为多余的。如果这不起作用,那么您的属性影响是错误的。

由于您没有显示属性的代码会影响部分,因此除了这个之外不可能说任何其他内容(除了声称它没问题,但我想它可能仍然有问题)。因此,为了给出更好的答案,我们需要了解您的影响网络。

因此,您提供的代码不能用于调试情况,因此大多数 SO 用户只会忽略您。

 * No it is not enough to connect to a node. The node needs to be one 
that updates the graphics state somehow.

关于c++ - 在 maya API 中计算 worldMatrix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21334076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com