2011-12-04 50 views
2

我有一個問題,我使用的任何紋理的顏色都是漂白的,如果這是一個很好的詞來描述它,但在兩個不同的手機上模擬器上的紋理顯示得很好。Android OpenGL ES紋理顏色在模擬器上正確顯示,但不在電話上

Here are the images. 第一個圖像是我正在使用的紋理。 第二張圖片是紋理在模擬器上顯示的方式以及它應該顯示在手機上的方式。 第三張圖片是紋理實際顯示在手機上的方式。

我應該在哪裏繪製矩形的代碼?矩形只是一個頂點緩衝區和texcoord緩衝區。實際上用紋理完成的任何事情都是gl.glBindTexture和gl.glBlendFunction(GL10.GL_ONE,GL10.GL_ONE_MINUS_SRC_ALPHA)。 gl.glColor4f(1.0f,1.0f,1.0f,1.0f)也被調用。

下面的代碼是我相信我的錯誤可能存在的地方。我希望有人能幫助我。謝謝!

這是我GLSurfaceView.Renderer實施

@Override 
public void onSurfaceCreated(final GL10 gl, final EGLConfig config) { 
    DebugLog.d("onSurfaceCreated"); 

    gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); 
    gl.glShadeModel(GL10.GL_FLAT); 

    gl.glDisable(GL10.GL_DEPTH_TEST); 
    gl.glDisable(GL10.GL_DITHER); 
    gl.glDisable(GL10.GL_LIGHTING); 
    gl.glDisable(GL10.GL_MULTISAMPLE); 

    gl.glEnable(GL10.GL_BLEND); 
    gl.glEnable(GL10.GL_CULL_FACE); 
    gl.glEnable(GL10.GL_TEXTURE_2D); 

    gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); 
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 

    gl.glFrontFace(GL10.GL_CW); 
    gl.glCullFace(GL10.GL_BACK); 
} 

這是我BitmapTexture類。

@Override 
public void loadBitmapToHardware(final GL10 gl) throws IOException { 
    final Bitmap bitmap = loadBitmap(); 

    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, bitmap, GL10.GL_UNSIGNED_BYTE, 0); 

    bitmap.recycle(); 
} 

@Override 
public Bitmap loadBitmap() { 
    InputStream is = null; 
    try { 
     is = mContext.getAssets().open(mBitmapPath); 
     return BitmapFactory.decodeStream(is); 
    } catch (final IOException e) { 
     DebugLog.e("Failed to load Bitmap in " + this.getClass().getSimpleName() + " from path: " + mBitmapPath, e); 
     return null; 
    } finally { 
     try { 
      is.close(); 
     } catch (final IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

@Override 
public void loadTexture() throws IOException { 
    gl.glGenTextures(1, TEXTURE_CONTAINER, 0); 
    mTextureId = TEXTURE_CONTAINER[0]; 
    gl.glBindTexture(GL10.GL_TEXTURE_2D, mTextureId); 

    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE); 
    gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_MODULATE); 

    loadBitmapToHardware(); 
} 

回答

0

這看起來像是一個過度曝光問題。仿真器和手機的屏幕設置可能會以不同的方式處理此問題,特別是因爲您的代碼中禁用了抖動。您應該嘗試:
1:刪除glColor4f()調用,看看是否有效(從我所知的GL10中,它將顏色設置爲白色,這可能會導致混合問題)。

2:打開混合並打開深度測試,看看你的混合是否給出了這個結果。

+0

謝謝!在你的幫助下,我發現了我的錯誤來源。我創建了一個用於紋理的顏色類,其中一個構造函數將Android Color整數轉換爲rgba浮點值以供GL使用。來自Color的rgba值是255而不是1,所以我可以通過在我的顏色類的構造函數中添加適當的分區來修復它。非常感謝! – FrHo

相關問題