ShapeRendererを使用して塗りつぶされた円を描画しました。次に、この円を透明な円として描画します。私はそれを行うために次のコードを使用しています:しかし、円は透明になりません。また、libgdx APIを確認し、WikiからCameraStrategyを作成する必要があると述べています。誰かがこれまでに同様の問題に直面したことがありますか?もしそうなら、いくつかの手がかりを教えてください。前もって感謝します。
Gdx.gl.glEnable(GL10.GL_BLEND);
Gdx.gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
drawFilledCircle();
Gdx.gl.glDisable(GL10.GL_BLEND);
private void drawFilledCircle(){
shapeRenderer.setProjectionMatrix(camera.combined);
shapeRenderer.begin(ShapeType.FilledCircle);
shapeRenderer.setColor(new Color(0, 1, 0, 1));
shapeRenderer.filledCircle(470, 45, 10);
shapeRenderer.end();
}
この場合、次のコードは私のために働いています。おそらく他の誰かに役立つでしょう:
Gdx.gl.glEnable(GL10.GL_BLEND);
Gdx.gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
shapeRenderer.setProjectionMatrix(camera.combined);
shapeRenderer.begin(ShapeType.FilledCircle);
shapeRenderer.setColor(new Color(0, 1, 0, 0.5f));
shapeRenderer.filledCircle(470, 45, 10);
shapeRenderer.end();
Gdx.gl.glDisable(GL10.GL_BLEND);
まず、ブレンドを有効にする必要があります。
_Gdx.gl.glEnable(GL10.GL_BLEND);
_
そして、そのコード行とSpriteBatch.begin()
コード行の間でSpriteBatch.end()
とShaperender.drawSomething()
を呼び出さないようにしてください。理由はわかりませんが、それが私の場合にうまくいく
のみこれは私のために働いた:
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
//Gdx.gl.glEnable(GL20.GL_BLEND);
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); // <<< this line here makes the magic we're after
game.shapeRenderer.setProjectionMatrix(camera.combined);
game.shapeRenderer.begin(ShapeType.Filled);
go.drawShapes();
game.shapeRenderer.end();
//Gdx.gl.glDisable(GL20.GL_BLEND);
まあ、完全に透明なものを描くことは本当に意味がありません。半透明の円を作成したい場合は、各フレームの前にglClearColor
でカラーバッファーをクリアし、Color
アルファコンポーネントを0.5f
に設定する必要があります。
レンダリングを数回描画した後、バッファーをクリアしない場合、円はほぼ単色の円にブレンドされます。
private void drawFilledCircle(Camera camera){
Gdx.gl.glClearColor(0, 0, 0, 0);
Gdx.gl.glClear( GL10.GL_COLOR_BUFFER_BIT );
shapeRenderer.setProjectionMatrix(camera.combined);
shapeRenderer.begin(ShapeType.FilledCircle);
shapeRenderer.setColor(new Color(0, 1, 0, 0.5f)); // last argument is alpha channel
shapeRenderer.filledCircle(470, 45, 10);
shapeRenderer.end();
}