Qt-3D

1 介绍

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

  • C++ 应用或者Qt Quick应用程序的 2D/3D 渲染
  • Meshes 和 Geometry (Qt 中三维实体的组织形式,可以加载obj\mesh等对象 或者定义 opengl 中 vertex 集合)
  • Materials 材质
  • Shaders
  • Shadow Mapping 阴影贴图
  • Ambient occlusion 环境光遮蔽
  • 高动态范围
  • Deferred rendering 延迟渲染
  • Multitexturing 多重纹理
  • Instanced rendering
  • Uniform Buffer Objects

还有 物理引擎、碰撞检测和游戏AI等。
Qt3D 主要由KDAB 设计、开发和维护,和Qt Company 由密切合作, Qt3D 模块集成在Qt5.5以后的版本中, 版本越高功能越完善且一些BUG会被修复。
Qt3D 有两种License: GNU LGPL v3协议和GNU GPL v2协议。

2 优缺点

2.1 优点

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

2.2 缺点

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

3 注意

Qt GUI框架,不管是C++或者QML
OpenGL渲染管线的基本知识,或许不需要成为这方面专家,但是需要知道基本的pipeline。同时如果想开发高性能的3D程序,那么OpenGL的底子还是要打牢。
ECS 架构:Entity+Component System, Qt3D 中的任何一个实体由 Mesh + 材质构成;Mesh、材质都属于 component。
(可选) QML/QtQucik
因为Qt3D 的大部分例子都是QML的(当然也有C++); 掌握QML有利于读懂QML的示例代码;从而进行C++实现

4 OpenGL

  • 状态机
    OpenGL本身就是一个大型状态机:定义OpenGL当前操作方式的变量集合。OpenGL的状态通常称为OpenGL语境。使用OpenGL时,我们通常通过设置一些选项,操纵一些缓冲区然后使用当前上下文进行渲染来更改其状态。
    例如,每当我们告诉OpenGL现在要绘制线条而不是三角形时,我们都会通过更改一些上下文变量来更改OpenGL的状态,该变量设置了OpenGL的绘制方式。通过告诉OpenGL它应该绘制线来更改上下文后,下一个绘制命令现在将绘制线而不是三角形。
    在OpenGL中工作时,我们会遇到几种 状态改变 改变上下文的功能 状态使用这些函数可基于OpenGL的当前状态执行某些操作。只要您牢记OpenGL本质上是一个大型状态机,它的大多数功能都会更有意义。

  • 对象
    OpenGL库是用C编写的,并允许使用其他语言进行许多派生,但它的核心仍然是C库。由于许多C的语言构造都不能很好地将其翻译成其他高级语言,因此OpenGL在开发时就考虑了几种抽象。

参考

1、qt opengl 加载3d模型(obj格式)
2、Qt 3D的研究(一)
3、(持续更新)Qt3D 学习资源
4、learnopengl

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读