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模块初探相关推荐
- Qt Quick 3D学习:模型加载
(注意,开源版的 Qt Quick 3D 是狗都不用的 GPL 协议) Qt Quick 3D 模块提供了 Model 类型用于 3D 模型加载,通过设置 source 的资源路径来加载对应的 3D ...
- Qt Quick 3D学习:使用鼠标键盘控制节点位置和方向
(注意,开源版的 Qt Quick 3D 是狗都不用的 GPL 协议) Qt Quick 3D 模块提供了 WasdController 类型来控制节点的位置和方向,受控节点一般是 Camera.( ...
- Qt Quick 3D介绍:Qt Quick的高级3D API
目录 我们的目标是什么?为什么提出另一个3D解决方案? 统一图形技术 直观易用的API Qt Quick的统一工具 一流的素材优化管道 跨平台性能和兼容性 Qt Quick 3D到底是什么? 您能用Q ...
- Qt Quick 3D系列(一):加载3d模型
如果我们想在QML中使用3D且你之前没有三维程序开发的基础,使用Qt Quick 3D是个不错的选择,下面我介绍如何使用Qt Quick 3D加载3d模型.注意:Qt Quick 3D从Qt 5.15 ...
- Qt Quick 3D简介
Qt Quick 3D简介 前言 Qt Quick 3D是Qt自带的一套3D图形系统,与传统的Qt 3D不同的是,Qt Quick 3D采用QML来进行开发.本节则对Qt Quick 3D进行一次简单 ...
- Qt Quick 3D中将3D场景(如.obj)转换为.mesh
Qt 5.15以后提供了Qt Quick 3D的新模块,该模块可使用可视化的方式即可进行3D模型的显示,并且相较于Qt 3D来说,该模块的API更为高级,使用者不需要自己设计底层的细节.该模块中三维模 ...
- Qt文档阅读笔记-Qt Quick 3D - Simple Example解析
程序运行截图如下: 还是动的. 官方出这篇博文的目的是如何教我们使用Qt Quick 3D去渲染简单的场景. 首先是设置其场景. 在main.qml文件中设置整个场景,导入QtQuick3D组建,用于 ...
- Qt6 QML Book/Qt Quick 3D/材料和灯光
Materials and Light 材料和灯光 Up until now, we've only worked with basic materials. To create a convinci ...
- Qt Quick 3D系列(三):设置三维模型的金属光泽材质
前面的博客中介绍了如何在Qt Quick 3D中加载三维模型,下面介绍如何设置三维模型的材质,例如下图模型: 我需要设置为金属材质时,设置该Model的materials为PrincipledMate ...
最新文章
- Protocol Buffer C++应用实例
- libreoffice_如何更改您在LibreOffice中可以撤消的操作数
- 【SQL】SQL语法树
- Html5下载功能实现
- CAD制图软件中如何设置CAD打印样式表(CTB)?
- 计算机对未来和生活,计算机的发展对人类生活的影响
- SuperMap iDesktop常见问题解答集锦 (一)
- 六【Java 基础】数组的概述: 数组的定义与使用
- Problem A. Snapper Chain 问题A.按扣链条 解决办法
- cocos2d-x创建新项目模板
- 2021年什么邮箱最好用,这款电子邮箱让你的工作效率翻倍!
- Java实验(18) 幻灯片放映
- 网盘企业,免费用户是不是不配下载?
- 离职通知邮件主题写什么好_离职祝福邮件怎么写
- 乘法运算中的有效数据位
- seata-tcc简单使用
- 百度平台上的网络舆情信息怎么搜查的方法
- maya2018英文翻译_maya2018mac版如何改成英文?
- python初体验-hello world答案_2.跟老韩学Python之hello初体验
- Beauty diary