Maya API中的计算WorldMatrix

Computing worldMatrix in maya API

本文关键字:计算 WorldMatrix API Maya      更新时间:2023-10-16

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

这是以下设置:

  • 我有一个inputworldmatrix属性
  • 我有outputtranslationx,y和z属性

现在,我的目标是创建相同的影响,例如domomposematrix

i将转换(obja)的WorldMatrix插入我的传统插入的InputWorldMatrix attrix,然后将其outputTranslationx,y,z连接到另一个转换的(objb)TX,Ty,ty,tz attr。

问题是,在我完成所有连接之后,变换节点objb不受影响无论如何。在我的计算功能中,当我cout<<translation.x<<端它向我表明它正在变得肮脏(应该什么),并且该值没有改变。

我的问题:问题在哪里?

这是计算函数的代码:

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在Initialize函数中

当然,它会影响outputTranslationx,y,z属性。我想我还需要将矢量转换为浮点(对于setFloat),但不知道如何。如果有人可以帮助我,那将很棒。预先感谢!

Cheerio土耳其工程师

这是一般的Maya Thing dirtying 不会使事情计算。而是通知玛雅人可能需要计算。如果场景中没有任何物品是最后一行,形状或需要该值的GUI项目,那么Maya将不会为您计算它。因此,问题不在计算中,它在现场或情感网络中。

因此,如果您的插头与像孩子一样形状的变换等变换等。*,您会看到Maya反应。玛雅人只是将您优化为多余。如果这不起作用,那么您的属性影响是错误的。

由于您未显示属性的代码会影响部分,因此除此之外,不可能说什么(除了声称还可以,但我想这仍然是有问题的)。因此,要给出一个更好的答案,我们需要了解您的影响网络。

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

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