Qt Quick 3D学习:模型加载
(注意,開源版的 Qt Quick 3D 是狗都不用的 GPL 協(xié)議)
Qt Quick 3D 模塊提供了 Model 類型用于 3D 模型加載,通過設(shè)置 source 的資源路徑來加載對(duì)應(yīng)的 3D 模型:
Model {//Qt內(nèi)置的幾種幾何模型//"#Rectangle" 矩形//"#Sphere" 球體//"#Cube" 立方體//"#Cone" 錐體//"#Cylinder" 圓柱體source: "#Sphere"//加載mesh 3D模型資源文件//source: "qrc:/model/teapot.mesh"//或者這樣寫//source: "teapot.mesh"//材質(zhì)設(shè)置materials: [ DefaultMaterial {diffuseColor: "blue"}] }除了設(shè)置 source 指定模型,還可以設(shè)置 geometry 自定義圖形。
Qt Quick 3D Model 加載的模型類型和 Qt 3D 不一樣,不是直接加載 obj、fbx 等格式的文件,而是先轉(zhuǎn)換成 mesh 格式。文檔如是說,直接在應(yīng)用中引用這些交換格式?jīng)]有意義,因?yàn)樾枰罅抠Y源來解析和調(diào)整資源內(nèi)容,然后才能用于實(shí)時(shí)渲染,所以采用先轉(zhuǎn)換為有效的運(yùn)行時(shí)格式的方式。
Qt 提供了一個(gè)名叫?balsam?的可以執(zhí)行程序?qū)?obj 等 3D 模型文件轉(zhuǎn)換為 mesh 文件,該工具位于 Qt 安裝目錄下:
可以通過命令行調(diào)用(指定模型路徑和導(dǎo)出目錄):
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 上,就會(huì)自動(dòng)在 obj 所在目錄生成一個(gè)包含?mesh 文件的 meshs 文件夾(一個(gè) obj 可能會(huì)產(chǎn)生多個(gè) mesh 文件),和一個(gè) obj 同名的 qml 文件(把這些 mesh 文件的調(diào)用封裝為了一個(gè)組件,我們可以直接使用這個(gè) qml 文件,也可以只是參考里面的代碼) 。
對(duì) Qt 示例的?trefoil.obj 進(jìn)行轉(zhuǎn)換得到:
其中 qml 文件里就是對(duì) 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]} }現(xiàn)在,將 mesh 引入到我們的工程中,就能用 Model 加載這個(gè)模型了。有的 Qt Creator 版本可以通過設(shè)計(jì)中的?3D Editor 預(yù)覽 3D 模型(有的版本有 BUG),Qt Design Studio 設(shè)計(jì)工具也有對(duì)應(yīng)支持。Qt Creator 的 QML 設(shè)計(jì)器在我使用的 7.0 版本需要在插件設(shè)置里打開:
下面是簡(jiǎn)單的效果演示和代碼:?
import QtQuick 2.15 import QtQuick3D 1.15View3D {id: control//背景environment: SceneEnvironment {clearColor: "green"backgroundMode: SceneEnvironment.Color}//觀察相機(jī)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
總結(jié)
以上是生活随笔為你收集整理的Qt Quick 3D学习:模型加载的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第4关:异常处理 - 华氏-摄氏温度换算
- 下一篇: java零到一:Servlet和JSP-