关于OpenGL中几种纹理环绕模式的理解

最近在学习OpenGL的纹理坐标时,有一个疑惑就是纹理坐标范围大于1的概念一直没有搞懂是什么意思,通过这篇博客下面的图示,明白了坐标大于1就是说在场景中的模型,大于原来贴图的尺寸时候的情况。下面是对这几个环绕模式的具体解释,原博客的地址:

http://blog.csdn.net/l_andy/article/details/53405758

在纹理映射中,纹理坐标的范围为[0.0,1.0]。当纹理坐标超出这个值时,OpenGL会根据你设置的环绕模式来处理这种情况。我们可以分别为每个纹理坐标轴(s,t,r)设置一个环绕模式,通过glTexParameteri 第二个参数为GL_TEXTURE_WRAP_S,GL_TEXTURE_WRAP_T或者GL_TEXTURE_WRAP_R.环绕的模式有GL_REPEAT,GL_CLAMP,GL_CLAMP_TO_EDGE, GL_WRAP_TO_BORDER.

GL_REPEAT环绕模式只是简单的重复纹理。例如:1.1出的纹理单元与0.1处的纹理单元是相同的。在平铺式的纹理应用到大型几何图形的时候,非常有用。一个设计良好的无缝小型纹理紧挨着平铺到大型几何图形上看起来像是无缝的大型纹理。

image

GL_CLAMP环绕模式是超过1.0的截取为1.0。

如果环绕纹理的意义是是否对纹理进行重复那么使用GL_REPEAT和GL_CLAMP两种模式就足够了。然而纹理的环绕模式,会影响到如何在纹理贴图边缘进行纹理过滤。对于GL_NEAREST过滤方式来讲,纹理的环绕模式对它并没有什么影响,因为纹理坐标总是对应到纹理贴图上的某一个单元。但对GL_LINEAR模式来说,纹理的环绕模式会影响它对纹理边缘的处理效果。因为它是对周围的纹理元素作一个平均值。

对于GL_CLAMP截取型的环绕模式,还提供了一些选项来处理纹理边缘。GL_CLAMP_TO_EDGE环绕模式简单地忽略边缘的纹理采样,不把它们包括在平均值中。GL_CLAMP_TO_BORDER环绕模式在纹理坐标在0.0到1.0范围之外时只使用边界纹理单元。边界纹理单元是作为围绕基本图像的额外的行和列,与基本纹理图像一起加载的。

下图显示不同参数的效果:

将1张2*2的纹理(分别为红,绿,蓝,黑),贴到一个方块左下角。

方块四个点的纹理坐标依次指定为(0,0), (2,0), (2,2), (0,2)。

根据上述的规则,坐标将进行截取,截取到相应的范围。

我们绘制暗白色线将纹理坐标为1的地方在图中标注出来:

注:border颜色默认为黑色


 滤镜:GL_NEAREST 缠绕模式:GL_CLAMP 或 GL_CLAMP_TO_EDGE

滤镜:GL_NEAREST  缠绕模式:GL_CLAMP_TO_BORDER。

滤镜:GL_LINEAR  缠绕模式:GL_CLAMP。

滤镜:GL_NEAREST  缠绕模式:GL_CLAMP_TO_EDGE。

滤镜:GL_NEAREST  缠绕模式:GL_CLAMP_TO_BORDER。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值