【发布时间】:2017-11-19 08:16:46
【问题描述】:
我用于 L、V 和 R 的方程式如下:
Vector3 L = (P.subtract(light.getPosition())).normalised();
Vector3 V = P.subtract(O).normalised();
Vector3 R = L.normalised().reflectIn(N.normalised()).normalised();
ColorRGB diffuse = C_diff.scale(k_d).scale(I);
double N_dot_L = N.normalised().dot(L.normalised());
N_dot_L = Math.max(0.0, N_dot_L);
diffuse = diffuse.scale(N_dot_L);
ColorRGB specular = C_spec.scale(k_s).scale(I);
double R_dot_V = R.normalised().dot(V.normalised());
R_dot_V = Math.pow(Math.max(0.0, R_dot_V), alpha);
specular = specular.scale(R_dot_V);
在哪里
- L 是从光源到物体的光方向矢量
- V 是从物体到相机的方向向量
- R 是反射光线的方向矢量,与表面法线的 L 方向相反
- C_diff 和 C_spec 以及 alpha 是方程中的常数
很遗憾,SO 不允许我发布我的图片,所以我只能将它包含在一个链接中(见下文)。 Image of Equation
由于这是一个重大项目,当我如此密切地遵循等式时,我无法理解为什么我的实现是错误的。我已将错误来源缩小到此代码 sn-p,希望有人能告诉我我的代码哪里出错了。
我似乎找不到错误,因为它完全符合方程式。
【问题讨论】:
标签: java graphics vector-graphics