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主要是对基本块,主块,对象的纹理、面、顶点信息,材质的定义进行解释。
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 //