- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
根据我的理解,要在 OpenGL 中进行镜像,您基本上是绘制场景,然后将所有内容翻转过来并再次绘制,除了仅使其通过镜子可见,从而在镜子中创建完美翻转的图像。但我看到的问题是,在执行此操作时,唯一可以看到其他镜子的镜子是在前一个镜子之后渲染的镜子。因此,如果我先渲染镜子 1,然后再渲染镜子 2,镜子 1 看不到镜子 2,但镜子 2 可以看到镜子 1。如何有效地镜像镜子而不会发生这种情况?
最佳答案
多重/递归反射渲染反射有两种常用方法...
渲染到纹理并将该纹理应用到镜面。
这样做的一个好处是您可以使用前一帧中其他镜像的镜像纹理。虽然这引入了小的延迟,但当您想要透过许多镜子查看时,它不会影响性能。如果这是一个问题,您可以在主相机渲染之前重新渲染几次反射纹理。
如果镜子不是完美的平面,您也可以使用此方法,例如,此方法适用于水中的涟漪。事实上,这甚至可以通过立方体贴图进行扩展,以支持近似任意反射。
Portal 渲染,如您所说,使用模板缓冲区遮盖镜面,围绕镜面翻转场景,然后重新渲染。
镜像渲染只是传送门渲染的一个特例。这可以递归完成,但它变得相当复杂,因为您必须正确管理深度缓冲区。您还需要一个场景的空间数据结构,这样您就不必进行完全重新渲染,只需渲染您可以通过镜子看到的内容(否则它会很快变得非常慢)。如果您走这条路,我建议您慢慢来,包括大量可视化调试并使用简单直观的测试场景。
(有很多关于单反射模板缓冲区使用的页面,但这不是您想要的,所以我不会费心列出一些)
*请注意,这些链接只是谷歌搜索几分钟的结果。随意编辑和删除/添加。
关于java - 如何在 OpenGL 中绘制镜像镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20511599/
我是一名优秀的程序员,十分优秀!