随着 Qt6 的推出,Qt Quick 3D 逐渐稳定和好用起来
之前很多朋友都是把 Qt3D 当成 Qt 的 3D 解决方案的,
现在有了 Qt Quick 3D,很推荐切换到这个新模块来
目前这个模块只提供了 QML 的接口(虽说晚一些会提供 C++ API)
以前我一直很排斥使用 Qt Quick / QML,但最近项目上用到了
试用后感觉特别棒,用 QML 搭建一个运动的 3D 场景真的太简单了
上图是 three.js 做的卡通城市,我们用 Qt Quick 3D 可以很容易地实现同样效果
使用 Qt Quick 3D 的话最低需要 Qt 5.15 的版本
我们先创建一个空的 Qt Quick 工程,名字叫 demo
然后修改 pro 并新建 qml.qrc 资源文件
1QT += quick quick3d2CONFIG += c++113SOURCES += main.cpp4RESOURCES += qml.qrcmain.cpp 如下
x1234
5int main(int argc, char *argv[])6{7 QGuiApplication app(argc, argv);8 QSurfaceFormat::setDefaultFormat(QQuick3D::idealSurfaceFormat(4));9 QQmlApplicationEngine engine;10 engine.load(QUrl(QStringLiteral("qrc:/main.qml")));11 return app.exec();12}新建 main.qml 加入 qml.qrc
xxxxxxxxxx111import QtQuick.Window 2.152
3Window {4 width: 12805 height: 7206 visible: true7
8 Scene3D {9 anchors.fill: parent10 }11}新建 scene3d.qml 加入 qml.qrc
xxxxxxxxxx161import QtQuick 2.152import QtQuick3D 1.153
4View3D {5 id: view6 environment: SceneEnvironment {7 clearColor: "grey"8 backgroundMode: SceneEnvironment.Color9 }10
11 PerspectiveCamera {12 }13
14 DirectionalLight {15 }16}此时,可以用设计模式打开 scene3d.qml 文件,用 3D 界面修改 qml
操作方式很简单,按住 Alt 键 后拖动鼠标左键,可以移动视角
按住 Alt 键后拖动鼠标中键,可以整体平移
按住 Alt 键后拖动鼠标右键 或者 滚动鼠标滚轮,可以放大缩小视角
通过左侧的 Assets 选项,可以将 3D 模型(比如 fbx 格式)导入工程中,
QtCreator 会自动调用 Qt 安装目录下的 balsam.exe 工具
生成 qml 代码文件 和 mesh、png 资源文件
3D素材是从网上下载的 Unity3D 的 SimplePoly City - Low Poly Assets.unitypackage
通过 Export FBX 插件导出的 fbx 文件,素材文件我传到了百度网盘
import 后,我们把 asset_imports\Quick3DAssets\Building_Chicken_Shop 目录下的
maps、meshes 文件夹 及 Building_Chicken_Shop.qml 拷贝到 scene3d.qml 同级目录
然后修改下 scene3d.qml 的代码,编译后就能看到窗口中的 3D 模型了
xxxxxxxxxx331import QtQuick 2.152import QtQuick3D 1.153
4View3D {5 id: view6
7 environment: SceneEnvironment {8 clearColor: "grey"9 backgroundMode: SceneEnvironment.Color10 }11
12 PerspectiveCamera {13 x: -1319.25114 y: 1075.30715 eulerRotation.z: 0.0000116 eulerRotation.y: -38.3289517 eulerRotation.x: -15.6999518 z: 1865.6713919 }20
21 DirectionalLight {22 x: -1942.46823 y: 2160.86724 eulerRotation.z: 025 eulerRotation.y: -20.2343126 eulerRotation.x: -18.1720627 brightness: 13528 z: 2517.8640129 }30
31 Building_Chicken_Shop {32 }33}通过 QQ3D 显示 3D 模型
同理,我们若修改下模型,添加下动画和鼠标控制,就能做出各式各样的 3D 界面了
Qt Quick 3D 就是这样,能让我们开发 3D 界面更加灵活和便捷
上图的代码我也一并传到百度网盘了
希望能有越来越多的人喜欢上 Qt Quick 3D
To be continued ....