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

相關文章
相關標籤/搜索