[英]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个索引引用了前一帧,因此无法获取子帧信息。 我还没有尝试获取将来的框架信息,但是我也不认为有可能。
如何查询阵列中过去/未来/子帧的网格顶点位置? 我当前的方法是否不灵活?如果可以,我还可以怎么做?
因此,实现此目标的“预期”方法是使用MDGContext , MDGContextGuard或显式采用上下文的MPlug.asMObject版本(尽管已弃用)。
话虽如此-过去,当我尝试使用MDGContexts在其他时间查询值时,我发现它们要么很慢,要么不稳定,或者两者兼而有之。 因此,请谨慎使用。 如您所说,如果您纯粹处理来自alembic网格的物体,事情可能会更好。 但是,如果是这种情况,您可能会更好地从节点读取缓存路径,然后直接通过Alembic API查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.