(持续更新)Qt3D 学习资源

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
  3. 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 源码,Github上有源码(下面这个镜像在网页端支持代码跳转!)
    qt3d

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

image

相关文章
相关标签/搜索