实验三3DMAX模型设计与VC调用.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验三3DMAX模型设计与VC调用

实验三 3DMAX模型设计与VC调用 一、实验目的与要求 学习3DMAX的数学原理、图形结构、文件格式; 掌握3DMAX系统模块、功能结构、图形绘制技术; 掌握3DMAX光照、材质、纹理、动画制作的基本原理; 掌握基于Visual C++环境调用3DS等格式文件的原理、过程与步骤; 掌握基于OpenGL环境控制3DMAX模型的原理、过程与步骤; 熟悉Visual C++、OpenGL与3DMAX的混合编程与接口技术。 二、实验仪器与设备 微型电子计算机 80台 Windows 2000以上版本操作系统 80套 Visual C++ 6.0开发系统 80套 3DMAX 7.0以上开发系统 80套 OpenGL 2.0以上函数库 80套 三、实验内容与步骤 1. 用Visual C++ 6.0、OpenGL为工具,基于Win32编写一段程序读取3DS文件 实验流程图 图3-1 基于Win32流程图 1.2主要代码 // 构造函数的功能是初始化tChunk数据 CLoad3DS::CLoad3DS() { m_CurrentChunk = new tChunk; // 初始化并为当前的块分配空间 m_TempChunk = new tChunk; // 初始化一个临时块并分配空间 } // 打开一个3ds文件,读出其中的内容,并释放内存 bool CLoad3DS::Import3DS(t3DModel *pModel, char *strFileName) { char strMessage[255] = {0}; // 打开一个3ds文件 m_FilePointer = fopen(strFileName, rb); // 确保所获得的文件指针合法 if(!m_FilePointer) { sprintf(strMessage, Unable to find the file: %s!, strFileName); MessageBox(NULL, strMessage, Error, MB_OK); return false; } // 当文件打开之后,首先应该将文件最开始的数据块读出以判断是否是一个3ds文件 // 如果是3ds文件的话,第一个块ID应该是PRIMARY // 将文件的第一块读出并判断是否是3ds文件 ReadChunk(m_CurrentChunk); // 确保是3ds文件 if (m_CurrentChunk-ID != PRIMARY) { sprintf(strMessage, Unable to load PRIMARY chuck from file: %s!, strFileName); MessageBox(NULL, strMessage, Error, MB_OK); return false; } // 现在开始读入数据,ProcessNextChunk()是一个递归函数 // 通过调用下面的递归函数,将对象读出 ProcessNextChunk(pModel, m_CurrentChunk); // 在读完整个3ds文件之后,计算顶点的法线 ComputeNormals(pModel); // 释放内存空间 CleanUp(); return true; } // 下面的函数释放所有的内存空间,并关闭文件 void CLoad3DS::CleanUp() { fclose(m_FilePointer); // 关闭当前的文件指针 delete m_CurrentChunk; // 释放当前块 delete m_TempChunk; // 释放临时块 } // 下面的函数读出3ds文件的主要部分 void CLoad3DS::ProcessNextChunk(t3DModel *pModel, tChunk *pPreviousChunk) { t3DObject newObject = {0}; // 用来添加到对象链表 tMaterialInfo newTexture = {0}; // 用来添加到材质链表 unsigned int version = 0; // 保存文件版本 int buffer[50000] = {0}; // 用来跳过不需要的数据 m_CurrentChunk = new tChunk; // 为新的块分配空间 // 下面每读一个新块,都要判断一下块的ID,如果该块是需要读入的,则继续进行 // 如果是不需要读入的块,则略过 // 继续

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档