在LibGDX中渲染透明网格

时间:2013-09-08 10:51:34

标签: opengl-es transparency libgdx

构建打开本教程 - https://code.google.com/p/libgdx/wiki/ProjectionViewportCamera我构建了一个用于生成多边形网格的类。但我无法弄清楚如何渲染半透明度,即使教程中的网格采用带有alpha通道的颜色对象。

我使用squareMesh.render渲染(GL10.GL_TRIANGLE_STRIP,0,4);这是用于初始化网格的代码

if (squareMesh == null) {
    squareMesh = new Mesh(true, 4, 4, 
                 new VertexAttribute(Usage.Position,    3, "a_position"),
                 new VertexAttribute(Usage.ColorPacked, 4, "a_color"));

    squareMesh.setVertices(new float[] {
        -0.5f, -0.5f, 0, Color.toFloatBits(128, 0, 0, 255),
         0.5f, -0.5f, 0, Color.toFloatBits(192, 0, 0, 255),
        -0.5f,  0.5f, 0, Color.toFloatBits(192, 0, 0, 255),
         0.5f,  0.5f, 0, Color.toFloatBits(255, 0, 0, 255) });   
    squareMesh.setIndices(new short[] { 0, 1, 2, 3});
}

2 个答案:

答案 0 :(得分:2)

许多Libgdx基础结构类都能自动进行混合。如果您自己绘制网格,则可能需要手动打开混合:

Gdx.graphics.getGL10().glEnable(GL10.GL_BLEND); // Or GL20

答案 1 :(得分:1)

我发现 ModelBatch.begin(...) 将通过调用 Gdx.gl.glDisable(GL20.GL_BLEND) 禁用混合。因此,请确保在调用 ModelBatch.begin() 后启用混合。

modelBatch.begin(camera); // resets Blending to false
// enable Blending
Gdx.gl.glEnable(GL20.GL_BLEND);
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
// draw mesh
mesh.render(shader, GL20.GL_TRIANGLES);
modelBatch.end();

还有一个等效的方法可以在 ModelBatch 中启用混合

modelBatch.getRenderContext().setBlending(true, GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);