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

代码的第一位工作,一帧又一帧,直到第二位代码运行。之后,仅使用最新的 glMaterial 渲染第一位的三角形带。知道为什么会这样吗?我应该怎么做才能使两种材料都保持在绘图中(网格的“纹理”及其精灵纹理,应该不同)?

4

2 回答 2

4

SpriteBatch#end()必须禁用混合和纹理,因为它在调用时假定干净的 GL 状态上下文SpriteBatch#begin()并在SpriteBatch#end(). 在您的情况下,您只需glEnable(GL10.GL_TEXTURE_2D)在渲染网格之前启用纹理。

如有疑问,请查看 SpriteBatch javadocs,它会告诉您它所做的 GL 状态更改。

于 2012-01-03T09:47:22.497 回答
2

我遇到了同样的问题,我的解决方案是将活动纹理设置回 GL_TEXTURE0 ,然后让 SpriteBatch (或者在我的情况下为 scene2d )做它的事情:

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