2

我想知道门户游戏的工作方式。你可以站在一个门户和另一个门户之间,这太迷人了。

每次你拍摄一个传送门,也许,关卡就会被复制过来?还是只是相机/截锥体/视口效果?

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

4

3 回答 3

10

这对他们来说是一场噩梦。用“导演的评论”玩游戏,你会得到一些有趣的采访提到它。

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

但这还不是全部,因为如果您可以通过另一个门户看到一个门户怎么办?您将获得“无限”的反馈效果。在实践中,效果实际上并不是无限的。它只是进行足够的迭代(例如 40 次),直到图像变得足够小以至于您无法分辨出差异。每次下一次迭代都可以以较小的尺寸渲染,因此我们不必以全分辨率渲染整个关卡 40 次。但是仍然需要进行裁剪、剔除等工作。

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

(顺便说一句:物理引擎也发生了一些有趣的事情,其中​​一个通过门户一半的对象需要同时在两个地方。另一个令人头疼的问题。)

于 2012-10-31T20:57:14.967 回答
7

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

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

在下一步中,场景会被渲染一次,但这一次场景是通过额外的变换移动的,即描述门户彼此相对对齐的变换。然后在入口平面上放置一个剪切平面并渲染场景。在此渲染期间,可能会渲染另一个门户模板,这会触发进一步的递归。为了防止在镜像大厅的情况下出现无限循环,存在递归限制。

于 2012-10-31T21:13:59.743 回答
0

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

于 2012-10-31T20:51:48.103 回答