(持续更新)Qt3D 学习资源

目录

  • 一、前言

    • 1.1 什么是Qt3D
    • 1.2 Qt3D 的利与弊
      • 利:原生支持
      • 弊处:资料过少
  • 二、学习建议
    • 2.1 OpenGL 学习资料
    • 2.2 Qt3D 资料
      • 2.2.1 视频资料
      • 2.2.2 PPT和博客
      • 2.2.3 教程
      • 2.2.4 问答
      • 2.2.5 项目源码

一、前言

最近用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
  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写得。下面是效果。

原文地址:https://www.cnblogs.com/sunchaothu/p/11141212.html

时间: 2024-08-01 22:59:28

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

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

生活像一把无情刻刀,改变了我们模样,曾经我以为会亘古不变的东西,突然在一瞬间失去了信念... 如果你改变不了生活中患得患失的心情,那就试着让自己变得强大一点,因为能做到不以物喜不以己悲都是建立在强大的基础上面的. so,加油吧,少年. ================================================================ 一不小心又废话了. 学习cocos2d-x也有一段时间了,直到现在仍然认为自己是个新手(呵呵,说的好像我不是新手一样.) 现在把自己这

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

大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MX RT学习资源. 类别 资源 简介 官方汇总 i.MXRT产品主页 恩智浦官方i.MXRT产品主页,最权威的资料都在这里,参考手册/数据手册,官方EVK板设计文件,各种应用笔记,各种参考设计方案.培训视频.软件SDK开发包,官方IDE/CFG工具,第三方软件支持等应有尽有,如果这上面文档你都能全部仔细看一遍,软件都能下载用起来,不用怀疑,你就是资深专家了. 其中痞子衡特别推荐你把所有应用笔记都看一遍,这些笔记凝结了所有恩智浦

Linux学习资源汇总(持续更新...)

自己收集一些学习资源,方便以后查找 搜索引擎:    google:https://www.google.com/Linux教程:    鸟哥的私房菜:http://linux.vbird.org    经典的LInux学习教材    运维生存时间:http://www.ttlsa.com/    LinuxSir:http://www.linuxsir.org/    菜鸟教程:http://www.runoob.com/        各种基础的教程    w3cschool:https:/

Android精品资源汇总,10个源码(持续更新)

最近一直在学习Android,在各大社区逛,总结下自己看到的一些不错的源码.希望可以给大家带来帮助. 1.Android精品源码:带动态效果的Button(按钮) 最喜欢各种效果的按钮了,没办法就是这么的呆萌是不是?带动态效果的Button(按钮)可要比静态的按钮炫酷的多了,大家看到效果图就知道了,那么Android开发者们快动手做一个自己喜欢的动态按钮吧! 很炫的效果图,源码下载点击:Android精品源码:带动态效果的Button(按钮) 2.一个漂亮的按钮库[Android精品] 一个不要

前端面试题总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)持续更新 񘞮

原文: http://blog.gqylpy.com/gqy/438 置顶:来自一名75后老程序员的武林秘籍--必读(博主推荐) 来,先呈上武林秘籍链接:http://blog.gqylpy.com/gqy/401/ 你好,我是一名极客!一个 75 后的老工程师! 我将花两分钟,表述清楚我让你读这段文字的目的! 如果你看过武侠小说,你可以把这个经历理解为,你失足落入一个山洞遇到了一位垂暮的老者!而这位老者打算传你一套武功秘籍! 没错,我就是这个老者! 干研发 20 多年了!我也年轻过,奋斗过!我

Java学习轨迹【面向对象】(持续更新)

其中部分内容为其他博主所作,侵删 6月12日-7月每日更新 Java学习轨迹 一.面向对象 类和对象 1. new关键字所完成的事情 1)为对象开辟了新的内存空间 2)调用类的构造方法 3)返回生成对象的地址 Dog dog=new Dog(); dog是引用,new Dog()生成了一个Dog对象,引用dog指向所生成对象的地址 2.构造方法 1)构造方法必须与类名相同 2)构造方法没有返回值[且不能使用void作返回值] 3)如果在定义类的时候没有为类声明构造方法java编译器会自动为类添加

linux学习资料持续更新中

一.LINUX基础教程 1.老男孩系列免费视频: 1) linux高薪入门实战视频教程(第二部)老男孩linux教程 http://edu.51cto.com/course/course_id-1035-page-1.html 2) 跟着老男孩从0开始一步步实战深入学习linux运维(三) http://edu.51cto.com/lesson/id-11909.html linux学习资料持续更新中,布布扣,bubuko.com

MongoDB学习——持续更新

參考MongoDB权威指南,学习阶段.大家多多交流问题.持续更新本文 MongoDB的长处 MongoDB具有丰富的数据模型,是面向文档的数据库. easy扩展.能够在多台server之间切割数据. 开发人员仅仅需专注于编写应用.假设须要更大的数据.仅仅需在集群中加入新机器,然后让数据库来处理剩下的事情. 具有丰富的功能,比方索引,存储JavaScript,聚合,固定集合.文件存储. 不支持联接(join)和复杂的多行事物. 卓越的性能是MongoDB的主要目标,默认的存储引擎使用了内存映射文件

nginx源代码学习资源(不断更新)

nginx源代码学习是一个痛苦又快乐的过程,以下列出了一些nginx的学习资源. 首先要做的当然是下载一份nginx源代码,能够从nginx官方站点下载一份最新的. 看了nginx源代码,发现这是一份全然没有凝视,全然没有配置文档的代码. 如今你最希望要的是一份凝视版的nginx源代码,能够从以下的链接中下载一份: https://github.com/jianfengye/nginx-1.0.14_comment 这份凝视版源代码会不断进行更新的 好了,第一个问题, nginx的main函数在