我知道GL_REPEAT參數會忽略紋理座標的整數部分,在進行紋理映射時只使用小數部分。問題是OpenGL如何處理紋理邊界?例如,如果texcoord爲2.0,那麼返回值應該與texcoord 0.0或1.0時的返回值相同?我假設「正常」texcoord在[0.0,1.0]範圍內,這是最常見的texcoord範圍。使用GL_REPEAT時,OpenGL如何處理紋理邊框?
感謝您的回答!
我知道GL_REPEAT參數會忽略紋理座標的整數部分,在進行紋理映射時只使用小數部分。問題是OpenGL如何處理紋理邊界?例如,如果texcoord爲2.0,那麼返回值應該與texcoord 0.0或1.0時的返回值相同?我假設「正常」texcoord在[0.0,1.0]範圍內,這是最常見的texcoord範圍。使用GL_REPEAT時,OpenGL如何處理紋理邊框?
感謝您的回答!
您的具體示例很有趣。假設您有一個尺寸爲2的1D紋理
實際上從0.0的紋理座標獲得的內容取決於過濾。這不一定是a
。 LINEAR(忽略mipmapping)的a
和a
的唯一位置在紋理座標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(即光柵化器插值像素的中的紋理座標)。
2.0被鉗位到0.0,因爲它不會落在[0,1]範圍之外,所以不考慮紋理邊界。
我不確定是否我正確理解了您。說,我有一個尺寸爲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
是的,確切地說。要得到B,你需要在0.99附近有紋理座標 – 2010-08-25 22:21:25
明白了。謝謝! – Aaron 2010-08-25 22:26:27