- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于OpenGL及三维物傩纹理贴图研究
基于OpenGL的三维物傩纹理贴图研究
关键字: OpenGL 纹理贴图 三维物体 纹理贴图是开发三维图形系统的重要一环。本文论述了结舍c语言与OpenGL实现三维物体纹理贴图的思路与方法。并通过实例验证了纹理贴图技术在绘制真实感图形中的可行性。
在软件开发过程中,为了能够更好地再现三维图形,常常需要绘制逼真的景物。现实世界中的物体表面往往有着丰富的纹理,因此,要绘制逼真的三维物体,除了对物体进行光照处理外,还需要给物体表面附加上这种纹理特征,使之看起来更真实,这就要用到“纹理贴图”技术。文中将论述在Windows窗口系统下,用C语言和OpenGL实现三维物体的纹理贴图过程,从中可以看到纹理贴图的一般性原理与方法。
1、纹理贴图的概述
纹理贴图技术又称纹理映射技术,是计算机图形学中广泛应用的一项重要技术。传统的几何造型很难描述景物表面的微观细节,而利用纹理图像来描述景物表面各点处的反射属性,可以达到模拟景物表面丰富的纹理细节的目的,从而提高计算机生成图形的真实性。另一方面,采用纹理映射的方法可以大大地简化建模的过程。比如,同是一栋大楼表面。若完全用建模的方法来构造,则需要画出大楼的每一扇门、每一扇窗户;若采用纹理映射,只需建立简单的长方体模型,用拍下的大楼外观图片贴至模型表面即可。相比之下,工作量要小得多。
纹理贴图,从本质上讲,是—个位图图像。在程序中,—个纹理图像就是一个一维或二维数组,存储每一个像素的颜色值(包括R、G、B、A分值,分别存储一个像素的红、绿、蓝、透明度分值)。运用一个纹理贴图,就是把纹理图像根据纹理坐标对应到图元上。比如,现在有一个三角形,顶点坐标分别是Vl、V2、V3,以及一幅纹理图像。现在。我们可以在绘制三角形之前,为顶点VI、V2、V3指定纹理坐标,使每一个顶点的坐标和它的纹理坐标一一对应,如图1所示:
一旦建立起这种对应关系,就可以开启纹理贴图功能,让OPenGL根据顶点的贴图坐标渲染出指定的三角形,如图2所示:
这就是纹理贴图的原理。
2、OpenGL的纹理贴图
纹理映射是将制定图像的一部分映射到允许进行纹理映射的每个图段上。这种映射伴随着使用一幅图像的颜色到某一图段的(s,t,r)坐标所指示的位置上并修改该图段的RGBA颜色。概括地说,使用纹理绘制的一般步骤为:定义纹理贴图、控制纹理、说明纹理贴图方式、定义纹理坐标等。
2.1定义纹理
一般来说,离散法是比较常用的纹理定义方法,其实现函数为:gl_Texlmage2D()
该函数的原型如下:void glTelmage2D(GLenum target,Glint level,GLenum components,GLsizei width,GLsizei height,Glint border,GLenumformat,GLenum type,const GLvoid4pixels)
其中:target指定纹理映射,此处必须是GLTEXTURE2D;Jevel指定纹理图像分辨率的级数,当只有一种分辨率时,level=0;Components是选择用于调整和混合的成分;width和height分别指定纹理图像的宽和高,必须是2n,n为正数;Border为边界的宽度,必须是0和1;format和type分别指定纹理映射的格式和数据类型;Pixels指定一个指针,指向纹理数据在内存中的位置。
2.2控制纹理
纹理图像在映射到物体时会产生许多问题。这些问题主要有纹理图像的纹理怎样对应到屏幕上的像素、怎样通过纹理贴图实现纹理缩放和纹理重复等。其实现函数为glTexParameter(),该函数的原型(以glTexParameterf形式为例)为:void glTexParameterf(GLenum target,GLeHum pname,GIAloat param),其中target参数为目标纹理,pname参数的取值有以下几个:GL_EXTURE_MIN_FILTER、GL_TEXTURE_MAG_FILTER、GL_TEXTURE_WRAP_S、GL_TEXTURE_WRAP_T,而param参数的取值要根据pname而定。
2.3纹理贴图模式
OpenGL用于纹理贴图方式的函数为glTexEnv(),该函数的原型(以glTexEnvf形式为例)为:void glTexEnvf(GLenum target,GLenum pname,GLtloat param),其中target参数必须为GL_TEXTURE_ENV,pname参数必须为GL._TEXTURE ENv—MODE,而参数param为GL._MODULATE、GLDECAL或GL_BLEND。
2.4纹理坐标
纹理坐标控
文档评论(0)