opengl - 全向阴影贴图聚光灯

标签 opengl graphics directx hlsl shadow-mapping

我在延迟渲染器中实现全向阴影映射,但无法解决这个问题:

这是一张图片:shadow problem example

这就是当我将六个聚光灯沿正负方向沿每个轴指向时发生的情况。我知道问题是由聚光灯计算引起的,该计算将灯光的照明保持在锥形中,这就是为什么它是圆形的。

我的第一个想法是只禁用圆锥体计算,但很明显,因为如果您从一盏灯看另一盏灯,灯会混合在一起,就会出现重叠。如果我将为光渲染的几何形状从圆锥形更改为基于正方形的金字塔(我想无论如何我都需要这样做?)然后我就可以使用光的截锥体(我已经有了)一个圆锥体计算来测试当前像素是否落在截锥体内,对吧?

如果是这样,有人知道在像素着色器中执行此操作的最佳方法是什么吗?我想只检查点是否位于平截头体的每个平面前面,但这在像素着色器中似乎很昂贵。

最佳答案

你有 6 个截锥体,但请注意

  1. 你不需要检查背面或正面,只要它是否在无限金字塔中
  2. 每个面都由两个相邻的截头体共享
  3. 每张脸都被面朝后的平截头体镜像

这意味着您只需将像素与总共 6 个平面进行对比,以查看您需要访问哪个阴影贴图。

关于opengl - 全向阴影贴图聚光灯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13645432/

相关文章:

opengl - 如何使用 GL_REPEAT 仅重复选择纹理图集? (OpenGL)

java - 在java中加载的图像上绘制对象

OpenGL - 顶点着色器颜色未传递给片段着色器

c++ - SwapBuffers 使我的程序崩溃!

c# - 在 C# 中使用交错顶点的 VBO

c++ - 如何在 Raylib 中用像素追踪路径?

c++ - OpenGL 顶点数组没有显示?

c++ - 在 DirectX 11 中将文本绘制为二维纹理?

c++ - DirectX 使用多个渲染目标作为彼此的输入

c++ - 错误 C2719 : '_Val' : formal parameter with __declspec(align ('16' )) won't be aligned?