我在 QML (Qt 5.15/6.0.0) 中加载和显示 3D 模型 (.obj) 时遇到问题。我尝试了以下 3 种技术,但它们似乎都有独特的问题。
将 QQuickItem 和 OpenGL 与我自己的 .obj 加载器一起使用。这可以工作,但我想利用 Qt 提供的强大功能,如质量渲染、assimp 模型加载以及远离 OpenGL 特定绘制代码的潜力。
Qt3D模块中的 Scene3D。这有效,但它在退出时崩溃。我已经尝试了建议的解决方法,但它们都无法防止崩溃,或者如果我确实阻止了崩溃,那么我的模型无法正确加载或显示。
Quick 3D 中的View3D。这似乎是最好的选择,但缺点似乎是我需要使用 balsam 预处理 obj 文件,以便将其转换为 qt .mesh 格式。我宁愿避免这一步,因为我希望用户能够加载他们自己的模型(obj、step 等)
需要能够设置网格和纹理源。这可以使用带有网格的 Scene3D,但我没有看到使用带有模型对象的 View3D 的相同选项。
理想情况下,我可以使用 qml Qt3D.Render::Mesh 项目或 Qt3DRender::QMesh 动态加载对象文件,然后使用该网格在 View3D 中渲染。或者使用加载模型的自定义 QQuick3DGeometry 并可以添加为 QtQuick3D::Mode.geometry。
我在这里遗漏了什么还是我试图混合两个不兼容的模块:Qt3D 和 Quick3D?可以将模型动态加载到 View3D 中而不将其转换为 .mesh 文件吗?