Opengl es 在LibGDX中渲染透明网格

Opengl es 在LibGDX中渲染透明网格,opengl-es,transparency,libgdx,Opengl Es,Transparency,Libgdx,构建打开本教程-我构建了一个用于生成多边形网格的类。但我无法理解如何渲染半透明度,即使教程中的网格采用带有alpha通道的颜色对象 我正在使用squareMesh.render(GL10.GL_三角形_条带,0,4)进行渲染;这是用于初始化网格的代码 if (squareMesh == null) { squareMesh = new Mesh(true, 4, 4, new VertexAttribute(Usage.Position, 3,

构建打开本教程-我构建了一个用于生成多边形网格的类。但我无法理解如何渲染半透明度,即使教程中的网格采用带有alpha通道的颜色对象

我正在使用squareMesh.render(GL10.GL_三角形_条带,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});
}

许多Libgdx基础设施类支持自动混合。如果您自己绘制网格,可能需要手动启用混合:

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

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

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

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

你还渲染了什么?(您希望通过透明网格看到什么?)。另外,
255
是完全不透明的,因此您可能会将alpha设置为较低的值?是的,alpha值不会改变任何内容,我希望通过网格看到背景。例如:对于白色网格和黑色背景,如果alpha值设置为128,我希望看到一个灰色正方形。我遇到了同样的问题,并通过使用2个
颜色
对象解决了这个问题。第一个是所需颜色,另一个只是临时颜色,我将所需颜色的所有值乘以其alpha,然后用它更新
网格的顶点。这有点棘手/肮脏,所以如果你找到一个干净的解决方案,请告诉我。@miNde-那不就是用更接近黑色的颜色来渲染网格,而不是实际将颜色与背景混合吗?哇。。。没错。我没有注意到,因为这是一个测试,背景是黑色的。也许你应该在GitHub上的LibGDX问题跟踪器上打开一个记录单。没有什么真正的改变,你会碰巧知道我在哪里可以读到更多关于这个的内容,或者这应该如何正确实现吗?也许也可以显式地实现混合函数<代码>Gdx.gl.glBlendFunc(GL20.gl_SRC_ALPHA,GL20.gl_ONE_减去SRC_ALPHA)这主要是由LWJGL包装的常规OpenGL,因此Libgdx文档(AFAICT)并未真正涵盖它。如果这不能解决问题,请显示清除屏幕的代码,并尝试渲染两个网格,看看是否可以混合它们并用
Gdx.gl.glClear(GL10.gl\u COLOR\u BUFFER\u位)清除屏幕和两个alpha设置为0的网格不会改变任何内容。我发现这是解决方案,但如果通过spriteBatch进行渲染,出于某种原因,必须禁用sprite批次的混合,网格透明度才能生效
modelBatch.getRenderContext().setBlending(true, GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);