图形学常见概念与算法-纹理过滤

什么是纹理过滤

缩小或放大纹理时,一个像素会被放到几个像素的位置,或者几个像素放到一个位置,怎样去融合就是texture filtering,即纹理像素(texel)影射到纹理坐标的方式。

OpenGL中如何设置

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

第一个参数:指定纹理目标,2D纹理GL_TEXTURE_2D,立方体贴图GL_TEXTURE_CUBE_MAP;

第二个参数:指定是放大还是缩小纹理时的过滤方式,放大即magnify,缩小即minify,取缩写:

  • GL_TEXTURE_MAG_FILTER
  • GL_TEXTURE_MIN_FILTER

第三个参数:指定过滤方式:

  • 邻近过滤(取最接近纹理坐标点的那一个纹理像素),为默认设置:GL_NEAREST
  • 线性过滤(插值计算混合色):GL_LINEAR

以下四个过滤选项仅对缩小设置,因为多级渐远纹理主要使用在纹理被缩小的情况下的,纹理放大不会使用多级渐远纹理,为放大过滤设置多级渐远纹理的选项会产生一个GL_INVALID_ENUM错误代码:

GL_NEAREST_MIPMAP_NEAREST // 邻近多级渐远纹理,邻近采样
GL_LINEAR_MIPMAP_NEAREST // 邻近多级渐远纹理,线性插值采样
GL_NEAREST_MIPMAP_LINEAR // 线性插值两个多级渐远纹理,邻近采样
GL_LINEAR_MIPMAP_LINEAR // 线性插值两个多级渐远纹理,线性插值采样

多级渐远纹理

产生原因:远近物体如果使用相同分辨率贴图,由于远处物体小,只产生很少的片段,OpenGL从高分辨率纹理中为这些片段获取正确的颜色值就很困难,因为它需要对一个跨过纹理很大部分的片段只取一个纹理颜色,在小物体上会产生不真实的感觉,同时,对这些小物体使用高分辨率纹理也存在浪费内存的问题。

如何解决:mipmap是一系列纹理图像,后一个纹理是前一个的1/2,观察者的距离超过一定阈值,OpenGL就会使用不同的多级渐远纹理,即最适合物体的距离的那个,从而提高性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值