2017-09-05 9 views
1

나는 사용자가 손가락으로 그릴 수있는 Android 용 페인트 앱을 개발 중입니다. 빠른 렌더링을 위해 FBO뿐만 아니라 포인트 스프라이트 기술을 사용하여 OpenGL ES 2.0을 사용하여 구축되었습니다. 투명 점이 FBO에서 올바르게 렌더링되는 경우 개별 점 스프라이트를 함께 섞는 문제가 있지만 스프라이트가 겹칠 때 이전 스프라이트에서 렌더링되는 투명 영역을 볼 수 있습니다. 다음은 현재 보이는 방법은 다음과 같습니다 나는 흰색 또는 검은 색으로 그리기 색상을 변경하는 경우포인트 스프라이트 알파 블렌딩

GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA); 

그것을 완벽하게 작동합니다 :

enter image description here

enter image description here

이이 블렌딩 방정식입니다

이 블렌딩 기능을 사용해 보았습니다.

거의 완벽한 대신 주요 색상이 짙어 흰색에 있습니다

enter image description here

을이 결과

GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_DST_ALPHA); 

. 이것을 달성하기 위해 올바른 혼합 기능이 무엇인지에 대한 아이디어가 있습니까?

참고 : 나는 혼합 함수가 색이 흰색으로 갈 것이라는 의미가 있도록 함께 추가 소스 및 대상 색상의 분수를 취함으로써 내 경우에 작동하는 방법의 아이디어를 가지고있다. 그래서 내가 뭘 달성하고 싶습니다 블렌딩 기능으로 만 수행 할 수 있는지 궁금 해서요 아니면 다른 뭔가가 필요합니까? 필자는 필요하다면 조각 쉐이더에서 코드를 제공 할 수는 있지만 조각상의 문제는 아닙니다.

답변

0

좋아, 그래서 내가 뭘 잘못했는지 알았어. 이는 단편 쉐이더하지만 결국 블렌딩 기능 아니었다 .. I는

GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA); 

이미 미리 곱셈 화상 처리 블렌딩 함수로 중복되었다 픽셀 Unpremultiply는 약간의 논리가 있었다. 그 외에도 조각 쉐이더에서 이미지를 회색 음영으로 변환 한 다음 회색 음영을 투명도로 변환하고 색상 승수를 잘못 변환하는 코드가있었습니다.

마침내 필자의 ​​원래 블렌딩 기능은 변경되지 않았습니다 (위와 같이). 정상적으로 작동하며 찾고있는 결과는 다음과 같습니다.

enter image description here