我想使用深度失败算法来制作阴影体积并且一切都很好,但我不知道如何将阴影体积四边形拉伸到无穷大。
目的是为从点光源照亮的三角形创建阴影体积。我有红色,我首先必须更改它没有远剪辑窗格的透视矩阵并将 w 坐标设置为 0。但是 x、y、z 坐标是什么?
一个例子会很有帮助,但我也想了解它是如何完成的。
此链接显示了投影矩阵的示例。它具有以下形式:
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'
现在是一个常数,始终等于标准化设备坐标中的远平面。
本文展示了阴影体积的有效实现,其上限为无穷大。