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);

 



-------------------------------------------------------------------

另附:

 滤波  
一般来说,纹理图像为正方形或长方形。但当它映射到一个多边形或曲面上并变换到屏幕坐标时,纹理的单个纹素很少对应于屏幕 图像上的象素。根据所用变换和所用纹理映射,屏幕上单个象素可以对应于一个纹素的一小部分(即放大)或一大批纹素(即缩小)。下面用函数 glTexParameter*()说明放大和缩小的方法:

 

 glTexParameter *( GL_TEXTURE_2D , GL_TEXTURE_MAG_FILTER , GL_NEAREST );
glTexParameter *( GL_TEXTURE_2D , GL_TEXTURE_MIN_FILTER , GL_NEAREST );

第一个参数可以是GL_TEXTURE_1D或GL_TEXTURE_2D,即表明所用的纹理是一维的还是二维的;
第二个参数指定滤波方法 ,其中参数值GL_TEXTURE_MAG_FILTER指定为放大滤波方法,GL_TEXTURE_MIN_FILTER指定为缩小滤波方法;
第三个参数说 明滤波方式, 若选择GL_NEAREST则采用坐标最靠近象素中心的纹素,这有可能使图像走样;若选择GL_LINEAR则采用最
靠近象素中心的四个象素的加权平均值。GL_NEAREST所需计算比GL_LINEAR要少,因而执行得更快,但 GL_LINEAR提供了比较光滑的效果。
参考:http://blog.chinaunix.net/uid-20638550-id-1909184.html
 

 

gl . glTexParameterx ( GL_TEXTURE_2D ,  GL_TEXTURE_MIN_FILTER ,  GL10 . GL_LINEAR );
gl . glTexParameterx ( GL_TEXTURE_2D ,  GL_TEXTURE_MAG_FILTER ,  GL10 . GL_LINEAR );
 
 超出视图范围的重复方式,设置如下参数GL10.GL_CLAMP_TO_EDGE:重复边沿的像素;如果设置成GL10.GL_REPEAT:纹理重复。
参考:http://edu.gamfe.com/tutor/d/28604.html
 

 

gl . glTexParameterx ( GL_TEXTURE_2D ,  GL_TEXTURE_WRAP_S ,  GL10 . GL_CLAMP_TO_EDGE );
gl . glTexParameterx ( GL_TEXTURE_2D ,  GL_TEXTURE_WRAP_T ,  GL10 . GL_CLAMP_TO_EDGE );



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值