OpenGL纹理映射与环绕模式

转载自 OpenGL超级宝典笔记——纹理映射

基础过滤

  • 在纹理映射过程中,纹理元素与屏幕上的像素几乎不是一一对应的。一般情况下,在把纹理映射到几何图形的表面上时,我们需要对其进行拉伸或收缩。
  • 根据一个纹理贴图的拉伸或收缩来计算颜色片段的过程称为纹理过滤。OpenGL中有放大过滤器和缩小过滤器。这两种过滤器的pname参数分别为GL_TEXTURE_MAG_FILTER,GL_TEXTURE_MIN_FILTER。
  • GL_NEAREST(最邻近) 和 GL_LINEAR(线性)两种过滤方式。
    • GL_NEAREST 最邻近过滤方法是一种最简单、最快速的过滤方式。不管纹理坐标落入哪个纹理单元,这个纹理单元的颜色就作为这个片段的纹理颜色。最邻近过滤的方式虽然快,但会走样特别是在纹理被拉伸到特别大的时候有大片的斑驳状像素。
    • GL_LINEAR(线性)线性过滤比最邻近过滤做更多的工作,但它的效果更好。而且在现代的硬件下,这种开销可以忽略不计。线性过滤会取周围的纹理单元进行加权平均得到当前纹理单元的颜色。线性过滤的特征是当纹理被放大时,会产生“模糊”的效果。

纹理环绕

  • 在纹理映射中,纹理坐标的范围为[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处的纹理单元是相同的。在平铺式的纹理应用到大型几何图形的时候,非常有用。一个设计良好的无缝小型纹理紧挨着平铺到大型几何图形上看起来像是无缝的大型纹理。
    在这里插入图片描述
  • GL_CLAMP环绕模式是超过1.0的截取为1.0。
  • 对于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)。
  • 根据上述的规则,坐标将进行截取,截取到相应的范围。注: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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值