ShapeRenderer的发光效果(libgdx)

问题描述 投票:0回答:2

我读到带有精灵的辉光/粒子效果,效果很好。

是否有一种简单的方法可以通过简单的形状渲染功能(如圆圈?)来创建类似的模糊效果?

@Override
public void draw(Batch batch, float parentAlpha) {
    super.draw(batch, parentAlpha);
    batch.end();
    shapeRenderer.begin(ShapeRenderer.ShapeType.Point);
    shapeRenderer.setAutoShapeType(true);
    drawCircle();
    shapeRenderer.end();
    batch.begin();
}

private void drawCircle() {
    shapeRenderer.setColor(Color.WHITE);
    shapeRenderer.set(ShapeRenderer.ShapeType.Filled);
    // apply effect ??
    shapeRenderer.circle(10,10,2);
}

enter image description here

libgdx blur glow
2个回答
0
投票

您不能将纹理与默认的ShapeRender一起使用。

有多种方法可以执行此操作,但最简单的方法是使用ShapeDrawer库。它向SpriteBatch等添加了一些“ ShapeRenderer like”功能。参见https://github.com/earlygrey/shapedrawer


0
投票

是的,您可以创建“发光”效果,这可以通过使用超出边界的递减的alpha值进行绘制来实现。

首先,要定义发光效果参数,让我们确定发光对象的最大边界,发光结束处,光环的大小为auraSize

接下来,我们需要知道对象实心部分的大小,不发光的位,然后将其称为objSize作为对象的大小。

为绘制此图,我们可以使用一个简单的for循环和一些if语句:

private void drawCircle() {
    shapeRenderer.set(ShapeRenderer.ShapeType.Filled);

    //Draw circles upto the size of aura
    for(int radius = 0; radius < auraSize; radius++) {
        /*
        * Checks if radius fits object size, sets colour to solid white if so
        * Interpolates alpha value to 0 based on distance to aura covered by radius otherwise
        */
        if(radius <= objSize) {
            shapeRenderer.setColor(Color.WHITE);
        } else {
            shapeRenderer.setColor(new Color(1, 1, 1,
                     MathUtils.lerp(1, 0, (radius - objSize) / (auraSize / objSize))));
        }

        //Draws the circle at the current radius
        shapeRenderer.circle(10, 10, radius);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.