libGDX에서 α(반투명)가 작동하지 않을 때 체크포인트

6648 단어 AndroidlibGDX
libGDX의 Shape Renderer로 묘사할 때 알파가 섞이지 않아 푹 빠졌다.

자홍색의 사각형을 그렸지만 왼쪽의 사각형은 α가 작용하지 않는다.
오른쪽은 의도대로 50% 알파가 유효합니다.

출처


소스는 아래와 같다.

왼쪽(알파는 무효)


left
        Gdx.gl.glEnable(GL20.GL_BLEND);
        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
        renderer.begin(ShapeType.Filled);
        renderer.setColor(1, 0, 1, 0.5f);
        renderer.rect(50, 50, 300, 300);
        Gdx.gl.glDisable(GL20.GL_BLEND);
        renderer.end();

오른쪽(알파 유효)


right
        Gdx.gl.glEnable(GL20.GL_BLEND);
        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
        renderer.begin(ShapeType.Filled);
        renderer.setColor(1, 0, 1, 0.5f);
        renderer.rect(450, 50, 300, 300);
        renderer.end();
        Gdx.gl.glDisable(GL20.GL_BLEND);

까닭


알파가 작용하지 않는 쪽은 game_.renderer.end();이라고 부르기 전에Gdx.gl.glDisable(GL20.GL_BLEND);에서 알파를 혼합하면 무효다.
 
너무 어리석다game_.renderer.end();가 호출될 때 그림이 실제적으로 집합되어 실행되기 때문에 그 전에 α가 무효화되면 안 된다.
OpenGL의 마음을 생각하면 알겠지만...
이런 이치이기 때문에 아래에 이렇게 쓰면 알파도 효과가 있다.
※ 이해하기 어려워 추천하지 않습니다.
AlphaOk
        renderer.begin(ShapeType.Filled);
        renderer.setColor(1, 0, 1, 0.5f);
        renderer.rect(450, 50, 300, 300);
        Gdx.gl.glEnable(GL20.GL_BLEND);
        Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
        renderer.end();
        Gdx.gl.glDisable(GL20.GL_BLEND);

좋은 웹페이지 즐겨찾기