3
Gdx.gl10.glPushMatrix();
Gdx.gl10.glTranslatef(center.x, center.y, 0);
Gdx.gl10.glRotatef(0, 0, 1, angle * 360f / (2f * (float)Math.PI));
texture.bind();
mesh.render(GL10.GL_TRIANGLE_STRIP);
Gdx.gl10.glPopMatrix();

...そしてここに少しテキストを描くコードがあります:

spriteBatch.begin();
spriteBatch.setColor(1, 1, 1, 1);
float fps = 1f / Gdx.graphics.getDeltaTime();
font.draw(spriteBatch, "fps: " + fps, 0, 50);
spriteBatch.end();

コードの最初のビットは、コードの2番目のビットが実行されるまで、フレームごとに機能します。その後、最初のビットの三角ストリップは、最新のglMaterialのみを使用してレンダリングされます。なぜこれが起こっているのか考えていますか?両方のマテリアルを描画に保持するにはどうすればよいですか(メッシュの「テクスチャ」とそのスプライトテクスチャ、異なるはずです)?

4

2 に答える 2

4

SpriteBatch#end()SpriteBatch#begin()の呼び出しでクリーンなGL状態コンテキストを想定し、上のクリーンな状態コンテキストを復元するため、ブレンディングとテクスチャリングを無効にする必要がありますSpriteBatch#end()。あなたの場合、glEnable(GL10.GL_TEXTURE_2D)メッシュをレンダリングする前に、経由でテクスチャリングを有効にする必要があります。

疑わしい場合は、SpriteBatchjavadocsをチェックしてください。SpriteBatchjavadocsはGL状態の変更について説明しています。

于 2012-01-03T09:47:22.497 に答える
2

同じ問題が発生しました。解決策は、SpriteBatch(または私の場合はscene2d)に処理を実行させる前に、アクティブなテクスチャをGL_TEXTURE0に戻すことでした。

Gdx.gl20.glActiveTexture(GL20.GL_TEXTURE0);
于 2013-04-01T02:10:44.177 に答える