【问题标题】:How do you calculate the Angle of Incidence?如何计算入射角?
【发布时间】:2010-10-08 21:59:37
【问题描述】:

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

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

我问的原因是我似乎找不到任何关于找到入射角的参考。我可以找到很多参考资料,详细说明一旦获得它后该怎么做,但没有告诉我如何首先获得它。我想这很简单,但我就是想不通。

谢谢

【问题讨论】:

    标签: math raytracing


    【解决方案1】:

    表面法线向量和入射光向量的dot product 将为您提供入射角的余弦值,如果您已对向量进行归一化。

    【讨论】:

    • 刚刚回顾了我大学时的旧光线追踪器代码,确实唯一一次提到入射角与它的余弦有关,就是这样计算的。
    【解决方案2】:

    【讨论】:

    • 方程式排版不错,凯文。你是用什么做的?
    • yourequations.com 我一直在等待一个可以用它解决的问题。
    • yourreequations.com 处于离线状态,应删除或更新答案。
    【解决方案3】:

    注意:从我现在的位置,我无法为您上传图片。不过,我会尽量用文字为您说明。

    你可以这样想象这个过程:

    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_1 指向alt 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 之间的角度。 theta 的另一个词是入射角

    计算此入射角的一种简单方法是使用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 格式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      • 2010-10-09
      • 1970-01-01
      • 2015-09-28
      • 2011-07-17
      • 2023-02-16
      相关资源
      最近更新 更多