这个问题和答案,在2015年10月,意味着可以更改Qt3D
网格并更新它:
问题
我想在涉及动态运行时的情况下使用 Qt3d 应用程序端几何数据的变化。
动态更改实体网格的最佳方法是什么?
我宁愿在C++方面做这一切,但 QMesh 似乎没有 提供用于更改网格数据的 API。
我查看了制作自定义QAbstractMesh类的其他一些示例 和QAbstractMeshFunctor。看起来我可以定制 网格类型可以做我需要的,但我有一个问题。如果我保持一个 引用我从函子制作的 QMeshDataPtr,我可以吗 只需随时修改网格数据以及 引用它会自动更新吗?
答
这方面的 API 在 5.6 中略有变化。几何数据为 现在包含在一个或多个 QBuffer 对象中,并被一个引用 或描述缓冲区中数据布局的更多 QA属性。这 QAttributes是通过将它们添加到QGeometryRenderer来呈现的 元件。
您可以在主线程上更新上述对象并调用 update((或像以前一样,您也可以使用函子来拥有后端 生成动态数据。
现在,我的问题是关于打电话给update()
.究竟引用了Qt3D
API 的哪个部分?
在我的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);
// ...