使用GL_REPEAT时OpenGL如何处理纹理边框?

时间:2010-08-25 21:43:33

标签: opengl

我理解GL_REPEAT参数将忽略纹理坐标的整数部分,在进行纹理映射时仅使用小数部分。问题是OpenGL如何处理纹理边框?例如,如果texcoord为2.0,则返回值应与texcoord 0.0或1.0处的返回值相同?我假设“普通”texcoord在[0.0,1.0]范围内,这是最常见的texcoord范围。

感谢您的回答!

2 个答案:

答案 0 :(得分:2)

你的具体例子很有趣。假设你有一个大小为2 {1}}的一维纹理

实际从纹理坐标0.0获得的内容取决于过滤。它不一定是[a b]。 LINEAR(忽略mipmapping)的aa唯一的位置是纹理坐标0.25。 a和0.75也是如此。

在0.0 1.0(和2.0,就此而言),你将获得(a + b)/ 2(再次,LINEAR)。不是0会给你一个,1会给你b。

-0.25 0 0.25 .5 0.75  1 1.25 ...
_____________________________
      |       |       |
  B   |   A   |   B   |   A
_____________________________

在NEAREST过滤的情况下,0.0和1.0完全位于纹素的边缘,虽然我不记得规范在该情况下的确切含义,但我不会依赖它。

所有这些......所有这一切都在讨论片段使用的纹理坐标。它们不是你传入的那些,而是光栅化的那些。

E.g。如果绘制一个覆盖2像素区域的四边形,其中1个纹理坐标从0到1。

以下是与插值坐标一起覆盖的像素图:

0 0.25 .5 0.75  1
_________________
|       |       |
|   P0  |   P1  |
_________________

片段将使用的纹理坐标确实是0.25和0.75(即光栅化器在像素的中间中插入纹理坐标),即使你传入了0和1。

答案 1 :(得分:0)

2.0被限制为0.0,因为它没有超出[0,1]范围,所以它不考虑纹理边界。