现在的位置: 首页 > 综合 > 正文

学习OpenGL(七)纹理贴图

2017年10月04日 ⁄ 综合 ⁄ 共 2175字 ⁄ 字号 评论关闭

    

学习OpenGL(七)纹理贴图

kezunhai@gmail.com

http://blog.csdn.net/kezunhai

            纹理贴图是计算机图像处理最为显著的技术进步,OpenGL提供了纹理图像贴图函数,可以将图像与屏幕上的多边形进行拟合。同时纹理贴图还可用于消除文本锯齿、反射贴图和其他将图像放到多边形中的应用。与纹理贴图相关的函数有:

          (1)glTestImage1D/ glTextImage2D:图像与多边形的拟合

          (2)TextureLoad:使用.bmp文件作为纹理

          (3)glTextGen:自动生成纹理坐标

          (4)gluBuild1DMipmaps/ gluBuild2DMipmaps:使用多贴图(mipMap)

          每一种纹理实际上是某种类型的图像。1D纹理是只有宽度没有高度的图像(或者说至少一个像素宽或高的图像),1D纹理可以很好的取代传统的明暗处理技术,并且加速过程中的渲染。2D纹理是多一个像素宽和高的图像,通常从.BMP文件中加载。纹理的定义如下:

glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);

        以上两个函数分别用于定义1D和2D纹理,其中target参数指定定义哪一种纹理,对于1D,则是GL_TEXTURE_1D;level参数指定纹理图像的详细级别,默认为0,其他数值用于多贴图纹理;component参数指定每一像素颜色值的数字,对于颜色索引纹理,component参数必须为1、3和4;width和border指定纹理图像的尺寸和边框宽度;format指出颜色值的类型,可以为GL_COLOR_INDEX、GL_LUMINANCE、GL_RED、GL_GREEN、GL_BLUE、GL_ALPHA、GL_RGB、GL_RGBA等;type表示贴图类型,可以为GL_BYTE、GL_UNSIGNED_BYTE等。例如:

glTexImage1D( GL_TEXTURE_1D, 0, 3, 8, 0, GL_RGB, GL_UNSIGNED_BYTE, imagedata);

         1)纹理模式 glTexEnvi(GLenum target, GLenum pname, GLint param)

           OpenGL对于不同的渲染类型定义了三种纹理模式:

         (1)GL_MODULATE(默认模式):此种模式会调整当前的亮度和颜色信息,使之适应纹理图像,这也是经常使用的模式。

         (2)GL_DECAL:该模式仅仅使用纹理,颜色和照明信息不会改变纹理的外观。这一模式经常与反射贴图一起使用。

         (3)GL_BLEND:该模式可以应用多种成分纹理,纹理图像经过当前的纹理颜色和亮度信息混合而成。

         2)纹理滤镜

          OpenGL使用纹理滤镜在纹理像素之间进行内插,OpenGL提供两种类型的纹理滤镜,分别是缩小滤镜(用于多边形比纹理小的情形:GL_TEXTURE_MIN_FILTER)和放大滤镜(用于大于纹理图像的多边形:GL_TEXUTRE_MAG_FILTER)。可以使用下面两个函数设置滤镜:

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter);
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter);

纹理图像滤镜如下:

             3)纹理坐标

             纹理坐标是将纹理图像的一个特殊位置与多边形的丁点相关联。对于1D纹理图像,glTexCoord2函数在纹理图像内部设置位置:

glTexCoord1d(GLdouble s);
glTexCoord2d(GLdouble s, GLdouble t);
glTexCoord2d(GLdouble* st);

根据数据类型不同,参数还有GLUINT、和GLfloat等类型。

            4)纹理绕转

           纹理图像通常位于0.0和1.0之间,包括0.0和1.0。当坐标不在这一范围内时,他们或被加紧(wrap=GL_CLAMP,默认情况),或者重复(wrap = GL_REPEAT)。对于GL_CLAMP,当纹理坐标到了边界时,将在边界处停止,而不绕到其他边;而当GL_REPEAT时,纹理图像根据需要进行重复,绕到图像的另一边。设置函数形式如下:

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap);

作者:kezunhai出处:http://blog.csdn.net/kezunhai欢迎转载或分享,但请务必声明文章出处。

抱歉!评论已关闭.