赞
踩
本系列文章只是记录本人学习Qt 3D的学习过程,其中很多都是借鉴网上搜寻的资料,其中有不对的,请积极指正。
3D是three-dimensional的缩写,在计算机里显示3d图形,就是说在平面里显示三维图形。不像现实世界里,真实的三维空间,有真实的距离空间。计算机里只是看起来很像真实世界,因此在计算机显示的3d图形,就是让人眼看上就像真的一样。
区别:3D和2D的最大差别主要是在感官体验上,3D相比来说更有空间感,更让人身临其境。
3D游戏更有空间感,让人感觉身临其境,游戏体验好。
2D即二维,在一个平面上的内容就是二维。二维即左右、上下两个方向,不存在前后。在一张纸上的内容就可以看做成是二维。即只有面积,没有立体。二维是平面技术的一种,例如普通的平面动漫,称之为二维动漫、简称二维。
3D即三维,三维是指在平面二维系中又加入了一个方向向量构成的空间系。所谓三维,按大众理论来讲,只是人为规定的互相交错(垂直是一个很有特性的理解)的三个方向,用这个三维坐标,看起来可以把整个世界任意一点的位置确定下来。原来,三维是为了确定位置。
Qt3D 是Qt官方支持的3D实时渲染引擎,和Qt一样几乎支持所有平台,对OpenGL pipeline进行了封装,支持C++ 和脚本语言QML,甚至支持 python (pyQt和pySide), 目的是为了让开发者快速地开发出三维渲染的程序。与OSG、VTK和OGRE等类似,但是是Qt原生的,对于Qt开发来说兼容性会更好,可以自然地使用Qt的信号-槽机制。
Qt3D 具有以下基本特性:
特性 | 译注 |
---|---|
2D 和 3D | c++、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 audio | 3D音频定位 |
Animation: rigid body, skeletal, morph target | 动画:刚体、骨骼、变形目标 |
Path finding and other AI | 路径和其他人工智能 |
Picking | 拾取 |
Particles | 粒子 |
CPU核数越多,Qt3D的性能也会得到提升,现在的CPU都在通过增加核数而非提高时钟频率来提升性能。使用多核CPU可一定程度提升性能,许多任务间相互独立,可并行执行。例如,路径查找模块执行的动作和渲染器的渲染动作彼此间独立,可并发执行,获取渲染调试信息和统计信息时可单线执行
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并实现您的子系统功能。
参考文章
Qt3D 的利和弊我只能根据我的直观体验来写,未必客观,但是真实。
利:原生支持
如果你本来就在用Qt作为GUI库,那么使用Qt3D将会获得完全兼容的3D库,并且不需要安装额外的依赖,在移植的时候也很方便, 可以使用Qt的信号-槽和事件机制
性能上号称支持做游戏引擎 near real-time simulation
工具库相对很丰富了,相比纯撸 OpenGL 来说还是节省了很大的开发工作
和Qt一致的跨平台能力
弊处:资料过少
相比与OSG、Unity3D库这些成熟的库来说不够流行(但是原理是相通的)
资料过少,官方文档和例程不够充实(或许这也是广大开发者加入开源社区的好机会)
如果不使用Qt作为GUI框架,那么单独使用Qt3D似乎又优点沉重
最终建议是:如果你使用Qt开发,那么使用Qt3D 将会很方便,否则,则没必要
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。