1

我需要为 2D 空间滚动射击游戏绘制背景。我需要实现 3 层恒星:背景中的一层遥远的星云(移动非常缓慢),一层遥远的恒星(移动缓慢)和一层靠近的恒星(移动正常)在另外两层之上。

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

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

当我禁用 GL_BLEND 时,即使在第一代设备上一切正常,并且 FPS 再次回到 60 ......所以这一定是我试图融合大型透明纹理的事实。

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

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

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

请帮帮我,因为我被困在这里,我不能出去。

4

3 回答 3

5

我不知道您希望您的星星看起来如何,但您可能想尝试通过使用GL_POINTSin将它们从纹理移动到几何体,DrawElements或者DrawArrays只是用几何体层替换前两层。您可以使用 和 来操作点PointSizePointSizePointerOES修改PointParameter点的渲染。

于 2009-10-27T01:34:27.167 回答
3

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

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

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

祝你好运!

于 2009-10-26T23:08:47.083 回答
1

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

于 2009-10-27T03:52:12.983 回答