如何使用OpenGL创建"infinity"世界
How to create "infinity" world using OpenGL
我需要使用OpenGL创建GameOfLife,我有一个问题。这个模拟中的整个世界是100x100个单元格,但是左右边缘必须连接,上下也必须连接。问题是我如何使用相机显示它,因为当右边缘在窗口的中间时,我只看到世界的右边部分,但我应该看左边部分。
该任务的规格是:OpenGL 1.1与c++, WinApi和glOrtho
使用着色器将外部世界的坐标转换为内部世界。因为你正在使用一个正交投影,应该是相当容易完成使用模计算片段着色器。
既然世界只有100x100,我假设杀手级图像不是优先考虑的(彩色方块?),那么只渲染两次场景应该不会太难,对吧?例如,在摄像机只注视右侧边缘的情况下,只绘制场景最右侧的正方形,然后在屏幕边缘的右侧立即绘制该屏幕最左侧的正方形。然后,当相机延伸超过网格边界时,将相机的x值减去100(或者,如果您向左移动,则添加)。它将是无缝的,你会得到你想要的效果——除非我遗漏了什么,在这种情况下告诉我。
另一个选择是将游戏的生命渲染为纹理,并将该纹理渲染到屏幕上(将其设置为沿两个轴重复)。这可能是一个更容易和更快的选择。只需将rgb数据写入缓冲区(字节数组,长度为3*3*100*100)并将字节数组映射到纹理。你可能会找到大量关于如何做到这一点的教程——包括nehe.gamedev.com的遗留教程(顺便说一句,Nehe是一个很棒的资源)。
如果你选择纹理方法,你也不需要任何相机数学。只要改变贴图的坐标,它就会自动换行。
相关文章:
- 激励'inline'说明符的真实世界示例?
- 使用Unreal C++获取VR耳机的世界位置/方向
- 玩家加速穿越世界(C++)
- 在 OpenGL 中将笛卡尔世界坐标转换为球面局部坐标
- 在没有动态内存的世界中,我是否需要虚拟析构函数?
- 通过 Gazebo 世界插件将静态对象附加到机器人链接
- 你好世界在 APUE 第 7 章退出,代码为 0
- 迷失在指针的世界里
- std::numeric_limits::infinity() 的逆数为零吗?
- 对于像C++这样的现实世界语言,时间复杂性有什么一致的定义吗
- 如何在Openscenegraph中从二维鼠标点击的屏幕坐标点计算三维点(世界坐标)
- 如何暂停进程中的所有线程(停止世界)
- 在保证复制的世界中构造函数实例化
- macos GCC 工具链编译简单 hello 世界的问题
- JavaScriptCore 你好,世界每晚
- 包括操作系统你好世界失败
- 匿名联合在现实世界中的实际应用C++编程
- OpenGL 隐藏世界的一部分
- OpenGL屏幕坐标到世界坐标
- 如何使用OpenGL创建"infinity"世界