在ShapeRenderer上绘制透明纹理

时间:2017-07-12 09:53:18

标签: java libgdx lwjgl

当我在ShapeRenderer上绘制透明度(在文件中)的纹理时,任何形状都没有被更新。当我设置batch.setColor(1f, 1f, 1f, 0.5f)结果几乎相同时:我看到卡住的形状具有50%的透明度,并且还看到下面相同的动画形状。 我曾尝试使用Gdx.gl.glEnable(GL20.GL_BLEND),但没有帮助。

shape.begin(ShapeRenderer.ShapeType.Filled);
       shape.setColor(0f / 255f, 7f / 255f, 32f / 255f, 1f);
       shape.rect(0,0, width, height);
       for(Star star : stars)  {
            star.render(shape);
            star.update(dx, dy, delta);
        }
shape.end();

batch.begin();
batch.draw(overlay, 0, 0, width, height);
app.batch.end();

Star类中的render方法:

public void render(ShapeRenderer shape) {
            r = (position.z / max_depth);
            g = (position.z / max_depth);
            b = (position.z / max_depth);
            a = 1.f;                

            if(r < 0) r = 0;
            if(g < 7f / 255f) g = 7f / 255f;
            if (b < 32f / 255f) b = 32f / 255f

            float radius = (position.z / max_depth) * maxRadius;
            if(radius < 1) radius = 1;

            shape.setColor(r, g, b, a);
            shape.circle(position.x, position.y, radius);
}

1 个答案:

答案 0 :(得分:0)

您需要根据所需的混合输出将BlendFunction设置为批处理。默认情况下,它使用GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA

启用

所以尝试改为:

batch.setBlendFunction(GL20.GL_SRC_ALPHA,GL20.GL_DST_COLOR); 

可能这不符合您的要求,因此请根据您的要求选择合适的一个。