2012-11-30 63 views
3

我正在执行的延期渲染全方位阴影映射,但我有麻烦解决这个问题:全方位阴影映射射灯

这里有一个画面:shadow problem example

这是发生了什么事时,我只是六个方位点指示灯沿正向和反向指向每个轴。我知道这个问题是由点光计算为灯光保持锥形的光照而引起的,这就是为什么它是圆形的。

我的第一个想法是只是禁用锥体计算,但很明显,因为灯光混合在一起,如果你通过一个灯光看另一个会有重叠。如果我将光线从锥形渲染到基于方形的金字塔(我认为无论如何我需要这样做),那么我就可以使用光的截头(我已经有了)的锥形计算来测试当前像素是否落在平截头体内,对吗?

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

+0

删除并重新提出相同的问题是*不*你如何回答你的问题。你可以通过将信息*放入人们要求的问题中得到答案。 –

+0

“*这是发生在我正确定位沿着每个轴指向正反方向的六个聚光灯时发生的事情。*”你会怎样做到这一点?如果你想要*点光源*,那么只需使用点光源。你只是从一些在线延迟着色示例中复制并粘贴代码,该示例只显示了如何做聚光灯? –

+0

对不起,我删除了旧的问题,我不再重新提交它,我已经重新编写它,我愚蠢地省略了我正在处理阴影映射,即时消息不问只是添加一个点光源,我有这个工作正常。 “什么会让你真正做到这一点?”我的问题是关于点光源的阴影映射,你需要使用6个点光源来模拟点光源,对于一个很好的解释我推荐阅读这个alt dev博客文章http://www.altdevblogaday.com/2011/01/30/omni-directional-shadow-mapping/ – user1848064

回答

0

你有6个视锥,但请注意,

  1. 你不需要检查的背面或正面,只是无论是
  2. 每个面由两个相邻的视锥共享无限金字塔
  3. 每个面由面向圆台镜像向后

这意味着你只需要检查的像素对6个面的总看到你需要访问的阴影贴图。