OpenGL函数思考-glTexParameter

简介: OpenGL函数思考-glTexParameter函数原型:      void glTexParameterf(GLenum target,GLenum pname, GLfloat param)   ...

OpenGL函数思考-glTexParameter

函数原型:

      void glTexParameterf(GLenum target,GLenum pname, GLfloat param)

      void glTexParameteri(GLenum target,GLenum pname,GLint param)

参数说明:

  • target: 指定目标纹理,它只能取值GL_TEXTURE_1D或者GL_TEXTURE_2D;
  • pname:指定单值纹理参数的符号名称,可以选择的符号常数如下:GL_TEXTURE_MIN_FILTER、GL_TEXTURE_MAG_FILTER、GL_TEXTURE_WRAP_S、  GL_TEXTURE_WRAP_T;
  • param:指定pname的值

函数说明:

       图象从纹理图象空间映射到帧缓冲图象空间(映射需要重新构造纹理图像,这样就会造成应用到多边形上的图像失真),这时就可用glTexParmeteri()函数来确定如何把纹理象素映射成像素.

案例:

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
        GL_TEXTURE_2D: 操作2D纹理.
        GL_TEXTURE_WRAP_S: S方向上的贴图模式.
        GL_CLAMP: 将纹理坐标限制在0.0,1.0的范围之内.如果超出了会如何呢.不会错误,只是会边缘拉伸填充.

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
        这里同上,只是它是T方向

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    这是纹理过滤
        GL_TEXTURE_MAG_FILTER: 放大过滤
        GL_LINEAR: 线性过滤, 使用距离当前渲染像素中心最近的4个纹素加权平均值.

     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
        GL_TEXTURE_MIN_FILTER: 缩小过滤
GL_LINEAR_MIPMAP_NEAREST: 使用GL_NEAREST对最接近当前多边形的解析度的两个层级贴图进行采样,然后用这两个值进行线性插值.

注:
      GL_LINEAR使用了线性滤波的纹理贴图。这需要机器有相当高的处理能力,但它们看起来很不错。

      GL_NEAREST从原理上讲,这种方式没有真正进行滤波。它只占用很小的处理能力,看起来也很差。唯一的好处是这样我们的工程在很快和很慢的机器上都可以正常运行。
       我们在 GL_TEXTURE_MIN_FILTER和 GL_TEXTURE_MAG_FILTER时你可以混合使用 GL_NEAREST 和 GL_LINEAR。纹理看起来效果会好些,如果我们更关心速度,可以全采用低质量贴图。

       GL_TEXTURE_MIN_FILTER在图像绘制时小于贴图的原始尺寸时采用。GL_TEXTURE_MAG_FILTER在图像绘制时大于贴图的原始尺寸时采用

            

        上图分别是使用线性滤波和接近滤波进行的纹理映射效果

         // 线形滤波
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);           

        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); 

        // 接近滤波
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);          

        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);

 

   

相关文章
|
C++ Windows
【OpenGL】七、桌面窗口搭建 ( 导入头文件 | 桌面程序入口函数 | 注册窗口 | 创建窗口 | 显示窗口 )(一)
【OpenGL】七、桌面窗口搭建 ( 导入头文件 | 桌面程序入口函数 | 注册窗口 | 创建窗口 | 显示窗口 )(一)
123 0
|
Windows
【OpenGL】七、桌面窗口搭建 ( 导入头文件 | 桌面程序入口函数 | 注册窗口 | 创建窗口 | 显示窗口 )(二)
【OpenGL】七、桌面窗口搭建 ( 导入头文件 | 桌面程序入口函数 | 注册窗口 | 创建窗口 | 显示窗口 )(二)
146 0
【OpenGL】七、桌面窗口搭建 ( 导入头文件 | 桌面程序入口函数 | 注册窗口 | 创建窗口 | 显示窗口 )(二)
OpenGL ES的函数解析和记录理解
昨天看了相关的视频,所以把openGL ES中需要用到的几个函数,随手记录一下。 1、glViewport(int x,int y,int  width,int height)   ————从设备坐标转到视窗坐标 X,Y————以像素为单位,指定了视口的左下角(在第一象限内,以(0,0)为原点的)位置。
1125 0
OpenGL函数思考-glLoadIdentity
OpenGL函数思考-glLoadIdentity 函数原型:      void glLoadIdentity(void) 函数说明:       OpenGL为我们提供了一个非常简单的恢复初始坐标系的手段,那就是调用glLoadIdentity()命令。
1005 0
OpenGL函数思考-glMatrixMode
OpenGL函数思考-glMatrixMode  函数原型:        void glMatrixMode(GLenum mode) 参数说明:        mode 指定哪一个矩阵堆栈是下一个矩阵操作的目标,可选值:    GL_MODELVIEW,对模型视图矩阵堆栈应用随后的矩阵操作。
1124 0
OpenGL函数思考-gluPerspective
OpenGL函数思考-gluPerspective 函数原型:       void gluPerspective(GLdouble fovy, GLdouble aspect,GLdouble zNear,GLdouble zFar) 参...
1102 0