目录html
最近用Qt3D作了一个三维显示的项目,过程比较艰辛,主要是Qt3D这个库虽然推出了有几年,可是资料并很少,官方的例程比较少且大可能是QML的,虽然他自己是彻底支持C++的,而API 接口的文档写得又比较简略,用的人少产生的资料就更少了,在google和stackoverflow 搜索相关问题也每每找不到答案,在作项目的过程当中我收集了不少资料,在这里列出来分享给你们,同时欢迎你们找到好的相关资料在评论里留言,我会更新到博客中。python
Qt3D 是Qt官方支持的3D实时渲染引擎,和Qt同样几乎支持全部平台,对OpenGL pipeline进行了封装,支持C++ 和脚本语言QML,甚至支持 python (pyQt和pySide), 目的是为了让开发者快速地开发出三维渲染的程序。与OSG、VTK和OGRE等相似,可是是Qt原生的,对于Qt开发来讲兼容性会更好,能够天然地使用Qt的信号-槽机制。git
Qt3D 具备如下基本特性:github
还有 物理引擎、碰撞检测和游戏AI等。架构
Qt3D 主要由KDAB 设计、开发和维护,和Qt Company 由密切合做, Qt3D 模块集成在Qt5.5之后的版本中, 版本越高功能越完善且一些BUG会被修复。app
Qt3D 有两种License: GNU LGPL v3协议和GNU GPL v2协议。框架
Qt3D 的利和弊我只能根据个人直观体验来写,未必客观,可是真实。ide
最终建议是:若是你使用Qt开发,那么使用Qt3D 将会很方便,不然,则不必。工具
若是要使用Qt3D,那么如下知识是必须的:性能
Entity - mesh + material( + transform)
掌握如下概念,差很少足够Qt3D 入门使用 :
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/
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
Qt3D 中使用着色器 Shader
qt3d 源码,Github上有源码(下面这个镜像在网页端支持代码跳转!)
qt3d
Qt3D Editor 一个能够用来实验 mesh + camera + transform + render 效果的。主要由QML写得,核心类是由Cpp写得。下面是效果。