0

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

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

unsigned int clampedTexel(float u, float v)
{
if(u < 0) u = 0;
if(u >= width) u = width-1;
if(v < 0) v = 0;
if(v >= height) v = height-1;
return image[u][v];

}


(来源:wwwx.cs.unc.edu 上的 sud

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

或与边缘颜色交替的任何其他扩展。请帮我看看我哪里失败了。

4

1 回答 1

7

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

这是您的纹理及其轮廓:

在此处输入图像描述

于 2011-04-15T04:01:30.107 回答