首页 文章

在libgdx中绘制透明的ShapeRenderer

提问于
浏览
38

我使用ShapeRenderer绘制了一个填充圆圈,现在我想将此圆绘制为透明圆 . 我使用以下代码来做到这一点:但是圆圈不是透明的 . 此外,我检查了libgdx API,并从维基,它说,需要创建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 回答

  • 5

    在这种情况下,以下代码对我有用,也许它会帮助其他人:

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

    首先我们需要启用混合:

    Gdx.gl.glEnable(GL10.GL_BLEND);
    

    并确保不要在该行代码和 Shaperender.drawSomething() 代码行之间调用 SpriteBatch.begin()SpriteBatch.end() . 我不知道我的情况有什么用

  • 12

    嗯,绘制完全透明的东西并不是真的有意义 . 如果您确实要制作半透明圆,则必须在每帧之前按 glClearColor 清除颜色缓冲区,并将 Color alpha分量设置为 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();
    }
    
  • 79

    Only 这对我有用:

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

相关问题