Qt Quick 3D学习:模型加载
(注意,开源版的 Qt Quick 3D 是狗都不用的 GPL 协议)
Qt Quick 3D 模块提供了 Model 类型用于 3D 模型加载,通过设置 source 的资源路径来加载对应的 3D 模型:
Model {//Qt内置的几种几何模型//"#Rectangle" 矩形//"#Sphere" 球体//"#Cube" 立方体//"#Cone" 锥体//"#Cylinder" 圆柱体source: "#Sphere"//加载mesh 3D模型资源文件//source: "qrc:/model/teapot.mesh"//或者这样写//source: "teapot.mesh"//材质设置materials: [ DefaultMaterial {diffuseColor: "blue"}]
}
除了设置 source 指定模型,还可以设置 geometry 自定义图形。
Qt Quick 3D Model 加载的模型类型和 Qt 3D 不一样,不是直接加载 obj、fbx 等格式的文件,而是先转换成 mesh 格式。文档如是说,直接在应用中引用这些交换格式没有意义,因为需要大量资源来解析和调整资源内容,然后才能用于实时渲染,所以采用先转换为有效的运行时格式的方式。
Qt 提供了一个名叫 balsam 的可以执行程序将 obj 等 3D 模型文件转换为 mesh 文件,该工具位于 Qt 安装目录下:
可以通过命令行调用(指定模型路径和导出目录):
E:\Qt\QtOnline\5.15.2\msvc2019_64\bin>balsam.exe "E:\Qt\QtOnline\Examples\Qt-5.15.2\qt3d\exampleresources\assets\obj\trefoil.obj" -o "E:\Qt\QtOnline\Examples\Qt-5.15.2\qt3d\exampleresources\assets\obj"
generated file: "E:/Qt/QtOnline/Examples/Qt-5.15.2/qt3d/exampleresources/assets/obj\\Trefoil.qml"
也可以直接将 obj 文件拖到 balsam.exe 上,就会自动在 obj 所在目录生成一个包含 mesh 文件的 meshs 文件夹(一个 obj 可能会产生多个 mesh 文件),和一个 obj 同名的 qml 文件(把这些 mesh 文件的调用封装为了一个组件,我们可以直接使用这个 qml 文件,也可以只是参考里面的代码) 。
对 Qt 示例的 trefoil.obj 进行转换得到:
其中 qml 文件里就是对 mesh 的引用:
import QtQuick 2.15
import QtQuick3D 1.15Node {id: trefoil_objModel {id: torus_Knotsource: "meshes/torus_Knot.mesh"DefaultMaterial {id: none_materialdiffuseColor: "#ff999999"}materials: [none_material]}
}
现在,将 mesh 引入到我们的工程中,就能用 Model 加载这个模型了。有的 Qt Creator 版本可以通过设计中的 3D Editor 预览 3D 模型(有的版本有 BUG),Qt Design Studio 设计工具也有对应支持。Qt Creator 的 QML 设计器在我使用的 7.0 版本需要在插件设置里打开:
下面是简单的效果演示和代码:
import QtQuick 2.15
import QtQuick3D 1.15View3D {id: control//背景environment: SceneEnvironment {clearColor: "green"backgroundMode: SceneEnvironment.Color}//观察相机PerspectiveCamera {z: 100}//光照DirectionalLight {eulerRotation.y: 45}//模型加载Model {position: Qt.vector3d(0, 0, 0)source: "qrc:/model/trefoil.mesh"scale: Qt.vector3d(10, 10, 10)materials: [DefaultMaterial {diffuseColor: "red"}]}
}
本文参考
Qt文档:https://doc.qt.io/qt-5/qml-qtquick3d-model.html
Qt文档:https://doc.qt.io/qt-5/qtquick3d-tool-balsam.html
Qt Quick 3D学习:模型加载相关推荐
- NVIDIA GEFORCE 2080 / 2080 SUPER / 2080 Ti + CUDA Toolkit 8.0 深度学习模型加载速度慢
NVIDIA GEFORCE 2080 / 2080 SUPER / 2080 Ti + CUDA Toolkit 8.0 深度学习模型加载速度慢 (卡顿) GEFORCE RTX 2080 / GE ...
- Qt Quick 3D学习:使用鼠标键盘控制节点位置和方向
(注意,开源版的 Qt Quick 3D 是狗都不用的 GPL 协议) Qt Quick 3D 模块提供了 WasdController 类型来控制节点的位置和方向,受控节点一般是 Camera.( ...
- 如何将深度学习模型加载到android环境中
承接上一篇的内容,考虑如何将深度学习的模型加载到android app中 文章目录 前言 一.使用工具 二.使用步骤 1.模型格式的转换 2.配置文件修改 3. 应用程序 前言 将图片学习的模型加载到 ...
- Qt Quick 3D系列(一):加载3d模型
如果我们想在QML中使用3D且你之前没有三维程序开发的基础,使用Qt Quick 3D是个不错的选择,下面我介绍如何使用Qt Quick 3D加载3d模型.注意:Qt Quick 3D从Qt 5.15 ...
- OpenGL学习脚印:模型加载初步-加载obj模型(load obj model)
写在前面 前面介绍了光照基础内容,以及材质和lighting maps,和光源类型,我们对使用光照增强场景真实感有了一定了解.但是到目前为止,我们通过在程序中指定的立方体数据,绘制立方体,看起来还是很 ...
- PyTorch框架学习十九——模型加载与保存
PyTorch框架学习十九--模型加载与保存 一.序列化与反序列化 二.PyTorch中的序列化与反序列化 1.torch.save 2.torch.load 三.模型的保存 1.方法一:保存整个Mo ...
- Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图
Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图 QHeightMapSurfaceDataProxy:是Q3DSurface的一个基本代理类. 他是专门加载高度图. 高度图是没有X, ...
- Android OpenGLES2.0(十四)——Obj格式3D模型加载
转自:http://blog.csdn.net/junzia/article/details/54300202 在博主<OpenGLES系列>文章中,最开始的几篇讲的就是OpenGL世界中 ...
- QT+OpenGL模型加载 - Assimp
QT+OpenGL模型加载 - Assimp 本篇完整工程见gitee:OpenGL 对应点的tag,由turbolove提供技术支持,您可以关注博主或者私信博主 模型加载 先来张图: 我们不大可能手 ...
最新文章
- 【c语言】蓝桥杯基础练习 01字串
- 引导直觉解决数学猜想难题,DeepMind登上《Nature》封面
- FPGA之道(32)Verilog基本程序框架
- Spring和CXF整合发布WebService(服务端、客户端)
- 滴滴顺风车GM:大多数产品经理定义是狭隘的
- Python中_,__,__xx__的区别
- 输入输出系统1 ----- 特性 输出输出方式
- [转]Docker 大势已去,Podman 即将崛起
- 圆形刻度盘 进度 展示
- 使用select和show命令查看mysql数据库系统信息
- [词根词缀]quarr/qui/quit/rad/radi等衍生单词
- 《炬丰科技-半导体工艺》晶片键合技术和薄膜传输技术
- 数据挖掘:Apriori 关联规则分析算法原理分析与代码实现
- python人工智能方向面试准备_关于机器学习面试的经典题目(面试经验和建议)...
- 51单片机入门之四:静态数码管,单片机如何驱动数码管
- 计算机二级需要掌握的英语词汇,二级英语必背单词
- Windows CE嵌入式系统程序开发
- Java计算两个时间的小时差
- Leetcode算法Java全解答--41. 缺失的第一个正数
- htc解锁后root,htc的手机怎么解锁