qt使用assimp加载模型_有关Assimp与Qt3D

本文详细介绍了Qt3D的历史和发展,以及在Qt5中的地位。Qt3D使用Assimp库进行模型导入,但可能会遇到如'Chunk is too large'的错误。为了解决这类问题,推荐使用Assimp库的查看工具assimpviewer。同时,文章提供了一个自实现的3ds文件加载示例链接,帮助理解3ds格式解析。
摘要由CSDN通过智能技术生成

有关Assimp与Qt3D

最近朋友们会向我提及有关Qt3D的问题,我这里统一地向大家分析一下,希望我自己的一点对Qt3D和Assimp库的一些看法对大家能够有所帮助。

原创文章,反对未声明的引用。原博客地址:http://blog.csdn.net/gamesdev/article/details/21164081

Qt3D在Qt4时代就已经存在了,当时Qt这个项目还处于诺基亚的管理之下。到了Digia接手Qt的时候,Qt3D作为遗留项目保留了起来。这里有我以前写的有关Qt3D的文字。最初Qt5出来的时候并没有包括Qt3D,很显然,因为要对Qt4时代诸多Qt子项目进行移植谈何容易!于是我们看到Qt5.0的时候Qt库非常精简,仍然有很多的Qt4库没有被移植过来,而且还有很多Bug!我想Digia希望通过Qt5.1、Qt5.2和Qt5.3对这些Bug进行修复,这样一个健壮的Qt基础库才能够支撑诸多Qt4时代的子项目。

Qt3D就是其中的一个,幸运的是,Qt源码重要的贡献群体KDAB正着手对Qt3D作Qt5的移植。其实对Qt3D的移植是很有必要的。因为在Qt4时期的QtOpenGL库中的一些类QGLWidget、QGLFunctions、QGLBuffer、QGLShader、QGLShaderProgram、QGLFrameBufferObject等等被标记为obsolete的了,取而代之的是QWindow、QOpenGLFunctions、QOpenGLBuffer、QOpenGLShader、QOpenGLShaderProgram、QOpenGLTexture(Qt5.2新增)、QOpenGLDebugLogger、QOpenGLFrameBufferObject等等。使用过Qt3D的朋友知道,Qt3D里面有一个类叫作QGLTexture2D,这是专门适配Assimp库用来处理2D图片的类。但是Qt5.2已经有了QOpenGLTexture,事实上它包括了1D、2D、3D、Cube纹理的处理。作为Qt的开发者会问,我们究竟要使用哪一个纹理相关的类呢?除此外QGLIndexBuffer、QGLVertexBundle这些类,分别对应OpenGL中的索引缓存和顶点缓存,但怎么说也没有Qt5中的QOpenGLBuffer来得科学。再说Qt3D源码正在重构,KDAB希望在Qt5.3能够看到它的身影,在Jira上也能看到Qt3D的RoadMap(路线图)以及进展,所以现在Qt5.2中使用未定型的Qt3D,个人感觉还是有点儿早。

Qt3D内有关模型的导入,使用的是Assimp库,于是有些错误可能来自于Assimp库。比如说有时候会出现“Assetimporter error: Chunk is too large”这样的问题,其实这个问题不是来自Qt3D的,而是底层的Assimp库的。这里我分享一个Assimp库实现的软件,叫“assimpviewer”。它可以方便地浏览各种模型格式的文件,其下载地址在这里。它是用Assimp库和DirectX来实现的,很遗憾只有Windows版。如果assimpviewer无法打开,那么Qt3D可能也载入不了了。下面是尝试载入一3ds文件的时候出现的错误:

出现“Asset importer error: Chunkis too large”这样的问题,一般是载入3ds格式文件的时候引入的。其实3ds这个格式解析的程序很多,但是由于3ds的格式规范是大家hack出来的,因此各家读取的出入很大。我也曾经实现过用Qt和OpenGL载入3ds格式的文件,其中涉及到了读取3ds格式的思想,包含了chunk的定义。地址在这里,有兴趣的话可以看看这究竟是如何实现的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值