在QML场景中显示内存网格物体

时间:2019-02-18 16:13:13

标签: c++ qml qt3d

在我的应用程序中,我正在从医学数据集中生成3D网格。现在,我想在QML的Qt应用程序中显示它。我已经找到了如何从文件中显示网格的方法,但这要求我每次修改网格时都要保存网格(例如,通过更改分割参数)

Mesh {
    id: mesh
    source: "mesh.obj"
}

我想在3D查看器中显示网格,而不必先将网格保存到文件中。

如何在QML中做到这一点?

1 个答案:

答案 0 :(得分:2)

Qt3D主要包装OpenGL,这意味着您可以使用顶点/索引数组对象以已知的方式继续将网格数据上传到图形卡-当然,可以通过Qt3D的类,而不是原生OpenGL的类。

看看Qt3D示例的this code,它们仅在内存中创建一个三角形。您可以将所有C ++指令轻松转换为QML树。您需要做的就是将已经拥有的顶点数据传输到属性中。如果您将渲染策略留在RenderSettings上的Always上,则Qt3D应该绘制网格。

如果C ++中包含网格数据文件,则另一种方法是编写一个自定义C ++类,该类将数据映射为示例中的格式,然后将其提供给QML。

修改

在尝试将顶点数据直接传递到QML中的Qt3D时,似乎存在问题,因为无法将其转换为QByteArray。但是这里是example如何使用自定义C ++类解决它的方法。