java - 有效计算两个 vector 之间的差异

标签 java vector 3d

我正在编写一个三维框架,它由以不同角度排列的多边形表面组成。在我的代码的某个部分中,我想根据光源计算表面的亮度,光源的角度由 vector 给出。

更具体地说,表面的方向由 vector 表示,光源也由 vector 给出。根据常识,当光线直接照射到表面上,或者当 vector 角度差为 0 时,表面最亮。

但是,在我当前的解决方案中,我需要对每个灯光计算 6 次 atan() 才能获得差异,这在计算上效率很低。

有更好的方法吗?

最佳答案

我认为有。查找Lambert's cosine law 。它表示来自漫射表面的光强度只是光 vector (指向光源)与平面法线 vector 之间的角度的余弦。因此,您需要做的就是标准化 vector 并获取点积。

关于java - 有效计算两个 vector 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52153737/

相关文章:

java.lang.IllegalArgumentException : A signing key must be specified if the specified JWT is digitally signed 异常

c++静态 vector 在DLL中丢失元素

c++ - 快速排序算法不起作用

android - 具有适用于 iOS/Android 的电影纹理的 3D 引擎?

algorithm - 在 3D 空间中对一组点进行排序

java - 了解 Java 在用作方法参数时如何处理对象

尝试查找文件中最常出现的单词时,Java ArrayIndexOutOfBoundsException 不断出现

java - 为什么我的休息时间不起作用

android - 如何在 openSSL 中将 DER 编码字符串的 vector 转换为 x509

matlab - Julia 3D 曲面图,如 Matlab,对数比例的色彩图