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学习:模型加载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第4关:异常处理 - 华氏-摄氏温度换算
- 下一篇: 压力传感器与51单片机C语言程序,51单