2013-11-02 3 views
2

안드로이드에서 OpenGL ES 2에서 제대로 블렌딩을 할 수없는 것 같습니다. 내가 갖고있는 것은 알파 채널이있는 텍스쳐이며 해당 알파와 함께 나타나기를 원합니다. 블렌드는 맨 위에 그려진 오브젝트의 알파가 1.0 인 경우에도 추가로 나타납니다. 내 프래그먼트 쉐이더에서는 알파 값을 1.0으로 하드 코딩했는데 색상이 아닌 알파 값을 사용하는 것 같습니다. 예를 들어Android OpenGL ES 2 - 블렌딩이 항상 첨가제 인 것 같습니다

, 그것은 다음과 같습니다이의 대신 enter image description here

: enter image description here

내가 올바른 순서로 그리기하고,이 예에서 파란색은 회색 사각형의 정상에 완전히 불투명해야합니다. 여러 블렌딩 모드 (하나, 하나), (알파, 알파) 등 여러 그리기 순서를 사용하고 깊이 테스트를 사용하지 않았습니다. 나는 잘못된 결과를내는 랜덤 블렌드 모드를 시도했기 때문에 블렌딩이 설정 될 때 변경되고있다.

저는 OpenGL이 가법적인 색상을 혼합하고 있다는 것이 문제라고 생각합니다. (Alpha, Alpha)는 나에게 의미가 있으며, 쉐이더에서 알파를 1.0으로 명시 적으로 설정하면, 파란색 원이있는 정사각형 (텍스처가 투사 된 실제 모양)을 얻게 될 것이라고 생각합니다. 이것은 일어나지 않는 퍼즐입니다. 나는 sfactor와 dfactor 블렌딩 기능을 충분히 이해하지 못합니다.

답변

3

텍스처를로드하기 위해 Android 비트 맵 클래스를 사용하고 있습니까?

Android에서 Bitmap의 알파 텍스처를로드하는 데 GLUtils.texImage2D()를 사용하면 오류가 발생합니다. 이것은 Google이 실제로 문서화해야하는 문제입니다. 문제는 Bitmap 클래스가 모든 이미지를 미리 곱한 형식으로 변환하지만 이미지가 완전히 불투명하지 않으면 OpenGL ES에서 작동하지 않는다는 것입니다.

이 기사에서는 click here에 대해 자세히 설명합니다.

+0

고마워요! 문제는 GLUtils.texImage2D()가 자동으로 미리 곱하기 비트 맵을 사용한다는 것입니다. (그리고 어떤 이유로 안드로이드는 수정 사항을 포함하지 않습니다.) 당신이 말한 것처럼. 나에게 맞는 해결책은 게시물 # 3의 코드를 복사하여 [link] (https://groups.google.com/forum/#!topic/android-developers/uqbDPmP4L8o)하고 \t \t GLES20.glBlendFunc GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA); – user1055947

+0

WebGL에는 WebGL의 경우이 동작이 [명확하게 정의되어 있습니다] (http://www.khronos.org/registry/webgl/specs/latest/1.0/#2.4) 사양에 있지만 이와 동일한 "문제"가 있습니다. –