Qt+OpenGL 3ds模型的导入

Qt是一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。Qt很容易扩展,并且允许真正地组件编程。基本上,Qt同 X Window 上的 Motif,Openwin,GTK 等图形界 面库和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西。  


Opengl是行业领域中最为广泛接纳的2D/3D图形API。通过一些转换程序可以很方便地将3DS/3DSMAX等3D图形设计软件制作的3DS模型文件转换成OpenGL顶点数组。


在这里我将两者结合起来实现了3DS格式模型的导入。其实,在网上有很多类似的源码或者demo。但是把Qt和OpenGL结合起来运用的例子其实并不多,在这篇文章,我将仔细教大家如何将漂亮的3D模型放到程序中演示(有不足的地方希望大家多多指正,我的代码参考了OpenGL游戏编程和学OpenGL编3D游戏)。



3ds文件结构是由“块”组成的。它们描述了接在它们后面的数据的信息,即这些数据是如何组成的。“块”是由两部分组成的:1.ID;2.下一个数据块的位置。也就是说,如果你不明白这个块的用处,你可以迅速地跳过它。因为下一个数据区的相对位置(字节数)已经得到了。二进制的3ds文件是用一种特殊的方法写成的:也就是低字节在前,高字节在后(译者:二进制文件都是这样的)。3ds.h里面的一些define主要是对基本块,主块,对象的纹理、面、顶点信息,材质的定义进行解释。


//  基本块(Primary Chunk),位于文件的开始
#define PRIMARY       0x4D4D
//  主块(Main Chunks)
#define OBJECTINFO    0x3D3D		// 网格对象的版本号
#define VERSION       0x0002		// .3ds文件的版本
#define EDITKEYFRAME  0xB000		// 所有关键帧信息的头部
//  对象的次级定义(包括对象的材质和对象)
#define MATERIAL	  0xAFFF		// 保存纹理信息
#define OBJECT		  0x4000		// 保存对象的面、顶点等信息
//  材质的次级定义
#define MATNAME       0xA000		// 保存材质名称
#define MATDIFFUSE    0xA020		// 对象/材质的颜色
#define MATMAP        0xA200		// 新材质的头部
#define MATMAPFILE    0xA300		// 保存纹理的文件名
#define OBJ_MESH	  0x4100		// 
  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值