如何使用Qt 3D开发3D场景程序 - qushaohui

时间:2024-03-03 18:24:50

如何使用Qt 3D开发3D场景程序

目前Qt已经提供大量的3D API的支持了,作为对OPENGL的一种补充,QT 3D使用起来更加方便,并且跨平台。但是Qt中关于QT 3D的文档并不是很全面。很多初学者包括我自己现在都是摸索着前进的。网上虽然也有教程,但是却都是让人云里雾里不知所以然的。不过以后会好很多的了,因为Qt即将发布qt3DStudio了,有了这个工具,咱们以后开发qt3D的程序时就容易上手了。

如何使用Qt 3D开发3D场景程序?
 
 

工具/原料

 
  • Qt Creator
  • Qt 4.9.2

方法/步骤

 
  1.  

    首先我们需要找到Qt 3D的帮助文档,我们直接在QtCreator中搜索qt3d,然后就可以看到和3D相关的文档了。这里我们类比一下其他3D程序的开发工具,譬如Unity3D,采用C#语言开发,而QtStudio以后就应该是C++和QML开发了,所以大家如果没用过Unity3D,也可以去下载一个试试看,建立一个初步的认识。

    如何使用Qt 3D开发3D场景程序?
  2.  

    然后我们还需要查看Qt3D的案例,这些案例里面有一些图片和材料文件,估计初学者都不知道是什么东西,如果我们要仿照案例去写自己的程序,又该如何入手呢?这里我们需要两个工具,一个是blender,Linux下最流行的3D建模软件,blender也可以在MAC和Windows上使用,因为它是跨平台的。大家可以直接使用sudo apt-get install blender进行安装。

    如何使用Qt 3D开发3D场景程序?
  3.  

    Blender软件是用来查看Qt 3D例子中资源文件中的obj材料文件的,如下图。我们可以使用blender打开这些obj文件,也可以自己动手做一些材料,然后导出为obj文件。导入导出见下图。

    如何使用Qt 3D开发3D场景程序?
    如何使用Qt 3D开发3D场景程序?
  4.  

    然后我们在上面还看到一种图片,这种图片格式很新颖,我还是第一次见,估计初学者很多也是第一次见吧。所以既然Qt用到了,咱们仿写程序的时候,没有这个图片可就不好办了。所以这里我们还要另一工具,cwebp,大家可以使用sudo apt-get install webp安装即可。Webp格式的图片是谷歌开发的一种新型的比jpg,png等图片更适合在网络上进行传输的图片,将来估计会广泛使用的,这里我们就先跟着QT尝个鲜吧。

    这里我们可以将png图片转换为webp格式的图片试试。如下图,cwebp的使用方式。

    如何使用Qt 3D开发3D场景程序?
  5.  

    接下来,我们阅读Qt 3d的案例源码是没问题了,大家总体上应该都有认识了吧,Qt3D就是把这些3D的场景图片等素材组合起来,实现一些三维场景的效果。这里我们最常见的就是游戏了,把游戏的素材,图片经过程序上的处理,这里素材才真正的实现了游戏中打斗,跳动,场景切换的效果了。

    如何使用Qt 3D开发3D场景程序?
  6.  

    到这里,我们的工具准备好了,接下来就是需要理解一些概念了。这些概念有,渲染,网格,几何,材料,阴影,光线遮蔽,多材质,统一缓存对象,ECS(实体组件系统)。前面的几个,我们只需要在blender中看看,就应该会明白的了,我们主要看ECS,这个是我们编写程序的基本。

    如何使用Qt 3D开发3D场景程序?
  7.  

    从上面的ECS框架图,大家可以看到,ECS分成实体,组件,应用面,应用面实现了纵向特定的由一个或是多个组件组合提供的一部分功能。例如,渲染面应用于具有网格,材料,或是转换组件的实体。由于ECS采用组合方式,而不是继承,也就可以在运行时通过添加或者移除组件来改变一个对象的行为。Qt 3D的基类是Qt3DCore::QNode,继承自QObject.  Qt3DCore::QEntity仅仅是一个对象,可以组合0个或是多个Qt3DCore::QComponent组件实例。

    我们这里看Qt 3D的案例3D文字的实现过程,此程序很适合我们初步认识QT 3D的实现流程,也就是说当你进行QT 3D程序的开发时,脑海中想着这些步骤就容易理解的了。图1创建3D窗口,图2一个平面,图3创建材料,图4创建摄像机,一个三维场景程序就是这几部分组成了。更深入的,我们在日后的文章中继续探讨把。

    如何使用Qt 3D开发3D场景程序?
    如何使用Qt 3D开发3D场景程序?
    如何使用Qt 3D开发3D场景程序?
    如何使用Qt 3D开发3D场景程序?
  8.  

 

https://i.cnblogs.com/EditArticles.aspx?opt=1