一、前言

最近用Qt3D做了一个三维显示的项目,过程比较艰辛,主要是Qt3D这个库虽然推出了有几年,但是资料并不多,官方的例程比较少且大多是QML的,虽然他本身是完全支持C++的,而API 接口的文档写得又比较简略,用的人少产生的资料就更少了,在google和stackoverflow 搜索相关问题也往往找不到答案,在做项目的过程中我收集了很多资料,在这里列出来分享给大家,同时欢迎大家找到好的相关资料在评论里留言,我会更新到博客中。

1.1 什么是Qt3D

Qt3D 是Qt官方支持的3D实时渲染引擎,和Qt一样几乎支持所有平台,对OpenGL pipeline进行了封装,支持C++ 和脚本语言QML,甚至支持 python (pyQt和pySide), 目的是为了让开发者快速地开发出三维渲染的程序。与OSG、VTK和OGRE等类似,但是是Qt原生的,对于Qt开发来说兼容性会更好,可以自然地使用Qt的信号-槽机制。

Qt3D 具有以下基本特性

  • 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会被修复。

Qt3D 有两种License: GNU LGPL v3协议和GNU GPL v2协议。

1.2 Qt3D 的利与弊

Qt3D 的利和弊我只能根据我的直观体验来写,未必客观,但是真实。

利:原生支持

  • 如果你本来就在用Qt作为GUI库,那么使用Qt3D将会获得完全兼容的3D库,并且不需要安装额外的依赖,在移植的时候也很方便, 可以使用Qt的信号-槽和事件机制
  • 性能上号称支持做游戏引擎 near real-time simulation
  • 工具库相对很丰富了,相比纯撸 OpenGL 来说还是节省了很大的开发工作
  • 和Qt一致的跨平台能力

弊处:资料过少

  • 相比与OSG、Unity3D库这些成熟的库来说不够流行(但是原理是相通的)
  • 资料过少,官方文档和例程不够充实(或许这也是广大开发者加入开源社区的好机会)
  • 如果不使用Qt作为GUI框架,那么单独使用Qt3D似乎又优点沉重

最终建议是:如果你使用Qt开发,那么使用Qt3D 将会很方便,否则,则没必要。

二、学习建议

如果要使用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写得。下面是效果。

(持续更新)Qt3D 学习资源的更多相关文章

  1. [持续更新] Python学习、使用过程中遇见的非代码层面知识(想不到更好的标题了 T_T)

    写在前面: 这篇博文记录的不是python代码.数据结构.算法相关的内容,而是在学习.使用过程中遇见的一些没有技术含量,但有时很令人抓耳挠腮的小东西.比如:python内置库怎么看.python搜索模 ...

  2. java 学习必备的软件,持续更新中

    小编会持续更新在学习Java过程中需要的软件以及各种文件: 话不多说,看行动! 一:JDK (1)JDK1.8(*64): 链接:https://pan.baidu.com/s/1vM0jNXn2CT ...

  3. k8s学习之资料参考网址(持续更新)

    此文章持续更新关于学习k8s生态的参考网址:  二进制方式搭建 (此部署方式是一步一步的部署,过程清晰)            https://github.com/opsnull/follow-me ...

  4. 【pwn】学pwn日记——栈学习(持续更新)

    [pwn]学pwn日记--栈学习(持续更新) 前言 从8.2开始系统性学习pwn,在此之前,学习了部分汇编指令以及32位c语言程序的堆栈图及函数调用. 学习视频链接:XMCVE 2020 CTF Pw ...

  5. 墙裂推荐一波mysql学习资源

    在日常工作与学习中,无论是开发.运维.测试,还是架构师,数据库是一门必不可少的"必修课", 也是必备的涨薪神器.在互联网公司中,开源数据库用得比较多的当属 MySQL 了. 但my ...

  6. 痞子衡嵌入式:史上最强i.MX RT学习资源汇总(持续更新中...)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MX RT学习资源. 类别 资源 简介 官方汇总 i.MXRT产品主页 恩智浦官方i.MXRT产品主页,最权威的资料都在这里,参考手 ...

  7. 资源| 学习视频库-永久有效,持续更新!附赠java面试汇总

    每天进步一丢丢,连接梦与想 我们总是羡慕他人的光芒,却忘记自己也会发光 声明 资源来自于网络,小编只是资源的搬运工,若有侵权,联系小编即删. 期待已久的学习视频库来啦! 经过小编多日整理,整理了1.5 ...

  8. 痞子衡嵌入式:史上最强ARM Cortex-M学习资源汇总(持续更新中...)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ARM Cortex-M学习资源. 类别 资源 版本 短评 官方汇总 cortex-m-resources / ARM公司专家Josep ...

  9. cocos2d-x 学习资源整理(持续更新...)

    生活像一把无情刻刀.改变了我们模样.以前我以为会亘古不变的东西,突然在一瞬间失去了信念... 假设你改变不了生活中患得患失的心情.那就试着让自己变得强大一点.由于能做到不以物喜不以己悲都是建立在强大的 ...

随机推荐

  1. 神户制钢坑了500家企业 百年老店为何走上邪路?(企业经营再艰难,也不能降低产品质量,甚至偷工减料,同样适用于IT行业)

    神户制钢这颗烂萝卜,拔出它之后带出的泥越来越多.上周五社长川崎博也又开了记者会,再次道歉,而受到其数据造假影响的客户数量也从200家飙升到500家. 日本政府给神户制钢两周时间调查,还要在一个月内公布 ...

  2. Android 位置服务——BaiduLocation的使用

    原文:Android 位置服务--BaiduLocation的使用 版权声明:本文为博主原创文章,欢迎转载,转载请在文章显眼处说明文章出处并给出连接. https://blog.csdn.net/To ...

  3. hdu 2037 这个夏天不AC (java)

    问题: 这个题为项贪心算法.我们的想法是在第一时间每个周期根据结束排序(按结束越早穿越,更多的程序), 然后从第一个节目开始.假设下一个节目的开始时间大于一个节目的开始时间,是进行程序,依次递推. 输 ...

  4. WPF中StringFormat的用法--显示特定位数的数字

    原文:WPF中StringFormat的用法--显示特定位数的数字 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/huangli321456/art ...

  5. [WPF]自定义鼠标指针

    原文:[WPF]自定义鼠标指针 [WPF]自定义鼠标指针 周银辉 看看WPF Cursor类的两个构造函数吧:  * f));            g.Flush();            g.D ...

  6. RHEL 6和RHEL 7(CentOS 6和CentOS 7)恢复ROOT密码

    RedHat 6恢复Root密码: 1.启动RedHat 6的时候在这个界面按任意键 2.出现如下界面,按 e 3.出现如下界面,选择第二个--kernel,然后再按 e 4.出现如下界面,输入 空格 ...

  7. JS超链接动态显示图片

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  8. WPF DataGrid自定义列DataGridTextColumn.ElementStyle和DataGridTemplateColumn.CellTemplate

    <Window x:Class="DataGridExam.MainWindow"        xmlns="http://schemas.microsoft.c ...

  9. WPF IDataErrorInfo使用-数据对象上验证

    <Window x:Class="DataBindingExam.MainWindow"        xmlns="http://schemas.microsof ...

  10. HTTP协议解析(格式和举例十分清楚)

    掌握HTTP虽然不是必须的,但是如果你知道它的工作原理,那么在学习JSP开发中的某些知识就可以易如反掌了. 一,HTTP协议详解之URL篇 http(超文本传输协议)是一个基于请求与响应模式的.无状态 ...