繁体   English   中英

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

[英]C++ Maya - Getting mesh vertices from frame and subframe

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

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;
}

如果我需要一个以上的帧,则会在逻辑索引上运行for循环并重复该过程。 但是自创建以来,我发现插件的需求不仅可以获取过去的帧,还可以获取将来的以及子帧(在整数帧之间) 由于我当前的代码依赖elementByLogicalIndex()获取过去的帧信息,并且仅接收无符号整数,并且第0个索引引用了前一帧,因此无法获取子帧信息。 我还没有尝试获取将来的框架信息,但是我也不认为有可能。

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

因此,实现此目标的“预期”方法是使用MDGContextMDGContextGuard或显式采用上下文的MPlug.asMObject版本(尽管已弃用)。

话虽如此-过去,当我尝试使用MDGContexts在其他时间查询值时,我发现它们要么很慢,要么不稳定,或者两者兼而有之。 因此,请谨慎使用。 如您所说,如果您纯粹处理来自alembic网格的物体,事情可能会更好。 但是,如果是这种情况,您可能会更好地从节点读取缓存路径,然后直接通过Alembic API查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM