아무 것도 쓸 수있는 대화 형 2D 효과를 만들고 싶습니다. 따라서 대부분 투명한 효과를 취하여 텍스처로 렌더링하고 싶습니다. 사각형에 놓기 만하면됩니다.투명 배경이있는 텍스처로 OpenGL ES 2.0 렌더링
내가 만난 문제는 배경색을 없앨 수 없다는 것입니다. 효과를 대상 위에 올려 놓으면 효과의 배경색이 효과를 내고자하는 대상을 차단합니다.
여기 내 코드입니다. 아무도 내가 놓친 걸 말해 줄 수 있니?
그리기 :
GLES20.glClearColor(0.6f, 0.34f, 0.14f, 0.0f);
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
GLES20.glDisable(GLES20.GL_DEPTH_TEST);
GLES20.glEnable(GLES20.GL_BLEND);
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
ball.draw(); //This is the object a simple square draw with 2 triangles
particleSystem.renderToTexture(); //effect rendering to texture and drawing it
(가) 텍스처 코드 코드 렌더링은 :
public void renderToTexture(){
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fb[0]);
GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, renderTex[0], 0);
GLES20.glFramebufferRenderbuffer(GLES20.GL_FRAMEBUFFER, GLES20.GL_DEPTH_ATTACHMENT, GLES20.GL_RENDERBUFFER, depthRb[0]);
int status = GLES20.glCheckFramebufferStatus(GLES20.GL_FRAMEBUFFER);
drawRender(); //draws the effect on a fbo and saving the texture to renderTex[0]
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0);
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, renderTex[0]);
drawEffect(); //draws a square with the effect texture on it
문제는 여기 어딘가에해야하지만, 내가 무엇을 할 생각이 없다. 나는 내가 생각할 수있는 모든 것을 시도했다. 심지어 쉐이더에서 배경색을 처분하는 일은 제멋대로입니다.
이 코드는 문제가없는 것으로 보입니다. 프레임 버퍼 부착물 (renderTex [0])으로 사용하는 텍스처의 형식은 무엇입니까? 알파 구성 요소가있는 형식을 사용해야합니다. 가능한 다른 문제는'renderToTexture()'에 사용 된 선명한 색상이거나'Drawing()'에 사용 된 프래그먼트 셰이더 일 수 있습니다. –
@RetoKoradi thaaank youu. 나는 이것을 사용했다. GLES20.glTexImage2D (GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGB, texW, texH, 0, GLES20.GL_RGB, GLES20.GL_UNSIGNED_SHORT_5_6_5, null); Ofc 투명도가 전혀 표시되지 않았습니다. – FaNaT