2010-08-25 71 views
2

我知道GL_REPEAT參數會忽略紋理座標的整數部分,在進行紋理映射時只使用小數部分。問題是OpenGL如何處理紋理邊界?例如,如果texcoord爲2.0,那麼返回值應該與texcoord 0.0或1.0時的返回值相同?我假設「正常」texcoord在[0.0,1.0]範圍內,這是最常見的texcoord範圍。使用GL_REPEAT時,OpenGL如何處理紋理邊框?

感謝您的回答!

回答

2

您的具體示例很有趣。假設您有一個尺寸爲2的1D紋理

實際上從0.0的紋理座標獲得的內容取決於過濾。這不一定是a。 LINEAR(忽略mipmapping)的aa的唯一位置在紋理座標0.25處。 b和0.75也是如此。

在0.0 1.0(和2.0,就此而言),您將得到(a + b)/ 2(再一次,LINEAR)。 0不會給你a,1會給你b。

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

用於最接近過濾的情況下,0.0和1.0是完全在紋理像素的邊緣,雖然我不記得到底是什麼規格上說的話,我不會依賴它。

所有這一切......這一切都是討論片段使用的紋理座標。它們不是你通過的那些,而是那些被光柵化的。

E.g.如果你畫一個四邊形,涵蓋了2像素區域,與1個紋理座標從0到1

下面是獲得與插值座標沿着覆蓋的像素的示意圖:

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

質地即使您通過了0和1,碎片將使用的座標確實爲0.25和0.75(即光柵化器插值像素的中的紋理座標)。

0

2.0被鉗位到0.0,因爲它不會落在[0,1]範圍之外,所以不考慮紋理邊界。

+0

我不確定是否我正確理解了您。說,我有一個尺寸爲2的一維紋理,(a,b)。如果我使用texcoord 0.0,返回值應該是a,texcoord 1.0應該返回b。包裝參數是GL_REPEAT。你的意思是texcoord 2.0的返回值也是一樣的,比如texcoord 3.0,4.0 ....?謝謝! – Aaron 2010-08-25 22:04:25

+0

是的,確切地說。要得到B,你需要在0.99附近有紋理座標 – 2010-08-25 22:21:25

+0

明白了。謝謝! – Aaron 2010-08-25 22:26:27