我需要绘制2D空间滚动射击游戏的背景。我需要实现3层恒星:一个远处的星云(移动速度很慢)在背景中,一层远处的恒星(移动缓慢)和一层近距离恒星(正常运动)在另外两颗恒星之上。

我第一次尝试这种方式的方法是使用3个320 x 480的纹理,它们是透明的星星。我使用了GL_BLEND和SRC_ALPHA,ONE_MINUS_SRC_ALPHA。

即使在3GS上,结果也不是很好。在第一代设备上,FPS下降到40..50所以我认为我这样做是错误的。

当我禁用GL_BLEND时,即使在第一代设备上也能很好地工作,并且FPS再次回到60 ......所以我必须考虑使用大透明纹理。

问题是我不知道如何以其他方式做到这一点......

我是否应该像第一个不透明的纹理那样绘制第一个星云,然后尝试模拟中间和顶部的星星图层,并在屏幕上移动小点?

混合问题还有其他方法吗?如何加快渲染过程?一个大的纹理(tileset)是答案吗?

请帮帮我,因为我被困在这里,我无法离开。

有帮助吗?

解决方案

我不知道您希望星星看起来如何,但您可能希望尝试使用 DrawElements GL_POINTS 将它们从纹理移动到几何体>或 DrawArrays 可能只是用几何图层替换前两个图层。您可以使用 PointSize PointSizePointerOES PointParameter 来操纵点来修改点的渲染。

其他提示

您可能希望使用多纹理来查看是否加快了速度。每个多纹理阶段都可以分配一个唯一的变换矩阵,因此您应该能够以不同的速度翻译每个图层。

我相信所有iPhone型号都支持两个纹理阶段,因此您应该能够将两个图层组合成一个绘图调用。您可能仍需要为第三层进行混合。

另请注意,alpha 测试可能比alpha 混合更快。

祝你好运!

后面的星云肯定是不透明的;其他一切都被绘制在它之上,我认为它背后唯一的东西是黑色。此外,骄傲有一点:假设你的星星层可以有效地1位alpha,这绝对是你可以尝试的东西。如果做不到这一点,Harald提到的GL_POINTS技术也会起作用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top