(持续更新)Qt3D 学习资源

[toc]html

1、前言

最近用Qt3D作了一个三维显示的项目,过程比较艰辛,主要是Qt3D这个库虽然推出了有几年,可是资料并很少,官方的例程比较少且大可能是QML的,虽然他自己是彻底支持C++的,而API 接口的文档写得又比较简略,用的人少产生的资料就更少了,在google和stackoverflow 搜索相关问题也每每找不到答案,在作项目的过程当中我收集了不少资料,在这里列出来分享给你们,同时欢迎你们找到好的相关资料在评论里留言,我会更新到博客中。python

1.1 什么是Qt3D

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

Qt3D 具备如下基本特性github

  • 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会被修复。app

Qt3D 有两种License: GNU LGPL v3协议和GNU GPL v2协议。框架

1.2 Qt3D 的利与弊

Qt3D 的利和弊我只能根据个人直观体验来写,未必客观,可是真实。ide

利:原生支持

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

弊处:资料过少

  • 相比与OSG、Unity3D库这些成熟的库来讲不够流行(可是原理是相通的)
  • 资料过少,官方文档和例程不够充实(或许这也是广大开发者加入开源社区的好机会)
  • 若是不使用Qt做为GUI框架,那么单独使用Qt3D彷佛又优势沉重

最终建议是:若是你使用Qt开发,那么使用Qt3D 将会很方便,不然,则不必。工具

2、学习建议

若是要使用Qt3D,那么如下知识是必须的:性能

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

2.1 OpenGL 学习资料

**掌握如下概念,差很少足够Qt3D 入门使用 **:

  1. OpenGL pipeline
  2. vertex, attribute,shader, transform ,camera,texture

2.2 Qt3D 资料

2.2.1 视频资料

  1. introduction to Qt3D
  2. 与3D 实体交互的QT3D 教程,涉及的关键类(QObjectPicker) Interact with 3D contents

2.2.2 PPT和博客

https://ervin.ipsquad.net/slides/talks/ak2017-qt3d-advances/ak2017-qt3d-advances.pdf https://www.kdab.com/wp-content/uploads/stories/Qt_3D_basics_whitepaper_Part2.pdf https://www.kdab.com/wp-content/uploads/stories/qt3dinteraction.pdf https://blog.qt.io/blog/2016/06/16/introducing-qt-3d/

2.2.3 教程

  1. 使用Qt3D 游戏开发的一个实例,主要基于QML,须要必定的QML 基础和OpenGL 基础,这个例子也提供了一些参考连接。 http://ftp.jaist.ac.jp/pub/qtproject/learning/developerguides/gamedevelopmentqt3d/GameDevelopmentQt3D.pdf

2.2.4 问答

  1. 知乎 https://www.zhihu.com/question/48708879/answer/112235199
  2. Qt3D 是 ECS(Entity-Component-System)架构;什么是ECS架构 https://zhuanlan.zhihu.com/p/30538626

补充:ECS的利弊

  • ECS Pros:
    • Avoids deep, wide, complex inheritance hierarchies
    • Flexible – can change object behaviour at runtime (add/remove components)
    • Extensible – add more component types later
    • Qt 3D ECS is high performance by Aspects (Systems) offloading work to backend
  • ECS Cons:
    • Often new to OOP programmers – takes a while to adjust thinking
    • More objects – Entity plus Components
  1. Qt3D 中使用着色器 Shader

https://stackoverflow.com/questions/52836013/how-to-make-color-of-a-section-be-different-on-a-3d-object

2.2.5 源码

  1. qt3d-example KDAB 官方例程

  2. qt3d 源码,Github上有源码(下面这个镜像在网页端支持代码跳转!)
    qt3d

  3. learnopengl-qt3d

  4. Qt3D Editor 一个能够用来实验 mesh + camera + transform + render 效果的。主要由QML写得,核心类是由Cpp写得。下面是效果。

image

原文出处:https://www.cnblogs.com/sunchaothu/p/11141212.html

相关文章
相关标签/搜索