Qt Quick 3D模块初探
0.前言
Qt Quick 3D提供了用于基于Qt Quick創建3D內容或UI的高級API。提供了對現有Qt Quick場景圖(scenegraph?)的擴展,以及對該擴展場景圖的渲染器。使用空間場景圖(Spatial scenegraph)時,還可以將Qt Quick 2D內容與3D內容混合。從官方的描述來看,可以看成一個簡化版的Qt3D模塊。但要注意的是,開源版本下,Qt3D是LGPL授權,而Qt Quick 3D是GPL授權。
因為該模塊是從Qt5.14開始提供預覽版,Qt5.15正式加入的,所以資料相對較少,在Qt Creator中有幾個簡單的示例。
使用時,先導入模塊(測試了兩個Demo,發現pro文件不寫QT+=quick3d也是能運行的):
import QtQuick3D 1.15除了基本的Qt Quick 3D模塊外,還提供了其他功能:?
import QtQuick3D.Materials 1.15 import QtQuick3D.Effects 1.15 import QtQuick3D.Helpers 1.15本文代碼鏈接:https://github.com/gongjianbo/HelloQtQuick3D
Qt Quick 3D概述:https://doc.qt.io/qt-5/qtquick3d-index.html
1.第一個窗口
要渲染一個3D場景,需要使用View3D對象,View3D為要渲染的3D內容提供2D表面。在3D場景中,使用Node對象樹來描述我們的場景。下面的示例是一個空白的窗口,只有clearColor:
import QtQuick 2.15 import QtQuick3D 1.15Item {id: control//渲染3D場景的視口//View3D為要渲染的3D內容提供2D表面。在將3D內容顯示在Qt Quick場景中之前,必須先將其展平。//it must first be flattend.View3D {id: viewanchors.fill: parentanchors.margins: 20//為了控制場景的呈現,有必要定義一個SceneEnvironment的環境屬性。//SceneEnvironment定義了渲染場景的環境,該環境定義了如何全局渲染場景。environment: SceneEnvironment {clearColor: "darkGreen"backgroundMode: SceneEnvironment.Color}//要將3D場景投影到2D視口,必須從攝像機查看場景。//正交投影:OrthographicCamera//透視投影:PerspectiveCameraOrthographicCamera {position: Qt.vector3d(0, 0, 0)}}Text {anchors.centerIn: parenttext: "First Window"color: "white"} }下面再來試試一些預定義的Model(Model也是繼承自Node):
import QtQuick 2.15 import QtQuick3D 1.15//渲染3D場景的視口 View3D {id: controlenvironment: SceneEnvironment {clearColor: "darkGreen"backgroundMode: SceneEnvironment.Color}//透視投影PerspectiveCamera {id: cameraposition: Qt.vector3d(0, 0, 300)//eulerRotation.x: -30}//光源DirectionalLight {eulerRotation.x: -100eulerRotation.y: -100eulerRotation.z: 500}//加載3D模型數據//為了使模型可渲染,它至少需要一個網格Mesh和一種材質Material//Qt Quick 3D本身內置了幾個簡單的模型//圓球Model {position: Qt.vector3d(0, 0, 0)source: "#Sphere"materials: [DefaultMaterial {diffuseColor: "blue"}]}//矩形Model {position: Qt.vector3d(-100, -100, 0)source: "#Cube"scale: Qt.vector3d(2, 0.1, 1)eulerRotation: Qt.vector3d(0,0,-20)materials: [DefaultMaterial {diffuseColor: "red"}]} }2.混合Qt Quick Item畫三角
相對于Qt3D可以直接在QML中定義頂點,QtQuick3D好像沒那么方便。我只看到一個叫Geometry的類型可以自定義幾何形狀,但是需要使用C ++實現并注冊到QML。又或者Model的source使用自己生成的mesh文件,很明顯這也不方便。索性我就放了一個QML的Shape畫的三角:
import QtQuick 2.15 import QtQuick3D 1.15 import QtQuick.Shapes 1.15//渲染3D場景的視口 View3D {id: controlenvironment: SceneEnvironment {clearColor: "darkGreen"backgroundMode: SceneEnvironment.Color}//透視投影PerspectiveCamera {id: cameraposition: Qt.vector3d(0, 0, 300)//eulerRotation.x: -30}//光源DirectionalLight {eulerRotation.x: -100eulerRotation.y: -100eulerRotation.z: 500}//自定義Geometry還得從Cpp注冊,或者source加載自己的mesh文件//為了圖方便,貼一個Quick2的Shape來展示三角Node {position: Qt.vector3d(0, 0, 0)Shape {id: shapewidth: 300height: 200ShapePath {strokeColor: "transparent"fillColor: "lightGreen"startX: shape.width/2; startY: 0PathLine { x: shape.width; y: shape.height }PathLine { x: 0; y: shape.height }PathLine { x: shape.width/2; y: 0 }}}} }總結
以上是生活随笔為你收集整理的Qt Quick 3D模块初探的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 细致教程:从安装到实战手把手教你玩懂Na
- 下一篇: matlab计算π,如何计算π的值(MA