OpenGL中的门户效应

时间:2012-10-31 20:47:43

标签: opengl portal

我想知道门户网站游戏的工作方式。 你可以站在一个门户和另一个门户之间,它是如此迷人。

每次你拍摄一个门户网站时,也许是这个级别被复制了吗?或者只是相机/视锥/视口效果?

我想在OpenGL中开发它,有什么建议吗?

3 个答案:

答案 0 :(得分:9)

这是他们实施的噩梦。通过“导演评论”玩游戏,你会得到一些有趣的采访提及它。

这是基本想法。当您查看蓝色门户网站时,您不是在查看关卡的副本,而只是从不同的角度查看相同的内容。引擎从橙色门户“后面”的视角呈现通过门户看到的部分,对应于您在蓝色门前的位置。需要特别注意不要在虚拟视点和橙色门户背面之间显示任何内容。视锥体被调整为仅包括您可以通过蓝色门户看到的位。

但这不是整个故事,因为如果你能通过另一个看到一个门户怎么办?你会得到一个“无限”的反馈效果。在实践中,效果实际上并不是无限的;它只是进行了足够的迭代(比如40),直到图像变得足够小,你无法区分它们。每个下一次迭代都可以以较小的尺寸渲染,因此我们不必以全分辨率渲染整个级别40次。但是仍然有裁剪,剔除等工作。

在OpenGL中,这可以通过使用帧缓冲对象(FBO)渲染到纹理,或直接渲染到最终结果但使用模板缓冲区剪切来完成(感谢datenwolf!)。但是,正如上面的段落所示,这只是故事的开头。如果你刚刚开始使用OpenGL,我恐怕你完全处于难度范围的错误结束。

(旁白:物理引擎也有一些有趣的事情,一个门户中途的对象需要同时在两个地方。另一个很头疼。)

答案 1 :(得分:4)

它们的关键字是:模板缓冲区,剪裁平面和递归渲染。

模板缓冲区用于剪切视口的一部分"门户"。这是通过在渲染场景的主视图时渲染一些辅助几何体来实现的。

在下一步中,场景再渲染一次,但这次场景通过另外的变换移动,即描述门户相互对齐的变换。然后将剪裁平面放置在门户平面上并渲染场景。在此渲染过程中,可以渲染另一个门户模板,从而触发进一步的递归。为防止镜像大厅中出现无限循环,会出现递归限制。

答案 2 :(得分:0)

我不知道具体细节,但这可以通过几种方式实现。我假设他们在门户的位置使用相机并使用渲染到纹理功能,以便从该视图捕获场景并在门户的位置渲染它。它们还允许更多次迭代,我仍然不确定它是如何工作的(可能会降低渲染到纹理的分辨率,直到达到一个像素或预定义的深度值)。