2012-03-21 149 views
1

我使用OpenGL(OpenTK)和C#开发2D游戏。 我喜欢有一个由星星和雾组成的随机背景。为游戏生成随机背景

在我的投影中间是一艘星舰。 星舰可以向任何方向移动。 背景也会以任何方向动态生成。 我的问题是性能。我为一个小的 区域渲染了48000个顶点 (6000个具有.png纹理的矩形)。由于我的星舰正在移动,该地区将会增长。 我的电脑:CPU 4核心x 2300mhz,GeForce 9800 GTX +及其仍然 运行缓慢。这是正常的吗?

在我心中有一个解决方案。渲染区域并为backgroundtexture创建一个位图。

也许你有更好的解决方案。或者你可以告诉我动态创建背景纹理的缺点 。

回答

1

让你归档的是4x4。

所以你应该渲染一张由1x1的pices组成的5x5图片,并将它置于屏幕上。

比你的星舰移动时,你应该生成一张图片1x5(5个大小为1x1的小圆片)并放在你的船前,你应该从另一个方向删除一张图片。如果船舶向左移动,则应在左侧放置一个新的空间,并从右侧移除一个舱室。等等。

+0

这就是我现在所做的。但没有图片。我生成真正的星星和雾。我已经想到了构建背景图片的解决方案。 – 2012-03-22 00:49:53

1

如果您只是想要滚动纹理背景,您可以根据星舰的位置修改纹理坐标。为了让它看起来更独特,可以使用一些透明纹理并对它们进行分层,这会给你一个视差效果。

至于星星,我会用GL_POINTS。一旦星星从可视屏幕的边缘脱落,使其出现在另一侧。再一次,你可以以不同的价格购买更多的产品,因为据我们所知,恒星距离并不相同。

对不起,我不能更具体,但我在工作。

+0

对不起,滚动纹理解决方案不适合我。玩家需要有背景不重复的感觉,并且如果星舰移回位置,则总是相同的。 – 2012-03-22 00:53:54

+0

那么解决办法不是画整个宇宙。如果你将它分离成四边形,那么你应该画出屏幕上的那些。渲染48000个顶点太多只是为了背景 – MadcoreTom 2012-03-22 01:12:12

+0

这是正确的,改变了它。该集合增长到很大。所以每个四元组都有一个星星的集合,并且只会在可见时添加到我的渲染批处理中。我无法接受你,因为你写了一些不同的答案。 – 2012-03-22 08:18:15