在OPENGL中读取3DS模型文件.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在OPENGL中读取3DS模型文件

在OpenGL中读取3DS模型文件 这里要解决的一个关键问题是: 如何在OpenGL中读取3DS模型文件。 在这部分介绍了3DS文件的存储格式,给出了OpenGL与3DS的接口编程,这对三维模型的创建提供了极大的方便,还综合运用其他的技术和算法来完成三维动画。 6.1 3ds文件格式简介 3DS文件由许多块组成,每个块首先描述其信息类别,即该块是如何组成的。块的信息类别用ID来标识,块还包含了下一个块的相对位置信息。因此,即使不理解一个块的含义,也可以很容易地跳过它,因为该块中指出了下一个块的相对于该块起始位置的偏移字节数。与许多文件格式一样,3DS二进制文件中的数据也是按低位在前、高位在后的方式组织的,例如,2个十六进制字节,4A 5C组成的整型数,表明5C是高位字节,4A是低位字节;对于长整型数,如:4A 5C 3B 8F表明 5C4A是低位字,而 8F3B是高位字。 下面描述块的具体定义。块的前两项信息分别是:块的ID和块的长度(下一个块相对于该块的字节偏移量),块的ID是一个整型数,而块的长度是一个长整型数。每个块实际上是一个层次结构,不同类型的块,其层次结构也不相同。3DS文件中有一个基本块,其ID是4D4D,每一个3DS文件的开头都是由这样一个块构成。基本块内的块称为主块。 为了对块的层次结构有一个初步的认识,下面给出一个图表来说明不同类型(ID)的块及其各自在文件中的位置。如下图所示给每一个块都起了一个名字,这样更便于理解或直接转换为源程序。 图6.1 3DS文件结构图 颜色块是文件中自始至终都能见到的一种块类型,颜色块总共有3种类型,它们是COL_ RGB,COL_ TRU和COL_ UNK。 6.2 存储3ds文件的数据结构 本节将对程序中所用到的一些重要数据结构进行简单说明,以便使读者更进一步了解3ds文件所存储的数据。 1.t3Dmodel: struct t3DModel { int numOfObjects; // object的数量(总数) int numOfMaterials; // materials 的数量(总数) vectortMaterialInfo pMaterials; // 存贮materials 信息的列表 vectort3DObject pObject; // 存贮object信息的列表 }; 2.tMaterialInfo: struct tMaterialInfo { char strName[255]; // 材质的名字 char strFile[255]; // 材质的文件名(真正存在harddisk的bmp) BYTE color[3]; // object 的颜色(RGB) (0~255) Int texureId; // 材质的ID } 3.3DObject: struct t3DObject { int numOfVerts; // object 的顶点数 int numOfFaces; // object 的面数 int numTexVertex; // 材质坐标的个数 int materialID; // 材质ID ,正是材质数组中的索引 bool bHasTexture; //有材质就为真 char strName[255]; // object的名字 CVector3 *pVerts; // object 的顶点,将会指向一个数组 CVector3 *pNormals; // object 的法线(只是一个近似的法线)将会指向一个数组 CVector3 *pFaceNorm; // 面的法线,将会指向一个数组 CVector3 *pFaceVert1; // 面的顶点x,将会指向一个数组 CVector3 *pFaceVert2; // 面的顶点y,将会指向一个数组 CVector3 *pFaceVert3; // 面的顶点z,将会指向一个数组 CVector2 *pTexVerts; // 材质的坐标(二维)将会指向一个数组 tFace *pFaces; // 面的结构(在后面有注解)将会指向一个数组 }; 其中: struct tFace { int vertIndex[3]; // 组成面三角形顶点的索引(整型) int coordIndex[3]; // 组成面三角形材质的索引(整型) }; 6.3 3D动画的实现 读取3DS文件的全部操作封装在了CLoad3DS类中,有关CLoad3DS类的具体定义所附光盘中的源程序3ds.cpp and 3ds.h。 /

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档