c – opengl – 镜像着色器的可能性?

c – opengl – 镜像着色器的可能性?,第1张

概述直到今天,当我想在opengl中创建反射(镜子)时,我将视图渲染到纹理中并在镜像表面上显示该纹理. 我想知道的是,还有其他方法可以在opengl中创建一个镜像吗? 2.在着色器(例如几何着色器)中可以做到这一点吗? 在我所知道的任何3D API中,没有通用的方法可以做到这一点. 根据您的情况,有几种可能的技术有不同的缺点. >平面反射:这就是你已经在做的事情. 请注意,您的镜子需要是平的,您必须剪 直到今天,当我想在opengl中创建反射(镜子)时,我将视图渲染到纹理中并在镜像表面上显示该纹理.

我想知道的是,还有其他方法可以在opengl中创建一个镜像吗?

2.在着色器(例如几何着色器)中可以做到这一点吗?

解决方法 在我所知道的任何3D API中,没有通用的方法可以做到这一点.
根据您的情况,有几种可能的技术有不同的缺点.

>平面反射:这就是你已经在做的事情.
请注意,您的镜子需要是平的,您必须剪切,以便比镜子更接近于渲染到纹理中.
>好旧cubemaps:将立方图贴在每个镜子上,然后在反射方向上对其进行采样.这适用于任何表面,但您需要渲染立方体贴图(如果您不关心移动被反射的对象,则只能执行一次).我不认为你可以没有着色器这样做,但只有镜子需要一个.它是一种非常常见的技术,因为它易于实现,可以动态且相当便宜,同时易于集成到现有引擎中.
>屏幕空间射线行进:这是danny-ruijters建议的.有点像SSAO:对于每个像素,沿着反射向量采样深度缓冲,直到你碰到某个东西.这有利于任何地方(在任意复杂的表面上)适用,但它只能反映出现在屏幕上的东西,这些东西会引入许多小的工件,但它完全动态且非常简单.请注意,在计算反射时,您需要额外的传递(或将法线渲染到缓冲区中)来访问场景最终颜色.你绝对需要着色器,但它是后期处理所以它不会干扰场景渲染,如果那是你所害怕的.
Some modern game engines使用此功能向反射表面添加小细节,而无需计算/存储立方体贴图.

它们可能是渲染镜子的许多其他方法,但这些是树主要的(至少我所知道的)做反射的方式.

总结

以上是内存溢出为你收集整理的c – opengl – 镜像着色器的可能性?全部内容,希望文章能够帮你解决c – opengl – 镜像着色器的可能性?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1218216.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存