2010-11-19 61 views
2

目前我有一個紋理地圖集是2048 x 2048像素設置與三個512 x 512紋理存儲,我只應用一個紋理的對象。所以我用下面的代碼來紋理座標(從零到1)到正確的位置定位在紋理圖集的紋理:手動GL_REPEAT GLSL

color = texture2D(tex_0, vec2(0.0, 1024.0/2048.0) + mod(texture_coordinate*vec2(40.0), vec2(1.0))*vec2(512.0/2048.0)); 

的問題是,當我申請這個,有一個黑色的邊框圍繞紋理。我認爲這是因爲OpenGL無法在該邊界處混合兩個像素。

那麼我該如何擺脫邊界?

編輯* 我已經嘗試將起始邊界和結束邊界朝着紋理的中心移動並且不起作用。

編輯* 我發現問題的根源在於,自動生成的mipmap將紋理圖譜中的紋理混合在一起。這意味着我必須編寫自己的mipmapping函數。 (據我所知)

如果有人有任何更好的想法,請張貼。

回答

1

我使用GL_2D_TEXTURE_ARRAY功能來創建一個正確的mipmap並正確重複的3D紋理,而不是使用正常的2D紋理作爲具有紋理網格的紋理圖集。這樣紋理就不會在更高的mipmap級別上混合在一起。

+0

嗯...一個不錯的和優雅的解決方案。這是否意味着紋理地圖集與現代GL已經過時了? – Kos 2010-11-27 19:03:12

+0

嗯......我不太確定這兩種方法的性能如何比較,這意味着即使紋理數組方法更優雅,普通紋理地圖集方法也可能更快。這將是值得研究的問題。 – 2010-11-29 19:18:19