我正在尝试为简单的球体光线追踪应用程序实现镜面反射和漫反射光照,但我的矢量存在问题。
我正在尝试使用以下内容来更新灯光,但生成的图像看起来完全一样,所以我知道我做错了。我假设我以某种方式弄乱了向量。命中是被击中的球体,而mindis是到这个球体点的距离。 Pir,猪,pib是颜色的rgb。
P3D intersection = ray.position.add(ray.direction).scale(mindis);
P3D l = intersection.sub(light).normalize();
P3D n = hit.center.sub(intersection).normalize();
double dot = l.dot(n);
P3D f = l.add(n).scale(-2.0 * dot);
double dot2 = f.dot(ray.direction);
pir += dot2 * 20;
pig += dot2 * 20;
pib += dot2 * 20;
答案 0 :(得分:1)
也许第一行应该是:
P3D intersection = ray.position.add(ray.direction.scale(mindis));
另外
P3D f = l.add(n.scale(-2.0 * dot));
f似乎是光从球体反弹的方向。这通常是光线的相反方向,所以你可能想要
double dot2 = -f.dot(ray.direction);