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模块初探相关推荐

  1. Qt Quick 3D学习:模型加载

    (注意,开源版的 Qt Quick 3D 是狗都不用的 GPL 协议) Qt Quick 3D 模块提供了 Model 类型用于 3D 模型加载,通过设置 source 的资源路径来加载对应的 3D ...

  2. Qt Quick 3D学习:使用鼠标键盘控制节点位置和方向

    (注意,开源版的 Qt Quick 3D 是狗都不用的 GPL 协议) Qt Quick 3D 模块提供了  WasdController 类型来控制节点的位置和方向,受控节点一般是 Camera.( ...

  3. Qt Quick 3D介绍:Qt Quick的高级3D API

    目录 我们的目标是什么?为什么提出另一个3D解决方案? 统一图形技术 直观易用的API Qt Quick的统一工具 一流的素材优化管道 跨平台性能和兼容性 Qt Quick 3D到底是什么? 您能用Q ...

  4. Qt Quick 3D系列(一):加载3d模型

    如果我们想在QML中使用3D且你之前没有三维程序开发的基础,使用Qt Quick 3D是个不错的选择,下面我介绍如何使用Qt Quick 3D加载3d模型.注意:Qt Quick 3D从Qt 5.15 ...

  5. Qt Quick 3D简介

    Qt Quick 3D简介 前言 Qt Quick 3D是Qt自带的一套3D图形系统,与传统的Qt 3D不同的是,Qt Quick 3D采用QML来进行开发.本节则对Qt Quick 3D进行一次简单 ...

  6. Qt Quick 3D中将3D场景(如.obj)转换为.mesh

    Qt 5.15以后提供了Qt Quick 3D的新模块,该模块可使用可视化的方式即可进行3D模型的显示,并且相较于Qt 3D来说,该模块的API更为高级,使用者不需要自己设计底层的细节.该模块中三维模 ...

  7. Qt文档阅读笔记-Qt Quick 3D - Simple Example解析

    程序运行截图如下: 还是动的. 官方出这篇博文的目的是如何教我们使用Qt Quick 3D去渲染简单的场景. 首先是设置其场景. 在main.qml文件中设置整个场景,导入QtQuick3D组建,用于 ...

  8. Qt6 QML Book/Qt Quick 3D/材料和灯光

    Materials and Light 材料和灯光 Up until now, we've only worked with basic materials. To create a convinci ...

  9. Qt Quick 3D系列(三):设置三维模型的金属光泽材质

    前面的博客中介绍了如何在Qt Quick 3D中加载三维模型,下面介绍如何设置三维模型的材质,例如下图模型: 我需要设置为金属材质时,设置该Model的materials为PrincipledMate ...

最新文章

  1. Protocol Buffer C++应用实例
  2. libreoffice_如何更改您在LibreOffice中可以撤消的操作数
  3. 【SQL】SQL语法树
  4. Html5下载功能实现
  5. CAD制图软件中如何设置CAD打印样式表(CTB)?
  6. 计算机对未来和生活,计算机的发展对人类生活的影响
  7. SuperMap iDesktop常见问题解答集锦 (一)
  8. 六【Java 基础】数组的概述: 数组的定义与使用
  9. Problem A. Snapper Chain 问题A.按扣链条 解决办法
  10. cocos2d-x创建新项目模板
  11. 2021年什么邮箱最好用,这款电子邮箱让你的工作效率翻倍!
  12. Java实验(18) 幻灯片放映
  13. 网盘企业,免费用户是不是不配下载?
  14. 离职通知邮件主题写什么好_离职祝福邮件怎么写
  15. 乘法运算中的有效数据位
  16. seata-tcc简单使用
  17. 百度平台上的网络舆情信息怎么搜查的方法
  18. maya2018英文翻译_maya2018mac版如何改成英文?
  19. python初体验-hello world答案_2.跟老韩学Python之hello初体验
  20. Beauty diary

热门文章

  1. 用Python玩我的世界(1.环境搭建)
  2. bzoj3698 XWW的难题
  3. [bzoj3698]XWW的难题 有源汇的上下界最大流
  4. 嵌入式开发教程哪家好?云计算培训如何学?
  5. 效能篇 | 爱奇艺APP一键体检技术实践
  6. 利用Python爬取金十数据新闻事件
  7. 查看、修改git账号信息
  8. ai一个线段多个箭头_ai里面怎么画箭头?ai箭头设置和绘制方法
  9. start.spring.io网站访问不到
  10. 工具栏的打印图标不见了_电脑工具栏图标不见了怎么办啊