(持續更新)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

相關文章
相關標籤/搜索