Unity中spotlight是如何实现的?疑惑点解析

2021-01-31  本文已影响0人  大其心宏其量扩其识

我们以x分量为例,x * m_CotanHalfSpotAngle/(2 * z) + 0.5其实是把点的tan值除以半张角的tan值(即等于乘以cot值m_CotanHalfSpotAngle),由此得到张角比值,再通过缩放和平移,把张角的判断范围归一到[0, 1],如下图所示:


d36cf0dd029f8addf4c9643884878ddf_720w[1].jpg

数学基础太差,一直不明白这句话什么意思?今天终于想明白一点了,记录下,要是不应该这样理解,非常欢迎指正。


spotlight.png

因为:
tan\alpha'=x'/z
tan\alpha=x/z
tan\alpha'/tan\alpha=\frac{x'}{z} / \frac{x}{z}=\frac{x'}{z} * \frac{z}{x}=\frac{x'}{x}

cot \alpha=\frac{z}{x}
x' * cot\alpha = x' * \frac{z}{x} * \frac{1}{z} = \frac{x'}{x}
这里多出的\frac{1}{z}我理解是为了约去z

再缩放加偏移
\frac{x'}{x}* \frac{1}{2} + 0.5,(-1\leq \frac{x'}{x}\leq1)

最终将 -1到1之间的值转换成0到1之间的值

参考链接:https://www.zhihu.com/question/51060429

上一篇下一篇

猜你喜欢

热点阅读