浅析OpenGL技术和游戏.doc

上传人:m**** 文档编号:559780753 上传时间:2023-01-25 格式:DOC 页数:10 大小:48.50KB
返回 下载 相关 举报
浅析OpenGL技术和游戏.doc_第1页
第1页 / 共10页
浅析OpenGL技术和游戏.doc_第2页
第2页 / 共10页
浅析OpenGL技术和游戏.doc_第3页
第3页 / 共10页
浅析OpenGL技术和游戏.doc_第4页
第4页 / 共10页
浅析OpenGL技术和游戏.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《浅析OpenGL技术和游戏.doc》由会员分享,可在线阅读,更多相关《浅析OpenGL技术和游戏.doc(10页珍藏版)》请在金锄头文库上搜索。

1、摘 要OpenGL是一个开放的三维图形软件包,而Visual C+是目前主要的OpenGL开发工具。OpenGL即开放性图形库,它是一种高性能的开放式且功能强大的3D图形库,具有几百个指令和函数。本文简要介绍了OpenGL的纹理贴图技术及其在MFC中的基本操作步骤。并通过最后的实例验证了纹理贴图技术在绘制真实感图形中的必要性.还讨论了两种将常见三维模型转入OpenGL中实现交互的方法,首先对3DS文件进行分析,然后给出转化的思路。从而将三维建模软件产生的三维模型移植到三维场景中,实现仿真。关 键 词OpenGL;MFC;纹理贴图;三维重构;虚拟现实;虚拟仓库浅析OpenGL技术和游戏一、Ope

2、nGL的纹理贴图技术现实世界中的物体表面往往有各种纹理,因此要绘制逼真的三维物体,除了对物体进行光照处理外,还需要加上纹理贴图,使物体看起来更真实。OpenGL是SGI公司的一个开放的三维计算机图形软件接口,为用户提供丰富的图形库,能快速渲染出高质量的三维彩色图像。OpenGL编程的重点是图形的生成和如何产生各种真实效果,但是编写一个优秀的Windows程序,还必须用到用户界面接口。VC+的MFC模式可以较为完美地实现对OpenGL生成的效果图的动态交互操作。1纹理贴图技术简介纹理贴图技术也叫纹理映射技术,它是计算机图形学中广泛 应用的一项重要技术。传统的几何造型只能表示景物的形状,无法描述景

3、物表面的微观细节,而利用 纹理图像来描述景物表面各点处的反射属性,可以达到模拟景物表面丰富的纹理细节的目的,提高计算机生成图形的真实性。另一方面,采用纹理映射的方法可以大大地简化建模 的过程。比如,同是一栋大楼表面,若完全用建模的方法来构造,则需要画出大楼的每一扇门、每一扇窗户;若采用纹理映射,只需建立简单的长方体模型,用拍下的大楼外观图片贴至模型表面即可。相比之下,工作量要小得多。11 OpenGL纹理贴图纹理映射是将指定图像的一部分映射到允许进行纹理映射的每个图段上。这种映射伴随着使用一幅图像的颜色到某一图段的(s,t,r)坐标所指示的位置上并修改该图段的RGBA颜色。但要特别注意的是,在

4、OpenGL中,纹理映射仅在RGBA模式下说明,在颜色索引模式下,它的使用未作定义。概括地说,使用纹理绘制的一般步骤为:定义纹理贴图、控制纹理、说明纹理贴图方式,定义纹理坐标等。21 定义纹理纹理的定义有两种:连续法和离散法。连续法把纹理定义为一个二元函数,函数的定义域就是纹理空间。而离散法则是把纹理定义在一个二维数组中,该数组表示纹理空间中行间隔和列间隔固定的一组网格点上的纹理值。网格点之间的其它点的纹理值可以通过对相邻网格点上纹理值进行插值来获得。通过纹理空间与物体空间之间的坐标变换,可以把纹理映射到物体表面。一般来说,离散法是较为常用的纹理定义方法。其实现函数为glTexlmage2D(

5、)。该函数的原型如下:void glTexImage2D(GLenum target,GLint level,GLint internalformat, GLsizei width,GLsizei height,GLint border, GLenum format,GLenum type,const GLvoid *pixels);其中:target指定纹理映射,此处必须是GLTEXTURE 2D;level指定纹理图像分辨率的级数,当只有一种分辨率时,level=0;Components是选择用于调整和混合的成分;width和height分别指定纹理图像的宽和高,必须是2 ,凡为正数;Bo

6、rder为边界的宽度,必须是0和1;format和type分别指定纹理映射的格式和数据类型;Pixels指定一个指针,指向纹理数据在内存中的位置。22 控制纹理纹理图像在映射到物体时会产生许多问题。这些问题主要有纹理图像的纹理怎样对应到屏幕上的像素、怎样通过纹理贴图实现纹理缩放和纹理重复等。其实现函数为glTexParmneter(),该函数的原型(以glTexParmneterf形式为例)为void glTexParameterf(GLenum target,GLenum pname,GLfloat param);23 说明纹理贴图方式OpenGL用于纹理贴图方式的函数为glTexEnv()

7、,该函数的原型(以glTexEnvf形式为例)为:void glTexEnvf(GLenum target,GLenum pname,GLfloat param);其中target参数必须为GL_TEXTURE_ENV,pname参数必须为GL_TEXTURE_ENV_MODE,而参数parmn为GL_MODULATE, GL_DECAL, GL_BLEND, or GL_REPLACE。24 定义纹理坐标纹理坐标控制纹理图像中的像素怎样映射到物体。纹理坐标可以是1、2、3、4维的,通常用齐次坐标来表示,即(5,t,r,q)。OpenGL定义纹理坐标的函数为glTexCoord()。该函数共有

8、32种不同的形式。例如:glTexCoord4f(OOf,0Of,0Of,0Of)。二、 三维模型转入OpenGL中实现交互的方法OpenGL的英文全称是“Open Graphics Library”即“开放的图形程序接口”,因为其良好的可移植性和跨平台性,已逐渐成为高性能图形开发和交互式视景仿真的国际图形标准。它是一种高性能的开放式且功能强大的3D图形库,具有几百个指令和函数。使用这些指令和函数可以构造出高质量的静止物体模型和动态图像,并且可以实现对模型的实时交互操作过程。但是OpenGL中并没有提供建模的高级命令,其实现过程也是通过基本的几何图元点、线和多边形来建立三维立体模型的,过程比较

9、繁琐,编程量较大。 现在有许多优秀的三维建模软件如3DS MAX,AUTOCAD等,都可以根据对象很方便地建立物体模型,且不需要编程便可很直观的构造模型,模型的外观更为精细。在OpenGL中使用三维模型一种比较好的方法是先用三维建模软件建立模型,再把这些模型转入OpenGL程序,对其进行控制。本文主要讨论将三维模型转入OpenGL程序常见的两种方法。 OpenGL是一个开放的三维图形软件包,而Visual C+是目前主要的OpenGL开发工具。本文简要介绍了OpenGL的纹理贴图技术及其在MFC中的基本操作步骤。并通过最后的实例验证了纹理贴图技术在绘制真实感图形中的必要性。 1.模型的三维数据

10、格式 存储三维图形数据的文件格式有很多种,其中比较常见的有: obj格式、3DS格式、WRL格式等。在本文中以3DS格式为例进行介绍。在将三维模型转入OpenGL之前,首先将三维模型保存为3DS格式。在3DS文件中就保存了所建模型模型的所有三维数据信息,包括模型全部顶点、面、材质、法线和纹理等的数据信息。3DS文件是由许多块组成,每个块首先描述其信息类别,即该块是如何组成的。块的信息类别用ID来标识,块还包含了下一个块的相对位置信息,便于跳转。 2.将模型转入OpenGL程序的两种方法 (1)编写OpenGL程序,将模型转入 将模型转入OpenGL的程序中总共用到3种主要的数据结构:顶点集(V

11、ertices)、多边形列表(PolyList)、和相关三角形列表(CommonTriangleList)。顶点集是顶点及其法向量的列表,多边形中的顶点将用在下标表示,OpenGL将这个数组视为一个顶点数组。这里存储的法向量是每一个顶点的法向量,而不是多边形的法向量。多边形列表包括一些列的材质,一个材质由这样一组属性组成:漫反射颜色、光照度、和纹理映射等。与每一种材质相对应的是一组三角形,每一个三角形由一组三元整数组表示,它们分别是三角形每个顶点在顶点集中的下标。相关三角形列表与顶点集具有相同的大小,它是一个指向多边形列表每一个包括该顶点的三角形的链表。相关三角形列表被用来建立每个顶点的法向量

12、。有了模型各种属性的信息,我们就可以在创立显示列表中根据这些指针变量中存入的相应数据来再现模型。在创建新的显示列表(g1NewList)中,使用glBegin(GL_TRIANGLES)和glEnd ()函数来绘制模型,所有具体属性的绘制均在这两个函数之间实现。对于每一个面的绘制,都是先赋好材质,再定义法线和渲染纹理,这些工作都完成后,就可以通过绘制顶点来绘制面了。程序中判断是否具有纹理部分省略,其实现过程与其它属性类似。然后在需要绘制模型的时候使用函数调用即可。 在OpenGL程序入3DS模型采用了根据3DS文件的数据格式来编写OpenGL程序来读取数据信息,在程序中生成模型的办法,这种方法

13、在操作上实际是比较繁琐的,编程量很大。 (2)运用软件将模型转化为cpp文件,然后转入OpenGL程序 有一些现成的软件可以专门用来转换三维模型。3D Exploration便是其中的一种。3D Exploration也是一种专业的图像技术软件,它可以读入许多建模软件所建的模型文件,并也具有渲染环境和制作动画的功能。 我们使用3D Exploration软件读入模型的3DS文件,通过另存为将其转化成能为OpenGL所用的cpp文件。这样我们就较轻松的拥有了表示模型各种参数的代码,而不需要自己编写,从而大大减轻了编程的工作量。最终转化后的文件是由大量的浮点数组成,这些浮点数包含了模型面、材质、顶

14、点、法线和纹理等的全部信息,并按照这些属性分类。然后我们在OpenGL程序中专门定义一个读取模型参数的类,在此类中实现读取相应的浮点数的函数的所有功能,再在主程序中调用。这段代码运行后,这些变量中就会存入对应表示相应属性的数据。最后再编程遍历所有的顶点,法线,纹理,从而生成模型。 通过这种方法实现3DS格式模型的导入,编程简单,但是缺点也很明显,生成的.cpp文件体积较大,无论是存储或传输都很不方便。 将三维模型转入OpenGL程序以实现人机交互控制在工程、游戏等领域有着广泛的应用,特别是随着虚拟现实技术的发展,更显现出它的重要意义和实用价值。本文结合目前的主流技术对三维模型转入OpenGL程

15、序的方式进行了一定的研究和探索。1谢 辞走的最快的总是时间,来不及感叹,大学生活已近尾声,三年多的努力与付出,随着本次论文的完成,将要划下完美的句号。本论文设计在宋丽老师的悉心指导和严格要求下业已完成,从课题选择到具体的写作过程,论文初稿与定稿无不凝聚着宋丽老师的心血和汗水。在此向宋丽老师表示深深的感谢和崇高的敬意!在临近毕业之际,我还要借此机会向在这三年中给予我诸多教诲和帮助的各位老师表示由衷的谢意,感谢他们四年来的辛勤栽培。不积跬步何以至千里,各位任课老师认真负责,在他们的悉心帮助和支持下,我能够很好的掌握和运用专业知识,并在设计中得以体现,顺利完成毕业论文。同时,在论文写作过程中,我还参考了有关的书籍和论文,在这里一并向有关的作者表示谢意。我还要感谢各位同学以及我的各位室友,在毕业设计的这段时间里,你们给了我很多的启发,提出了很多宝贵的意见,对于你们帮助和支持,在此我表示深深地感谢!参考文献1 向世明OpenGL编程与实例北京:电子工业出版社。2 Hearn D,Baker M P计算机图形学北京:电子工业出版社。3 Kruglinski D JVisual C+技术内幕(第四版)北京:清华大学出版社。4 李颖,朱伯立OpenGL技术应用实例精粹北京:国防工业出版社。5

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号