如何使用OpenGL创建"infinity"世界

How to create "infinity" world using OpenGL

本文关键字:infinity 世界 创建 何使用 OpenGL      更新时间:2023-10-16

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

该任务的规格是:OpenGL 1.1与c++, WinApi和glOrtho

使用着色器将外部世界的坐标转换为内部世界。因为你正在使用一个正交投影,应该是相当容易完成使用模计算片段着色器。

既然世界只有100x100,我假设杀手级图像不是优先考虑的(彩色方块?),那么只渲染两次场景应该不会太难,对吧?例如,在摄像机只注视右侧边缘的情况下,只绘制场景最右侧的正方形,然后在屏幕边缘的右侧立即绘制该屏幕最左侧的正方形。然后,当相机延伸超过网格边界时,将相机的x值减去100(或者,如果您向左移动,则添加)。它将是无缝的,你会得到你想要的效果——除非我遗漏了什么,在这种情况下告诉我。

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

如果你选择纹理方法,你也不需要任何相机数学。只要改变贴图的坐标,它就会自动换行。