当前位置:   article > 正文

Qt 3D 学习路径规划

qt 3d

Qt 3D 学习路径规划

  1. 3D 用来做什么?
  2. 什么是Qt 3D,什么时候选择Qt 3D
  3. Opengl入门及学习资料
  4. Qt 3D 整体介绍
  5. 官方实例

本系列文章只是记录本人学习Qt 3D的学习过程,其中很多都是借鉴网上搜寻的资料,其中有不对的,请积极指正。


什么是3D,3D可以用来做什么

3D是three-dimensional的缩写,在计算机里显示3d图形,就是说在平面里显示三维图形。不像现实世界里,真实的三维空间,有真实的距离空间。计算机里只是看起来很像真实世界,因此在计算机显示的3d图形,就是让人眼看上就像真的一样。
区别:3D和2D的最大差别主要是在感官体验上,3D相比来说更有空间感,更让人身临其境。
3D游戏更有空间感,让人感觉身临其境,游戏体验好。
2D即二维,在一个平面上的内容就是二维。二维即左右、上下两个方向,不存在前后。在一张纸上的内容就可以看做成是二维。即只有面积,没有立体。二维是平面技术的一种,例如普通的平面动漫,称之为二维动漫、简称二维。
3D即三维,三维是指在平面二维系中又加入了一个方向向量构成的空间系。所谓三维,按大众理论来讲,只是人为规定的互相交错(垂直是一个很有特性的理解)的三个方向,用这个三维坐标,看起来可以把整个世界任意一点的位置确定下来。原来,三维是为了确定位置。


什么是Qt 3D

Qt3D 是Qt官方支持的3D实时渲染引擎,和Qt一样几乎支持所有平台,对OpenGL pipeline进行了封装,支持C++ 和脚本语言QML,甚至支持 python (pyQt和pySide), 目的是为了让开发者快速地开发出三维渲染的程序。与OSG、VTK和OGRE等类似,但是是Qt原生的,对于Qt开发来说兼容性会更好,可以自然地使用Qt的信号-槽机制。

Qt 3D 特性

Qt3D 具有以下基本特性:

特性译注
2D 和 3Dc++、Qt Qucik application
Meshes网格,Qt 中三维实体的组织形式,可以加载obj\mesh等对象 或者定义 opengl 中 vertex 集合
Materials材质
Shaders着色器
Shadow Mapping阴影贴图
Ambient occlusion环境光遮蔽
High dynamic range高动态范围
Deferred rendering延迟渲染
Multitexturing多重纹理
Instanced rendering实例化
Uniform Buffer Objects统一缓冲区对象
Multitexturing多重纹理
Multitexturing多重纹理

还有与3D相关的要素:

要素译注
Physics simulation物理检测
Collision detection碰撞检测
3D positional audio3D音频定位
Animation: rigid body, skeletal, morph target动画:刚体、骨骼、变形目标
Path finding and other AI路径和其他人工智能
Picking拾取
Particles粒子

CPU核数

CPU核数越多,Qt3D的性能也会得到提升,现在的CPU都在通过增加核数而非提高时钟频率来提升性能。使用多核CPU可一定程度提升性能,许多任务间相互独立,可并行执行。例如,路径查找模块执行的动作和渲染器的渲染动作彼此间独立,可并发执行,获取渲染调试信息和统计信息时可单线执行

Qt 3D 架构

Qt3D 的核心是近乎实时地模拟对象,是 ECS(Entity-Component-System)架构;
什么是ECS架构
https://zhuanlan.zhihu.com/p/30538626

在这里插入图片描述
Qt3D 的“基类”是QNode,它是QObject的一个非常简单的子类。QNode为QObject添加了通过方面自动传达属性更改的能力,以及在整个应用程序中唯一的 ID。正如我们将在以后的文章中看到的那样,切面在额外的线程中存在和工作,QNode极大地简化了在面向用户的对象和切面之间获取数据的任务。通常,QNode的子类提供额外的支持数据,然后由组件引用。例如,QShaderProgram指定渲染一组实体时要使用的 GLSL 代码。
在这里插入图片描述

Qt3D 中的组件是通过继承 QComponent并添加相应方面完成其工作所需的任何数据来实现的。例如,渲染器方面使用Mesh组件来检索应该向下发送到 OpenGL 管道的每个顶点数据。
最后,QEntity只是一个可以聚合零个或多个QComponent 的对象,如上所述。
为 Qt3D 添加一个全新的功能,作为 Qt 的一部分或特定于您自己的应用程序,并且可以利用多线程后端包括:
1.识别和实施任何需要的组件和支持数据
2.向 QML 引擎注册这些组件(仅当您希望使用 QML API 时)
3.子类化QAbstractAspect并实现您的子系统功能。

什么时候选择Qt 3D(转)

参考文章
Qt3D 的利和弊我只能根据我的直观体验来写,未必客观,但是真实。

利:原生支持
如果你本来就在用Qt作为GUI库,那么使用Qt3D将会获得完全兼容的3D库,并且不需要安装额外的依赖,在移植的时候也很方便, 可以使用Qt的信号-槽和事件机制
性能上号称支持做游戏引擎 near real-time simulation
工具库相对很丰富了,相比纯撸 OpenGL 来说还是节省了很大的开发工作
和Qt一致的跨平台能力

弊处:资料过少
相比与OSG、Unity3D库这些成熟的库来说不够流行(但是原理是相通的)
资料过少,官方文档和例程不够充实(或许这也是广大开发者加入开源社区的好机会)
如果不使用Qt作为GUI框架,那么单独使用Qt3D似乎又优点沉重

最终建议是:如果你使用Qt开发,那么使用Qt3D 将会很方便,否则,则没必要

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/619090
推荐阅读
相关标签
  

闽ICP备14008679号