【OpenGL导入3D模型技术研究】离子导入技术
摘要 OpenGL是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以与Visual C++紧密接口,便于实现机械手的有关计算和图形算法,可保证算法的正确性和可靠性;OpenGL使用简便,效率高[1]。本文对OpenGL导入3D模型技术进行了论述
关键词 OpenGL;导入;3D模型
中图分类号TP391 文献标识码A 文章编号 1674-6708(2011)34-0168-01
OpenGL是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以与Visual C++紧密接口,便于实现机械手的有关计算和图形算法,可保证算法的正确性和可靠性;OpenGL使用简便,效率高[1]。
1 难点
OpenGL导入3D模型存在一些难点[2]:
难点一:3Dsmax软件制作出的模型包括很多属性、因素,比如模型大小、形状、材质、纹理、贴图、光照等,还有模型中包含多少对象、材质间的不同、贴图坐标等等,必须要知道程序需要分析哪些、遍历哪些。
难点二:利用OpenGL导入3D模型,以上的那些属性、因素的分析需要函数来实现,要从OpenGL库中找到合适的函数来实现。
2 OpenGL导入3D模型
#define MAX_TEXTURES 100 // 最大的纹理数目
// 定义D点的类,用于保存模型中的顶点 class CVector3 {public: float x, y, z;};
// 定义D点类,用于保存模型的UV纹理坐标 class CVector2 {public: float x, y;};
//面的结构定义//材质信息结构体//对象信息结构体//模型信息结构体// 生成纹理,并将其保存在纹理队列中// 改变显示为全屏模式// 生成用户窗口// 设置像素格式// 初始化投影变换// 初始化OpenGL// 初始化整个程序// 渲染场景// 释放程序占用的内存空间
3 创建纹理
void CreateTexture(UINT textureArray[], LPSTR strFileName, int textureID)
{ AUX_RGBImageRec *pBitmap = NULL;
if(!strFileName) // 如果无此文件,则直接返回
return;
pBitmap = auxDIBImageLoad(strFileName); // 装入位图,并保存数据
if(pBitmap == NULL) // 如果装入位图失败,则退出
exit(0);
// 生成纹理
glGenTextures(1, &textureArray[textureID]);
}
4 导入3DS文件
将3DS文件装入到模型结构体中,并且需要遍历所有的材质、所有的对象、判断是否有纹理映射,将3DS文件从头到尾的分析,通过程序里ProcessNextChunk读出文件中的重要内容,如材质信息、对象名称;ProcessNextObjectChunk再处理文件中对象的信息,读入块、读入对象顶点、读入对象的面、材质名称及UV纹理坐标等等;ProcessNextMaterialChunk处理所有的材质信息,名称、RGB颜色、纹理信息头部、材质文件的名称等等。
5 读出的3D模型
参考文献
[1]Shreiner D.OpenGL编程指南,2008.
[2]陈鹏,管涛.基于仿射重投影的增强现实三维注册方法[J].计算机辅助设计与图形学学报,2010,22(3).
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文
