将阴影卷挤出到无穷大

时间:2013-06-27 14:33:21

标签: opengl shadow infinity

我想使用深度 - 失败算法来制作阴影卷并且所有工作都很棒,但我无法弄清楚如何将阴影体四边形挤出到无穷大。

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

一个例子会非常有用,但我也想了解它是如何完成的。

1 个答案:

答案 0 :(得分:0)

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'与使用x,y,z,w=0转换(A)相同,但z'现在是一个始终等于远的常量标准化设备坐标中的平面。

这个article显示了一个有效的阴影卷实现,其中无限上限。