(Continually updated) Qt3D Learning Resources

I. Introduction

Qt3D made recently by a three-dimensional display of the project, the process is relatively difficult, mainly Qt3D Although this library launched a few years, but not much information, the official routines are relatively small and most of QML, though he himself is completely C ++ support, while API documentation is well written and relatively simple interfaces, data generated with fewer people and fewer in google and stackoverflow search-related problems often can not find the answer in the process of doing the project I collected a lot of information, listed here to share to everyone, and welcome everyone to find good relevant information in the comments, I will update the blog.

1.1 What is Qt3D

Qt3D is Qt official support of real-time 3D rendering engine, and Qt as supports almost all platforms, to OpenGL pipeline is encapsulated, support for C ++ and scripting language QML, and even support python (pyQt and pySide), it is designed to allow developers to quickly We developed a three-dimensional rendering program. And OSG, VTK and OGRE and the like, but is native Qt, Qt development is for better compatibility, the signal may be used naturally Qt - slots mechanism.

Qt3D has the following basic characteristics :

  • 2D / 3D rendering application or C ++ Qt Quick applications
  • Meshes and the Geometry (Qt in the form of three-dimensional solid tissue, can be loaded obj \ mesh object or the like defined in the vertex set opengl)
  • Materials Materials
  • Shaders
  • Shadow Mapping shadow maps
  • Ambient occlusion ambient light shielding
  • High Dynamic Range
  • Deferred rendering deferred rendering
  • Multitexturing Multitexture
  • Instanced rendering
  • Uniform Buffer Objects

There physics engine, collision detection and AI and other game.

Qt3D mainly by KDAB cooperation in the design, development and maintenance, and Qt Company by the close, Qt3D Qt5.5 module is integrated in a future release, the more perfect version of the higher functions and some of the BUG will be fixed.

There are two Qt3D License: GNU LGPL v3 protocol and the GNU GPL v2 protocol.

1.2 Qt3D pros and cons

Qt3D the advantages and disadvantages I can based on my intuitive experiences to write, not necessarily objective, but true.

Lee: native support

  • If you are already in use as a Qt GUI library, then use Qt3D will get a fully compatible 3D library, and no need to install additional dependencies, is also very easy to transplant, you can use Qt's signal - slot mechanism and Events
  • It claims to support games engine near real-time simulation performance
  • Tool library is very rich relative, and compared to the pure line and OpenGL is still saves a lot of development work
  • And consistent cross-platform capabilities of Qt

At disadvantages: too little information

  • Compared with the OSG, Unity3D library library for these mature enough popular (but the principle is the same)
  • Too little information, official documents and routines is not enriched (perhaps this is a good opportunity for the majority of developers to join the open source community)
  • If you do not use Qt as the GUI framework, then use Qt3D alone seems to have the advantage of heavy

The final advice is: If you use Qt development, it will be very easy to use Qt3D, otherwise, it is not necessary.

Second, the study recommended

If you are using Qt3D, then the following information is required:

  • Qt GUI framework, either C ++ or QML
  • Basic knowledge of OpenGL rendering pipeline, may not need to be an expert in this area, but you need to know basic pipeline. At the same time if you want to develop high-performance 3D programs, then still have to lay a solid foundation of OpenGL.
  • ECS architecture: Entity + Component System, any entity Qt3D constitutes a Mesh + material; Mesh, materials belong component.
Entity - mesh + material( + transform) 
  • (Optional) QML / QtQucik
    because most of the examples are Qt3D QML (of course there are C ++); QML facilitate control sample code is read QML; C ++ implementation to perform

2.1 OpenGL learning materials

The following concepts to grasp, almost enough Qt3D Getting Started :

  1. OpenGL pipeline
  2. vertex, attribute,shader, transform ,camera,texture

2.2 Qt3D information

2.2.1 Video Data

  1. introduction to Qt3D
  2. And QT3D tutorial entities interact 3D, key classes involved (QObjectPicker)
    Interact with 3D Contents

2.2.2 PPT and blog

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 Tutorial

  1. Use one instance Qt3D game development, mainly based on QML, take some basic QML and OpenGL foundation, this example also provides some reference links.
    http://ftp.jaist.ac.jp/pub/qtproject/learning/developerguides/gamedevelopmentqt3d/GameDevelopmentQt3D.pdf

2.2.4 Q & A

  1. Know almost https://www.zhihu.com/question/48708879/answer/112235199
  2. Qt3D is ECS (Entity-Component-System) architecture; What is ECS architecture
    https://zhuanlan.zhihu.com/p/30538626

    Added: the pros and cons of 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 using shader Shader

https://stackoverflow.com/questions/52836013/how-to-make-color-of-a-section-be-different-on-a-3d-object

2.2.5 Source Project

  1. qt3d source, the source has Github (hereinafter, this image side support code page jump!)
    qt3d

  2. Qt3D Editor an experiment can be used to mesh + camera transform + render + in effect. Mainly written by the QML, core classes are written by the Cpp. Here is the effect.

image

Guess you like

Origin www.cnblogs.com/sunchaothu/p/11141212.html