在运行时更改和更新几何网格



这个问题和答案,在2015年10月,意味着可以更改Qt3D网格并更新它:

问题

我想在涉及动态运行时的情况下使用 Qt3d 应用程序端几何数据的变化。

动态更改实体网格的最佳方法是什么?

我宁愿在C++方面做这一切,但 QMesh 似乎没有 提供用于更改网格数据的 API。

我查看了制作自定义QAbstractMesh类的其他一些示例 和QAbstractMeshFunctor。看起来我可以定制 网格类型可以做我需要的,但我有一个问题。如果我保持一个 引用我从函子制作的 QMeshDataPtr,我可以吗 只需随时修改网格数据以及 引用它会自动更新吗?

这方面的 API 在 5.6 中略有变化。几何数据为 现在包含在一个或多个 QBuffer 对象中,并被一个引用 或描述缓冲区中数据布局的更多 QA属性。这 QAttributes是通过将它们添加到QGeometryRenderer来呈现的 元件。

您可以在主线程上更新上述对象并调用 update((或像以前一样,您也可以使用函子来拥有后端 生成动态数据。

现在,我的问题是关于打电话给update().究竟引用了Qt3DAPI 的哪个部分?

在我的Linux机器上的Qt安装目录中有一个测试:

/home/{user}/Qt5.12.6/5.12.6/Src/qt3d/tests/manual/custom-mesh-update-data-cpp/

这是我在谷歌搜索qt3d mesh update关键字时通过点击此链接发现的。


上面的测试是使用 Qt3DRender::QBuffer API 来更新网格数据:

void QBuffer::updateData(int offset, const QByteArray &bytes(

通过将数据替换为偏移的字节来更新数据。

注意:此函数可以通过元对象系统和 QML 调用。请参阅Q_INVOKABLE。

代码如下所示:

Qt3DRender::QBuffer *vertexDataBuffer;
// ...
QByteArray updateData;
// ...
vertexDataBuffer->updateData(pos,updateData);
// ...

最新更新