4

构建打开本教程 - 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});
}
4

2 回答 2

3

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

Gdx.graphics.getGL10().glEnable(GL10.GL_BLEND); // Or GL20
于 2013-09-09T03:50:52.783 回答
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);
于 2021-03-26T16:04:53.787 回答