gpt4 book ai didi

java - 如何在 OpenGL 中绘制镜像镜像?

转载 作者:搜寻专家 更新时间:2023-11-01 02:26:51 25 4
gpt4 key购买 nike

根据我的理解,要在 OpenGL 中进行镜像,您基本上是绘制场景,然后将所有内容翻转过来并再次绘制,除了仅使其通过镜子可见,从而在镜子中创建完美翻转的图像。但我看到的问题是,在执行此操作时,唯一可以看到其他镜子的镜子是在前一个镜子之后渲染的镜子。因此,如果我先渲染镜子 1,然后再渲染镜子 2,镜子 1 看不到镜子 2,但镜子 2 可以看到镜子 1。如何有效地镜像镜子而不会发生这种情况?

最佳答案

多重/递归反射渲染反射有两种常用方法...

  1. 渲染到纹理并将该纹理应用到镜面。

    这样做的一个好处是您可以使用前一帧中其他镜像的镜像纹理。虽然这引入了小的延迟,但当您想要透过许多镜子查看时,它不会影响性能。如果这是一个问题,您可以在主相机渲染之前重新渲染几次反射纹理。

    如果镜子不是完美的平面,您也可以使用此方法,例如,此方法适用于水中的涟漪。事实上,这甚至可以通过立方体贴图进行扩展,以支持近似任意反射。

    enter image description here

  2. Portal 渲染,如您所说,使用模板缓冲区遮盖镜面,围绕镜面翻转场景,然后重新渲染。

    镜像渲染只是传送门渲染的一个特例。这可以递归完成,但它变得相当复杂,因为您必须正确管理深度缓冲区。您还需要一个场景的空间数据结构,这样您就不必进行完全重新渲染,只需渲染您可以通过镜子看到的内容(否则它会很快变得非常慢)。如果您走这条路,我建议您慢慢来,包括大量可视化调试并使用简单直观的测试场景。

    enter image description here

    (有很多关于单反射模板缓冲区使用的页面,但这不是您想要的,所以我不会费心列出一些)

*请注意,这些链接只是谷歌搜索几分钟的结果。随意编辑和删除/添加。

关于java - 如何在 OpenGL 中绘制镜像镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20511599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com