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 });

上記の場合、テクスチャをレンダリングすることはできませんが、グラデーション三角形をレンダリングすることはできます。

ケース 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);

ステージでテクスチャリングが無効になるとは思いませんでしたが、そうなるようです。

さらに、アクタのコールバック内からメッシュを直接描画しようとしている場合は、非バッチ描画を再起動drawする必要がある場合がありendます。batchバッチの構築では、beginと のend呼び出しの間で OpenGL の状態が想定されるため、状態を変更すると混乱する可能性があります。関連する例については、libgdx - Group.draw の ShapeRenderer が間違った色でレンダリングされるを参照してください。

于 2013-08-04T19:37:13.140 に答える
0

申し訳ありませんが、これは単なる推測です。追加してみてください

Gdx.gl10.glActiveTexture(GL10.GL_TEXTURE0);

メッシュとステージの描画の間、または後、または前...同様の問題があり、シェーダーとビットマップフォントを使用したかった

于 2013-08-04T15:29:45.193 に答える