射线追踪照明

问题描述 投票:1回答:1

我正在尝试为简单的球体光线追踪应用程序实现镜面反射和漫反射光照,但我的矢量有问题。

我试图使用以下内容来更新灯光,但生成的图像看起来完全一样,所以我知道我做错了。我假设我以某种方式弄乱了向量。命中是被击中的球体,而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;                       
raytracing lighting
1个回答
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);
© www.soinside.com 2019 - 2024. All rights reserved.