目錄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寫得。下面是效果。