我在延迟渲染器中实现全向阴影映射,但无法解决这个问题:
这是一张图片:
这就是当我将六个聚光灯沿正负方向沿每个轴指向时发生的情况。我知道问题是由聚光灯计算引起的,该计算将灯光的照明保持在锥形中,这就是为什么它是圆形的。
我的第一个想法是只禁用圆锥体计算,但很明显,因为如果您从一盏灯看另一盏灯,灯会混合在一起,就会出现重叠。如果我将为光渲染的几何形状从圆锥形更改为基于正方形的金字塔(我想无论如何我都需要这样做?)然后我就可以使用光的截锥体(我已经有了)一个圆锥体计算来测试当前像素是否落在截锥体内,对吧?
如果是这样,有人知道在像素着色器中执行此操作的最佳方法是什么吗?我想只检查点是否位于平截头体的每个平面前面,但这在像素着色器中似乎很昂贵。
最佳答案
你有 6 个截锥体,但请注意
- 你不需要检查背面或正面,只要它是否在无限金字塔中
- 每个面都由两个相邻的截头体共享
- 每张脸都被面朝后的平截头体镜像
这意味着您只需将像素与总共 6 个平面进行对比,以查看您需要访问哪个阴影贴图。
关于opengl - 全向阴影贴图聚光灯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13645432/