你如何计算发病角度?

时间:2009-02-20 18:31:18

标签: math raytracing

我正在为一个大型项目开发光线跟踪器,目标是生成逼真的渲染而不必担心CPU时间。基本上是预渲染,所以我要求准确度超过速度。

我在处理事物照明方面正在进行的一些更先进的数学方面遇到了一些麻烦。基本上,我对我的光有所了解。假设没有距离衰减,我应该可以使用我找到的多边形上的点,并将该点处的法线与光线上的入射角进行比较,以计算出我的照明值。因此,给定一个平面上的点,该平面的法线和点光源,我将如何计算出该角度?

我问的原因是我似乎找不到任何关于找到入射角的参考。我可以找到很多参考资料,详细说明一旦你得到了该怎么做,但没有任何东西告诉我如何获得它。我想这很简单,但我不能把它弄清楚。

由于

3 个答案:

答案 0 :(得分:8)

如果你已经对矢量进行了归一化,表面法向量的dot product和入射光矢量将给出入射角的余弦。

答案 1 :(得分:0)

答案 2 :(得分:0)

注意:从我现在坐的地方开始,我无法为您上传图片。不过,我会试着用文字说出来。

以下是您如何想象这个过程:

alt text http://www.yourequations.com/eq.latex?%5Chat%7Bn%7D定义为标准化法线(从平面多边形出来的垂直向量,单位长度,使数学更容易)。

alt text http://www.yourequations.com/eq.latex?p_0定义为您的眼球点。

alt text http://www.yourequations.com/eq.latex?p_1定义为多边形上“眼球射线”的影响点。

alt text http://www.yourequations.com/eq.latex?%5Chat%7Bv%7D定义为从alt text http://www.yourequations.com/eq.latex?p_1指向alt text http://www.yourequations.com/eq.latex?p_0的标准化向量。您可以这样写:

alt text http://www.yourequations.com/eq.latex?%5Chat%7Bv%7D%20=%20%5Cfrac%7B%5Coverrightarrow%7B(p_0%20-%20p_1)%7D%7D%7B||p_0%20-%20p_1||%7D

因此,您创建了一个从alt text http://www.yourequations.com/eq.latex?p_1指向alt text http://www.yourequations.com/eq.latex?p_0的向量,然后按照自己的长度划分该向量,为您提供长度为1的向量,该向量指向alt text http://www.yourequations.com/eq.latex?p_1alt text http://www.yourequations.com/eq.latex?p_0

我们遇到所有这些麻烦的原因是我们真的很喜欢角度alt text http://www.yourequations.com/eq.latex?%5Ctheta,它是您刚创建的普通alt text http://www.yourequations.com/eq.latex?%5Chat%7Bn%7D和矢量alt text http://www.yourequations.com/eq.latex?%5Chat%7Bv%7D之间的角度。 θ的另一个词是入射角

计算此入射角的简便方法是使用dot product。使用上面定义的术语,您可以获取每个单位长度向量的x,y和z分量,将它们相乘并添加总和以获得点积。

alt text http://www.yourequations.com/eq.latex?%5Chat%7Bn%7D%20%5Ccdot%20%5Chat%7Bv%7D%20=%20%5Ccos%7B%5Ctheta%7D%20=%20n_x%20%20v_x%20+%20n_y%20%20v_y%20+%20n_z%20%20v_z

因此,要计算alt text http://www.yourequations.com/eq.latex?%5Ctheta,您只需在点积上使用反余弦:

alt text http://www.yourequations.com/eq.latex?%5Ctheta%20=%20%5Carccos%28%5Chat%7Bn%7D%20%5Ccdot%20%5Chat%7Bv%7D%29

修改:修改上述内容以添加yourequations.com格式。