0

我正在尝试在 Libgdx 中与舞台一起渲染纹理网格。当我把它stage.draw放在mesh.render().

情况1:

public void render(float delta) {
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    Gdx.gl.glEnable(GL10.GL_TEXTURE_2D);

    stage.act(delta);
    stage.draw();
    texture.bind();
    mesh.render(GL10.GL_TRIANGLES, 0, 3);

}

// -- This is in my create method:
        mesh = new Mesh(true, 3, 3, 
                new VertexAttribute(Usage.Position, 3, "a_position"),
                new VertexAttribute(Usage.ColorPacked, 4, "a_color"),
                new VertexAttribute(Usage.TextureCoordinates, 2, "a_texCoords"));

        mesh.setVertices(new float[] { 50, 50, 0,Color.toFloatBits(255, 0, 0, 255),0,1,
                                        50, 500, 0,Color.toFloatBits(0, 255, 0, 255),0,0,
                                        500, 50, 0, Color.toFloatBits(0, 0, 255, 255),1,1                                                   });

        mesh.setIndices(new short[] { 0, 1, 2 });

在上述情况下,我无法渲染纹理,但能够渲染渐变三角形。

案例二:

public void render(float delta) {
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    Gdx.gl.glEnable(GL10.GL_TEXTURE_2D);

    texture.bind();
    mesh.render(GL10.GL_TRIANGLES, 0, 3);
    stage.act(delta);
    stage.draw();
}

在这种情况下,我能够在三角形上正确渲染纹理。

我的问题:

  1. 尽管我可以绘制三角形,但为什么顺序stage.draw()和影响纹理。mesh.render()
  2. 如何在演员的draw方法中绘制带有纹理的网格?
4

2 回答 2

2

OpenGL 是一个“有状态”库(因此调用 OpenGL 所做的更改会一直持续到再次更改)。因此,stage.draw()调用中的某些内容正在更改 OpenGL 状态,从而使网格的纹理无法正常工作。

您可以尝试移动:

Gdx.gl.glEnable(GL10.GL_TEXTURE_2D);

打电话给你:

texture.bind();
mesh.render(GL10.GL_TRIANGLES, 0, 3);

我不认为舞台会禁用纹理,但看起来它可能会。

此外,如果您尝试直接从 Actor 的draw回调中绘制网格,您可能需要endbatch非批量绘制周围重新开始。begin批处理构造在其和调用之间对 OpenGL 状态进行了假设end,因此如果您更改状态,它可能会感到困惑。请参阅libgdx - Group.draw 中的 ShapeRenderer 以错误的颜色呈现相关示例。

于 2013-08-04T19:37:13.140 回答
0

对不起,这只是一个猜测:尝试添加

Gdx.gl10.glActiveTexture(GL10.GL_TEXTURE0);

在绘制网格和舞台之间,或者之后,或者之前......我有一个类似的问题,我想使用着色器和 BitmapFonts

于 2013-08-04T15:29:45.193 回答