2013-07-10 4 views
1

직사각형 만 포함 된 매우 단순한 2D 장면을 그립니다. 각 꼭지점에 대해 X, Y, Z, R, G, B, A, U 및 V 데이터를 넣는 FloatBuffer가 하나 있습니다. glDrawArraysGL_TRIANGLE_STRIP을 사용하여 사각형을 퇴화 된 정점으로 분리하지 않고 그립니다.OpenGL, 압축 버퍼 및 다중 텍스처를 사용한 알파 블렌딩

여러 텍스처의 사용을 용이하게하기 위해 각 텍스처의 그리기 호출에 대해 별도의 플로트 배열을 유지합니다. 텍스처가 바인드되고, float 배열이 FloatBuffer에 놓여지고 그립니다. 그러면 다음 텍스처가 바인딩되고이 렌더링을 위해 모든 텍스처를 그릴 때까지이 텍스처가 계속됩니다.

저는 직교 투영을 사용하기 때문에 그리기 순서와는 별도로 심도를 설정하기 위해 Z 좌표와 GL_DEPTH_TEST을 사용할 수 있습니다.

알파 블렌딩을 사용하려면, 인터넷에 대한 조언의 모든 조각 말 것 :

GLES20.glEnable(GLES20.GL_BLEND); 
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA); 

내가 돌아까지 버퍼에 정렬 된 드로우 호출을 가지고 있기 때문에 이것은, 각 텍스처의는 "그리는"당 잘 작동 앞에 그리기. 깊이 테스트와 texture1이 texture2 앞에 그려지기 때문에 부분적으로 투명한 texture1 아래에 texture2를 올바르게 그릴 방법이 없습니다. texture1은 texture2의 겹쳐진 부분을 잘라 버립니다. 깊이 테스트에서 texture1이 texture2의 앞에 있다고 말하기 때문입니다.

주위를 볼 수있는 유일한 방법은 입니다. 1) 전체 프로그램에서 1 개의 텍스처 만 사용하고 2) 투명 텍스처는 사용하지 않습니다. 이들 중 어느 것도 수용 가능한 옵션이 아닙니다.

기본적으로 앞뒤 정렬을 할 필요없이 알파 블렌딩 방법이 필요합니다. 이것이 가능한가?

답변