2011-04-15 87 views
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];

}

http://wwwx.cs.unc.edu/~sud/courses/236/a6/small/tex_0_clamp.png

,對嗎?所以,如果我超出範圍,就像在u方向上的1.1那樣,爲什麼它不會被夾在最後的黑色?在這個例子中,它不是黑色,而是白色。我誤解了一些東西嗎?爲什麼黑色旁邊的值被限制爲白色?

或者是與邊緣顏色交替的任何其他擴展。 請幫我看看我失敗的地方。

+0

基本上,如果u大於1,這是1.同爲V和同爲小於0的U和V但只有大黑的空白是有道理的(1.5,1.5會是1.0和1.0,這是黑色的) – Curiosity 2011-04-15 00:36:47

回答

4

我想我看到了問題。你忽略了這樣一個事實,即紋理的第一行實際上是「白色/黑色」交替行,而不是它看起來的「黑色/白色」行。所以重複白色/黑色的第一行是正確的。類似的情況發生在最後一列重複白/黑而非黑/白的右邊緣。

這裏是你的紋理與它的輪廓:。

enter image description here

+1

我已經將ascii藝術改爲他的初始圖像了,我希望你不介意嗎? – Bahbar 2011-04-15 07:14:58

+0

謝謝,它有助於解釋。關於映像在某些時候變得不可用,但沒有任何可用的東西。太糟糕的堆棧溢出也不能託管映像。 – 2011-04-15 07:27:21

+0

元討論,但我用SO的上傳。希望他們使用服務他們h與某種關係有關! – Bahbar 2011-04-15 07:47:55