2011-12-04 3 views
2

두 가지 다른 휴대폰에서 설명하는 데 사용할 좋은 단어인데 사용하는 텍스처의 색상이 표백되어 있지만 텍스처는 에뮬레이터에서 잘 보입니다.Android OpenGL ES 텍스처 색상이 에뮬레이터에는 올바르게 표시되지만 전화에는 표시되지 않습니다.

Here are the images. 첫 번째 이미지는 내가 사용하고있는 텍스처입니다. 두 번째 이미지는 에뮬레이터에서 텍스처가 나타나는 방식과 전화기에 표시되는 방식입니다. 세 번째 이미지는 텍스처가 실제로 휴대 전화에 표시되는 방식입니다.

사각형을 그릴 코드를 포함해야합니까? 사각형은 단지 정점 버퍼 및 텍큐 코드 버퍼입니다. 텍스처로 실제로 완료되는 것은 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 float 값으로 변환하여 GL에 사용합니다. Color의 rgba 값은 1이 아닌 255가 아닙니다. 따라서 색상 클래스의 생성자에 적절한 나누기를 추가하여 문제를 해결할 수있었습니다. 고마워요! – FrHo

관련 문제