44

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();

}
4

4 に答える 4

98

この場合、次のコードが機能しています。おそらく他の誰かに役立つでしょう。

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);
于 2013-02-06T04:28:14.623 に答える
12

まず、ブレンディングを有効にする必要があります。

Gdx.gl.glEnable(GL10.GL_BLEND);

また、そのコード行とコード行の間で電話SpriteBatch.begin()をかけないように注意してください。理由はわかりませんが、私の場合はそれでうまくいきますSpriteBatch.end()Shaperender.drawSomething()

于 2014-03-06T02:44:09.213 に答える
6

これだけが私のために働いた:

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);
于 2014-11-21T09:49:46.163 に答える
5

まあ、完全に透明なものを描くことには実際には意味がありません。半透明の円を作成したい場合は、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();
}
于 2013-02-05T09:01:40.517 に答える