OGL纹理之纹理过滤器和多级渐进纹理mipmap

本文深入探讨了纹理过滤技术,包括放大与缩小过滤器的选择及其对图像质量的影响。此外,还详细介绍了Mipmap多重细节纹理的概念、创建方法及如何通过细节控制减少内存消耗和改善视觉效果。

纹理过滤器

纹理图像映射到屏幕坐标系的图元中,很多时候不是和屏幕坐标系(像素)一一对应的,因此需要进行放大或缩小(尽量避免一个方向上放大一个方向上缩小,避免这个问题最好方法是不要使用扭曲的纹理坐标)以铺满对应的图元。纹理过滤器通过glTexParameteri函数来指定。放大或缩小图像切换点一般出现在缩放为0.0位置,但是采用了不同的纹理过滤器比如放大过滤器是GL_LINEAR并且缩小过滤器是GL_NEAREST_MIPMAP_LINEAR或 GL_NEAREST_MIPMAP_NEAREST那么切换点就出现在0.5处,避免缩小的纹理看上去比放大的纹理图像更加锐利(清晰)。
拓展应用:
纹理过滤器的应用:
对字体文本使用纹理贴图字体库而不是位图,或对直线进行纹理映射,然后对纹理进行过滤后绘制可以实现,字体和直线的抗锯齿效果。
纹理变换的实现:
图像的缩放和旋转,对纹理映射到的多边形进行缩放旋转,就可以对纹理进行缩放旋转了,原因是多边形顶点上的纹理坐标是没有变化的,顶点位置变了纹理图像每帧都会光栅化纹理映射,所以也会随之变化。

1)放大纹理过滤器

//GL_NEAREST最近点采样块有明显锯齿,GL_LINEAR线性过滤效果较好
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

2)缩小纹理过滤器

//GL_NEAREST最近点采样块有明显锯齿,GL_LINEAR双线性采样效果较好
//#define GL_NEAREST_MIPMAP_NEAREST 0x2700
// 两个mipmap之间选择最近的纹理单元,采用最近点采样
//#define GL_LINEAR_MIPMAP_NEAREST 0x2701
// 两个mipmap之间进行计算双线性采样后,选择最近点
//#define GL_NEAREST_MIPMAP_LINEAR 0x2702
// 两个mipmap之间选择最近的纹理单元后,采用双线性采样
//#define GL_LINEAR_MIPMAP_LINEAR 0x2703
// 两个mipmap之间进行计算双线性采样,两个结果再进行线性匀和,也叫三线性采样
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值