Подтвердить что ты не робот

Рисование прозрачного ShapeRenderer в libgdx

Я нарисовал заполненный круг, используя ShapeRenderer, и теперь я хочу нарисовать этот круг как прозрачный. Для этого я использую следующий код: Но круг не станет прозрачным. Кроме того, я проверил API-интерфейс libgdx и из вики, он говорит, что необходимо создать 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();

}
4b9b3361

Ответ 1

В этом случае для меня работает следующий код: возможно, это поможет кому-то другому:

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

Ответ 2

Сначала нам нужно включить blending:

Gdx.gl.glEnable(GL10.GL_BLEND);

И убедитесь, что вы не вызываете SpriteBatch.begin() и SpriteBatch.end() между этой строкой кода и вашей строкой Shaperender.drawSomething(). Я не знаю, почему, но то, что работает в моем случае

Ответ 3

Ну, на самом деле нет смысла рисовать что-то полностью прозрачное. Если вы хотите сделать полупрозрачный круг, вам нужно очистить цветной буфер 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();
}

Ответ 4

Только это сработало для меня:

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