2012-07-31 194 views
2

我使用兩個尺寸的紋理(128x128)的力量,我將它的小部分繪製到多邊形上(使用它作爲紋理圖集)。我已經設置了以下內容:GL_NEAREST上的Android OpenGL mag過濾器,小紋理仍然模糊

gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST); 
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST); 

但是結果是仍然一起模糊的紋理。它看起來像是使用GL_LINEAR代替。

任何想法爲什麼紋理仍然會模糊而不是像素化?

下面是一個例子:

Letter drawn with four different texture resolutions

字母F是圖像的一部分。這裏使用128像素,256像素,512像素和1024像素繪製。正如你可以看到它變得更好,但即使在1024像素,它仍然融合了一些邊緣。 我應該可以使用128像素的圖像,並使用GL_NEAREST將其縮放並使其具有清晰的邊緣。有什麼可能導致它像這樣畫?

編輯

我已經更新了應用程序使用GLES20和我仍然有問題。 我曾嘗試使用以下綁定紋理後調用drawArrays之前,只是爲了確保我使用GL_NEAREST嘗試:

GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST); 
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST); 

EDIT 2

的問題發生,即使沒有使用Atlas。我在一個四邊形上放了一個8像素×8像素的png,這是一個模糊的混亂。 OpenGL ES 2.0不會使用GL_NEAREST嗎?

下面是結果:

8px by 8px letter A drawn on quad

回答

0

我終於明白了!

這是我加載我的資源的方式。

我從此改變:

Bitmap bitmap = BitmapFactory.decodeResource(GLRenderer.context.getResources(), textureId); 

這樣:

InputStream is = GLRenderer.context.getResources().openRawResource(textureId); 
Bitmap bitmap; 
try { 
    bitmap = BitmapFactory.decodeStream(is); 
} finally { 
    try { 
     is.close(); 
    } catch(IOException e) { 
     // Ignore. 
    } 
} 
1

我相信glTexParameterf應該glTexParameteri。您將枚舉傳遞給最終的參數,而不是浮動。

你是否也在用glGetError檢查錯誤?

另外請確保您爲每個想要進行線性採樣的紋理設置它。它的狀態是每個紋理,而不是全局。

+0

謝謝您的建議。我試着切換到'glTexParameteri',用glGetError隨處檢查,並且每次創建紋理時都設置了textue設置。現在我決定從GL10切換到GLES20;全面徹底檢修。所以現在我已經開始將我的頭髮拉出我的自定義矩陣處理程序類和着色器/渲染器類。謝謝! – Brad 2012-08-03 23:47:49

+0

Welp,我已經完全轉換到GLES20,仍然有相同的問題!我正在使用glTexParameteri和GL_NEAREST。我還沒有遇到任何gl錯誤。 – Brad 2012-08-07 05:45:29