天天看點

關于OpenGL中幾種紋理環繞模式的了解

最近在學習OpenGL的紋理坐标時,有一個疑惑就是紋理坐标範圍大于1的概念一直沒有搞懂是什麼意思,通過這篇部落格下面的圖示,明白了坐标大于1就是說在場景中的模型,大于原來貼圖的尺寸時候的情況。下面是對這幾個環繞模式的具體解釋,原部落格的位址:

http://blog.csdn.net/l_andy/article/details/53405758

在紋理映射中,紋理坐标的範圍為[0.0,1.0]。當紋理坐标超出這個值時,OpenGL會根據你設定的環繞模式來處理這種情況。我們可以分别為每個紋理坐标軸(s,t,r)設定一個環繞模式,通過glTexParameteri 第二個參數為GL_TEXTURE_WRAP_S,GL_TEXTURE_WRAP_T或者GL_TEXTURE_WRAP_R.環繞的模式有GL_REPEAT,GL_CLAMP,GL_CLAMP_TO_EDGE, GL_WRAP_TO_BORDER.

GL_REPEAT環繞模式隻是簡單的重複紋理。例如:1.1出的紋理單元與0.1處的紋理單元是相同的。在平鋪式的紋理應用到大型幾何圖形的時候,非常有用。一個設計良好的無縫小型紋理緊挨着平鋪到大型幾何圖形上看起來像是無縫的大型紋理。

關于OpenGL中幾種紋理環繞模式的了解

GL_CLAMP環繞模式是超過1.0的截取為1.0。

如果環繞紋理的意義是是否對紋理進行重複那麼使用GL_REPEAT和GL_CLAMP兩種模式就足夠了。然而紋理的環繞模式,會影響到如何在紋理貼圖邊緣進行紋理過濾。對于GL_NEAREST過濾方式來講,紋理的環繞模式對它并沒有什麼影響,因為紋理坐标總是對應到紋理貼圖上的某一個單元。但對GL_LINEAR模式來說,紋理的環繞模式會影響它對紋理邊緣的處理效果。因為它是對周圍的紋理元素作一個平均值。

對于GL_CLAMP截取型的環繞模式,還提供了一些選項來處理紋理邊緣。GL_CLAMP_TO_EDGE環繞模式簡單地忽略邊緣的紋理采樣,不把它們包括在平均值中。GL_CLAMP_TO_BORDER環繞模式在紋理坐标在0.0到1.0範圍之外時隻使用邊界紋理單元。邊界紋理單元是作為圍繞基本圖像的額外的行和列,與基本紋理圖像一起加載的。

下圖顯示不同參數的效果:

将1張2*2的紋理(分别為紅,綠,藍,黑),貼到一個方塊左下角。

方塊四個點的紋理坐标依次指定為(0,0), (2,0), (2,2), (0,2)。

根據上述的規則,坐标将進行截取,截取到相應的範圍。

我們繪制暗白色線将紋理坐标為1的地方在圖中标注出來:

注:border顔色預設為黑色

關于OpenGL中幾種紋理環繞模式的了解

 濾鏡:GL_NEAREST 纏繞模式:GL_CLAMP 或 GL_CLAMP_TO_EDGE

關于OpenGL中幾種紋理環繞模式的了解

濾鏡:GL_NEAREST  纏繞模式:GL_CLAMP_TO_BORDER。

關于OpenGL中幾種紋理環繞模式的了解

濾鏡:GL_LINEAR  纏繞模式:GL_CLAMP。

關于OpenGL中幾種紋理環繞模式的了解

濾鏡:GL_NEAREST  纏繞模式:GL_CLAMP_TO_EDGE。

關于OpenGL中幾種紋理環繞模式的了解

濾鏡:GL_NEAREST  纏繞模式:GL_CLAMP_TO_BORDER。

繼續閱讀