我正在编写一个三维框架,它由以不同角度排列的多边形表面组成。在我的代码的某个部分中,我想根据光源计算表面的亮度,光源的角度由 vector 给出。
更具体地说,表面的方向由 vector 表示,光源也由 vector 给出。根据常识,当光线直接照射到表面上,或者当 vector 角度差为 0 时,表面最亮。
但是,在我当前的解决方案中,我需要对每个灯光计算 6 次 atan() 才能获得差异,这在计算上效率很低。
有更好的方法吗?
最佳答案
我认为有。查找Lambert's cosine law 。它表示来自漫射表面的光强度只是光 vector (指向光源)与平面法线 vector 之间的角度的余弦。因此,您需要做的就是标准化 vector 并获取点积。
关于java - 有效计算两个 vector 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52153737/