Java,Android LibGDX-渐变实心圆

时间:2018-08-23 20:25:09

标签: java android libgdx

有没有办法用渐变填充小溪?我发现此选项适用于矩形,但不适用于圆形。

类似

shapeRenderer.filledRect(x, y, width, height, lightBlue, lightBlue, darkBlue, darkBlue);

但要圈出来。

最好只填充渐变圆的边界(确切地说,我需要在圆内加一个孔-像甜甜圈。但是如果没有这样的选择,我可以在该圆上绘制另一个圆) )。

图像不是一种选择,它将有很多不同的颜色,甚至可能随时间变化。

1 个答案:

答案 0 :(得分:1)

自从我以为这是解决您的问题和好消息的方法以来,我一直在寻找掩饰。我终于为您提供了一个解决方案,希望它将对您和其他人有用。我在这里Masking Test by mattdesl都归功于他

private ShapeRenderer shapeRenderer;

@Override
public void create() {
    shapeRenderer = new ShapeRenderer();
}

@Override
public void render() {
    //1. clear screen
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    //2. clear our depth buffer with 1.0
    Gdx.gl.glClearDepthf(1f);
    Gdx.gl.glClear(GL20.GL_DEPTH_BUFFER_BIT);

    //3. set the function to LESS
    Gdx.gl.glDepthFunc(GL20.GL_LESS);

    //4. enable depth writing
    Gdx.gl.glEnable(GL20.GL_DEPTH_TEST);

    //5. Enable depth writing, disable RGBA color writing
    Gdx.gl.glDepthMask(true);
    Gdx.gl.glColorMask(false, false, false, false);

    ///////////// Draw mask shape(s)

    //6. render your primitive shapes
    shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);

    shapeRenderer.setColor(1f, 0f, 0f, 0.5f);
    shapeRenderer.circle(50, 50, 50);
    shapeRenderer.setColor(0f, 1f, 0f, 0.5f);

    shapeRenderer.end();

    ///////////// Draw sprite(s) to be masked

    shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
    Gdx.gl.glColorMask(true, true, true, true);
    Gdx.gl.glEnable(GL20.GL_DEPTH_TEST);
    Gdx.gl.glDepthFunc(GL20.GL_EQUAL);
    shapeRenderer.set(ShapeRenderer.ShapeType.Filled);
    shapeRenderer.rect(0, 0, 100, 100, Color.RED, Color.RED, Color.BLUE, Color.BLUE);
    shapeRenderer.end();
}

请记住,这也适用于Sprites渲染的TexturesTextureRegionsSpriteBatch