【问题标题】:Extrude shadow volumes to infinity将阴影体积拉伸到无穷大
【发布时间】:2013-06-27 14:33:20
【问题描述】:

我想使用深度失败算法来制作阴影体积,一切都很好,但我不知道如何将阴影体积四边形拉伸到无穷大。

目的是为从点光源照亮的三角形创建阴影体积。我有红色,我首先必须更改它没有远剪辑窗格的透视矩阵并将 w 坐标设置为 0。但是 x、y、z 坐标是什么?

一个例子会很有帮助,但我也想了解它是如何完成的。

【问题讨论】:

  • 也许您可以解释一下为什么要将阴影体积拉伸到无穷大。
  • Tod 避免在阴影中出现错误。是depth-fail算法中经常用到的一种方法。

标签: opengl shadow infinity


【解决方案1】:

link 显示了投影矩阵的示例。它具有以下形式:

    a   0   b              0
A = 0   d   e              0
    0   0   -(f+n)/(f-n)   -2fn/(f-n)
    0   0   -1             0

f 是远平面,你想要f -> infinity

limit f -> infinity of (f+n)/(f-n) = limit f -> infinity of (1+n/f)/(1-n/f)

limit f -> infinity of 2fn/(f-n) = limit f -> infinity of 2n/(1-n/f)

因为

f -> infinity => n/f -> 0

f -> infinity 的矩阵变为

    a   0   b    0
B = 0   d   e    0
    0   0   -1   -2n
    0   0   -1   0

如果您将 (x,y,z,w=0) 转换为 B,您将得到

x' = ax + bz
y' = dy + ez
z' = -z
w' = -z

而透视除法给出

x' = -ax/z - b
y' = -dy/z - e
z' = 1

虽然x'y' 与使用A 转换(x,y,z,w=0) 相同,但z' 现在是一个常数,始终等于标准化设备坐标中的远平面。

这个article 展示了阴影体积的有效实现,其上限为无穷大。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多