我理解GL_REPEAT参数将忽略纹理坐标的整数部分,在进行纹理映射时仅使用小数部分。问题是OpenGL如何处理纹理边框?例如,如果texcoord为2.0,则返回值应与texcoord 0.0或1.0处的返回值相同?我假设“普通”texcoord在[0.0,1.0]范围内,这是最常见的texcoord范围。
感谢您的回答!
答案 0 :(得分:2)
你的具体例子很有趣。假设你有一个大小为2 {1}}的一维纹理
实际从纹理坐标0.0获得的内容取决于过滤。它不一定是[a b]
。 LINEAR(忽略mipmapping)的a
和a
唯一的位置是纹理坐标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]范围,所以它不考虑纹理边界。