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渲染。知道为什么会这样吗?我应该怎么做才能将两种材质都保留在绘图中(网格及其精灵纹理的'纹理',应该是不同的)?
答案 0 :(得分:4)
SpriteBatch#end()
必须禁用混合和纹理,因为它在调用SpriteBatch#begin()
时假设一个干净的GL状态上下文,并在SpriteBatch#end()
上恢复该干净的状态上下文。在您的情况下,您只需在渲染网格之前通过glEnable(GL10.GL_TEXTURE_2D)
启用纹理。
如果有疑问,请查看SpriteBatch javadocs,它会告诉您GL状态发生的变化。
答案 1 :(得分:1)
我遇到了同样的问题,我的解决方法是在让SpriteBatch(或者在我的情况下为scene2d)中执行其操作之前将活动纹理设置回GL_TEXTURE0:
Gdx.gl20.glActiveTexture(GL20.GL_TEXTURE0);