- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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。
/
您可能关注的文档
最近下载
- 智慧医院-医务管理系统设计方案.pdf VIP
- 医务管理系统建设方案.doc VIP
- 石油 - GB-T 7631.10-2013 润滑剂、工业用油和有关产品(L类)的分类 第10部分:T组(涡轮机).pdf
- 2023年北京市中考英语试卷(附答案详解).docx VIP
- 《防止校园欺凌》ppt课件(图文).pptx
- 2024初中语文新部编版七年级上册全册核心素养教案.pdf VIP
- 数字电子技术3套考试题目(含答案) .pdf VIP
- 卡特彼勒C11 和C13 ON-HIGHWAY 发动机装配手册 英文.pdf VIP
- 设备管理思路及方案.docx
- 年产3万吨塑料制品、2万吨再生塑料颗粒项目环境影响报告表.doc
文档评论(0)