C++ C++;Maya-从帧和子帧获取网格顶点

C++ C++;Maya-从帧和子帧获取网格顶点,c++,3d,maya,mesh,C++,3d,Maya,Mesh,我正在编写一个网格变形器插件,它从过去的帧中获取有关网格的信息,以执行一些计算。在过去,为了获得过去的网格信息,我做了以下操作 MStatus MyClass::deform(MDataBlock& dataBlock, MItGeometry& itGeo, const MMatrix& localToWorldMatrix, unsigned int index) { MFnPointArrayData fnPoints; //

我正在编写一个网格变形器插件,它从过去的帧中获取有关网格的信息,以执行一些计算。在过去,为了获得过去的网格信息,我做了以下操作

MStatus MyClass::deform(MDataBlock& dataBlock, MItGeometry& itGeo, 
        const MMatrix& localToWorldMatrix, unsigned int index)
{

    MFnPointArrayData fnPoints;


    //... other init code


    MPlug meshPlug = nodeFn.findPlug(MString("inputMesh"));

    // gets the mesh connection from the previous frame
    MPlug meshPositionPlug = meshPlug.elementByLogicalIndex(0);

    MObject objOldMesh;

    meshPositionPlug.getValue(objOldMesh);

    fnPoints.setObject(objOldMesh);
    // previous frame's vertices
    MPointArray oldMeshPositionVertices = fnPoints.array();


    // ... calculations


    return MS::kSuccess;
}
如果我需要多个帧,我会在逻辑索引上运行循环并重复这个过程。然而,自从创建这个插件以来,我发现我的插件不仅需要过去的帧,还需要将来的帧以及子帧(整数帧之间)。由于我的当前代码依赖elementByLogicalIndex()获取过去的帧信息,并且只接受无符号整数,并且第0个索引引用前一帧,因此我无法获取子帧信息。我还没有尝试获取未来的帧信息,但我认为这也不可能

如何查询阵列中过去/未来/子帧的网格顶点位置?我当前的方法是否不灵活?如果是的话,我还能怎么做?

因此,实现这一点的“预期”方法是使用,或者使用,或者使用显式采用上下文的版本(尽管这些版本已被弃用)


话虽如此,在过去,当我尝试在其他时间使用MDGContext来查询值时,我发现它们要么非常慢,要么不稳定,要么两者兼而有之。所以要小心使用。正如你所说,如果你只处理直接来自alembic网格的对象,事情可能会更好。但是,如果是这种情况,您可能会更幸运地从节点读取缓存路径,并直接通过alembic API进行查询。

这样做真的没有好方法。你真的在玛雅的最深处,你几乎要把整个玛雅烟斗扔给狼。我尝试过使用一个循环节点,这是正常的,但是正常的DG eval会清理这个,所以你需要自己管理相当多的mayas系统,这不是很好。整个maya DG在帧不依赖于其他帧的假设下工作。但是是的,这是有可能做到的,你只是以一个dnamic模拟结束,并失去关键帧的好处。在这种情况下,丢失关键帧不是一个问题。如果没有其他方法存在,那么我可以选择完全模拟的路线。也就是说,你能在文档中推荐一个适合我当前需要的学习资源或课程吗?不,文档明确认为你没有这样做。将数据烘焙到最合理的起点。如何将第一个过程缓存到缓存节点,然后从中生成第二个过程?这将使整个事情摆脱悖论,否则它似乎会充满…我有同样的想法-我只是从一开始就在alembic缓存上工作,所以我基本上已经在这样做了。我的问题是,一些缓存有快速的子帧移动,我的插件没有利用这些移动,这会产生不准确的结果