阴影投射位置计算
问题
阴影效果,可以通过对模型的额外渲染来完成。
从光源(这里只考虑点光源)出发,经过顶点,发出一条射线。此射线与平面的交点,即为顶点阴影所在位置。
这里不涉及具体代码,只讨论阴影位置的计算方法。
推导
如图:
□ I J K L \Box{IJKL} □IJKL是空间中的一个平面,其外有一点光源F,G为某模型上的一个顶点,要计算FG射线与平面的交点。
作辅助线FD,GH垂直于平面,FG延长线交平面于点E。下面推导E点位置:
由于两条垂线相互平等,所以有: ∣ G E ∣ ∣ F E ∣ = ∣ G H ∣ ∣ F D ∣ \frac{|GE|}{|FE|} = \frac{|GH|}{|FD|} ∣FE∣∣GE∣=∣FD∣∣GH∣
稍做调整:
1 − ∣ G E ∣ ∣ F E ∣ = 1 − ∣ G H ∣ ∣ F D ∣ 1-\frac{|GE|}{|FE|} = 1-\frac{|GH|}{|FD|} 1−∣FE∣∣GE∣=1−∣FD∣∣GH∣
∣ F E ∣ − ∣ G E ∣ ∣ F E ∣ = ∣ F G ∣ ∣ F E ∣ = ∣ F D ∣ − ∣ G H ∣ ∣ F D ∣ \frac{|FE|-|GE|}{|FE|} = \frac{|FG|}{|FE|} = \frac{|FD|-|GH|}{|FD|} ∣FE∣∣FE∣−∣GE∣=∣FE∣∣FG∣=∣FD∣∣FD∣−∣GH∣
用t代表上面的比例。用 n ⃗ \vec{n} n