libgdx中的Starfield优化

时间:2014-02-14 13:22:40

标签: android libgdx

我想在libgdx中创建一个静态星空。

我的第一种方式是:在其上创建贴花 DecalBatch 。 当我绘制贴花时,我在贴花

上使用 Billboarding 技术
star.decal.setRotation(camera.direction, camera.up);

下一篇:我想在贴花上设置alpha动画,所以我在一段时间内以随机的方式创建:

star.decal.setColor(1, 1, 1, 0.6f+((float) Math.random()*0.4f) );

它正在工作,但我的FPS从55 FPS下降到25 FPS(因为我的500-1000星)

我可以以任何方式只使用一次批量通话吗?也许只有一个Vertex列表并且GL_POINT模式的particleMaterial总是面向我的相机前面?

我如何在 libgdx 中执行此操作?

1 个答案:

答案 0 :(得分:1)

批处理比你需要的复杂,在每个帧上需要复制另一个数组中精灵的所有顶点并对它们进行计算以找到比例旋转等。 因为你怀疑GL_POINT精灵会更快,并且在中程设备中它应该能够以60 fps渲染,就像2000点具有不同的位置和颜色一样

这里是我的一些旧代码,它在c中并且它使用了opengl 1.1,并且可以在libgdx中使用更简单的方法

glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);

glEnableClientState(GL_VERTEX_ARRAY);   
glEnableClientState(GL_COLOR_ARRAY);
glEnable (GL_POINT_SPRITE_OES);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, TXTparticle);
glTexEnvi(GL_POINT_SPRITE_OES, GL_COORD_REPLACE_OES, GL_TRUE);
glPointSize(30);
glColorPointer(4, GL_FLOAT, 32, particlesC);//particlesC the vertices color
glVertexPointer(3, GL_FLOAT, 24, particlesV);//particlesV the vertices   
glDrawArrays(GL_POINTS, 0,  vertvitLenght/6); 
glDisable( GL_POINT_SPRITE_OES );
glDisable(GL_TEXTURE_2D);

glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);