0

我需要使用 OpenGL 创建 GameOfLife,但我遇到了一个问题。此模拟中的整个世界是 100x100 单元格,但必须连接左右边缘以及顶部/底部。问题是我如何使用相机显示它,因为当右边缘在窗口中间时,我只看世界的右部分,但我也应该看左部分。

任务的规范是:OpenGL 1.1 with C++, WinApi and glOrtho

4

2 回答 2

0

使用着色器将您的世界之外的坐标转换到内部。由于您使用的是正交投影,因此在片段着色器中使用模计算应该很容易完成。

于 2013-03-16T09:52:03.597 回答
0

好吧,由于世界只有 100x100,而且我认为杀手级图形不是优先考虑的(彩色方块?),所以渲染场景两次应该不会太难,对吗?例如,在相机只看右边缘的情况下,只绘制场景最右侧的方块,然后在屏幕边缘的右侧立即绘制该屏幕最左侧的方块。然后,当相机超出网格边界时,将相机的 x 值减去(或者,如果您向左,则添加)100。这将是无缝的,您将获得您想要的效果——除非我错过了什么,在这种情况下告诉我。

另一种选择是将生命游戏渲染为纹理,并将该纹理(设置为沿两个轴重复)渲染到屏幕。这可能是一个更容易和更快的选择。只需将 rgb 数据写入缓冲区(字节数组,长度为 3*3*100*100)并将该字节数组映射到纹理。您可能会找到大量关于如何做到这一点的教程——包括关于它的 nehe.gamedev.com 遗留教程(顺便说一句,Nehe 是一个很棒的资源)。

如果您选择纹理方法,则也不需要任何相机数学。只需更改映射在四边形上的纹理坐标,它就会自动换行。

于 2013-03-17T06:26:40.280 回答