Opengl 纹理地址模式钳制,它是如何工作的?

Opengl 纹理地址模式钳制,它是如何工作的?,opengl,textures,mode,Opengl,Textures,Mode,我试图了解纹理夹持在OpenGL或任何其他API中是如何工作的。我知道,您将操作定义为将范围从[0,1]扩展到任何对象,但将其钳制到边缘 如果我有一个伪代码函数: unsigned int-clampedTexel(浮点u,浮点v) { 如果(u=width)u=width-1; 如果(v=高度)v=高度-1; 返回图像[u][v] } (来源:) 对吧??所以,如果我超出了范围,比如u方向的1.1,为什么它不被钳制成黑色,这是在最后?在本例中,它变为白色而不是黑色。我误解了什么吗?为什么黑色

我试图了解纹理夹持在OpenGL或任何其他API中是如何工作的。我知道,您将操作定义为将范围从[0,1]扩展到任何对象,但将其钳制到边缘

如果我有一个伪代码函数:

unsigned int-clampedTexel(浮点u,浮点v)
{
如果(u<0)u=0;
如果(u>=width)u=width-1;
如果(v<0)v=0;
如果(v>=高度)v=高度-1;
返回图像[u][v]

}


(来源:)

对吧??所以,如果我超出了范围,比如u方向的1.1,为什么它不被钳制成黑色,这是在最后?在本例中,它变为白色而不是黑色。我误解了什么吗?为什么黑色旁边的值被钳制为白色

或与边缘颜色交替的任何其他延伸。
请帮我看看我失败的地方。

我想我看到了问题所在。你忽略了这样一个事实:纹理的顶行实际上是“白/黑”交替线,而不是看起来的“黑/白”线。因此,第一行重复白色/黑色是正确的。在右边缘也会出现类似的情况,即最后一列重复白/黑向下,而不是黑/白

以下是您的纹理及其轮廓:


我想我看到了问题所在。你忽略了这样一个事实:纹理的顶行实际上是“白/黑”交替线,而不是看起来的“黑/白”线。因此,第一行重复白色/黑色是正确的。在右边缘也会出现类似的情况,即最后一列重复白/黑向下,而不是黑/白

以下是您的纹理及其轮廓:


基本上,如果u大于1,它就是1。v也是。在u和v上小于0时相同。但是只有大黑空才有意义(1.5,1.5分别是1.0和1.0,这是黑色的。基本上,如果u大于1,它是1。对于v相同,对于u和v小于0相同。但是只有大黑空才有意义(1.5,1.5将是1.0和1.0,这是黑色。我已将ascii艺术更改为他的初始图像。我希望你不介意?谢谢,这有助于解释。我隐约担心图像在某个时候变得不可用,但没有任何问题。太糟糕的堆栈溢出也不会承载图像。元讨论,但我使用了SO的上载。希望如此他们使用的服务与他们有某种关系!哦,谢谢!这对我来说太模糊了。现在很有意义了,谢谢!我实际上设计了自己的计算来获得这个结果,在所选标题中取纹理宽度的一半和1-纹理高度的一半。当我没有k时,这似乎是合乎逻辑的现在这个“启示”(至少对我来说)。非常感谢,伙计!我现在感觉好多了!我已经将ascii艺术更改为他的初始图像。希望你不介意?谢谢,这有助于解释。我隐约担心图像在某个时候变得不可用,但没有任何原因。太糟糕的堆栈溢出也不能承载图像。元讨论,但我使用了SO的上载。希望它们能帮助你这是一项服务,他们与之有某种关系!哦,谢谢!这对我来说太模糊了。现在很有意义了,谢谢!我实际上设计了自己的计算方法来获得这个结果,在所选标题中取纹理宽度的一半和纹理高度的一半。当我不知道是“启示录”(至少对我来说)。非常感谢,伙计!我现在感觉好多了!