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;
}
如果我需要多个帧,我会在逻辑索引上运行循环并重复这个过程。然而,自从创建这个插件以来,我发现我的插件的需求不仅可以获得过去的帧,还可以获得未来的帧以及子帧(整数帧之间)。由于我当前的代码依赖elementByLogicalIndex()来获取过去的帧信息,并且它只接受无符号整数,而第0个索引指的是前一帧,所以我无法获取子帧信息。我还没有尝试获取未来的帧信息,但我认为这也不可能。
如何查询阵列中过去/未来/子帧的网格顶点位置?我目前的方法不灵活吗?如果是,我还能怎么做?
因此,实现这一目标的"预期"方法是使用MDGContext,或者使用MDGCntextGuard,或者使用明确接受上下文的MPlug.asObject版本(尽管这些版本已被弃用)。
话虽如此,在过去,当我尝试在其他时候使用MDGContexts查询值时,我发现它们要么非常慢,要么不稳定,要么两者兼而有之。所以要小心使用。如果像你说的那样,纯粹处理来自alembic网格的对象,事情可能会更好地工作。然而,如果是这样的话,您可能会更幸运地从节点读取缓存路径,并直接自己通过alembic API进行查询。
相关文章:
- 如何循环打印顶点结构
- D3D11-将混合权重和索引传递到顶点着色器
- 使用 glvertex4i 传递网格面索引时的顶点着色器错误
- 从 CGAL 3D 网格生成中获取顶点坐标的 -6.27744e+66:mesh_implicit_sphere示例
- 使用此网格函数的立方体的正确顶点和索引是什么
- 如何从网格中删除面及其顶点列表
- 如何在任意网格上找到顶点的邻居
- 如何变换 CGAL 表面网格顶点
- CGAL 曲面网格 - 修改顶点坐标
- 确定由3个顶点形成的平面切割的网格
- 使用顶点阵列、四边形阵列来创建四边形网格
- C++Maya-从帧和子帧获取网格顶点
- 如何从一组顶点构造网格
- 如何在现代 OpenGl 中选择网格的顶点或三角形(上面的 3.3)
- 在英特尔 CPU 上将最近的 8 个顶点插值到随机采样点时,对称 3D 网格的最有效数据布局
- 访问网格的顶点
- 将自定义属性添加到Boost图库中的网格顶点
- 从网格中读取顶点和三角形
- 如何确定一个顶点是否在边界上的网格在CGAL
- 如何在不破坏网格缠绕顺序的情况下将Z-Up顶点转换为Y-Up顶点.(DX9c)