2014-02-14 15 views
1

我想在libgdx中創建一個靜態starfield。libgdx中的Starfield優化

我的第一個方法是:創建一個貼花和一個DecalBatch在上面。 當我畫貼花我使用佈告板 TECHNIC在貼花

star.decal.setRotation(camera.direction, camera.up); 

下一個:我想動畫的貼花的阿爾法,所以我就以隨機的方式產生了一些時間:

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

這是工作,但我的FPS下降55 FPS 25 FPS(因爲我500-1000星)

我可以只用一個批調用以任何方式?也許粒子材料只有一個頂點列表,並且GL_POINT模式始終面對着我的相機?

我該怎麼做libgdx

+0

你是什麼意思一個批次的電話?你也有很多android設備上的動畫星星。 – daniel

+0

你解決了嗎?你有一些示例代碼? – Veljko

回答

1

批處理是比你需要的複雜的方式,在每一幀需要複製另一個數組中的精靈的所有頂點,並對它們進行計算以找到縮放比例旋轉等。 當你懷疑GL_POINT精靈將會更快,並且在中距離設備中,它應該能夠以60fps呈現,例如具有不同位置和顏色的2000點。

這裏是我的一些舊代碼,它在c中,它使用opengl es 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);