【问题标题】:Starfield optimization in libgdxlibgdx 中的星空优化
【发布时间】:2014-02-14 13:22:39
【问题描述】:

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

我的第一个方法是:创建一个 Decal 和一个 DecalBatch 在它上面。 当我绘制贴花时,我在 贴花

上使用 Billboard 技术
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 颗星)

我可以以任何方式只使用一个批处理调用吗?也许是一个只有一个顶点列表和 GL_POINT 模式的粒子材料,它总是面向我的相机前面?

如何在 libgdx 中做到这一点?

【问题讨论】:

  • 批量调用是什么意思?你在安卓设备上也有很多动画明星。
  • 你解决了吗?你有一些示例代码吗?

标签: android libgdx


【解决方案1】:

Batch 比您需要的要复杂,在每一帧上,它需要将精灵的所有顶点复制到另一个数组中,并对它们进行计算以找到缩放旋转等。 正如您怀疑 GL_POINT 精灵会更快,并且在中程设备中它应该能够以 60 fps 的速度渲染,例如具有不同位置和颜色的 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);

【讨论】:

    猜你喜欢
    • 2017-12-03
    • 2021-10-06
    • 2018-05-09
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多