1

シンプルなスフィア レイ トレーシング アプリケーションにスペキュラ ライティングとディフューズ ライティングを実装しようとしていますが、ベクトルに問題があります。

以下を使用してライトを更新しようとしていますが、生成された画像はまったく同じに見えるので、何か間違っていることがわかります。何らかの方法でベクトルを台無しにしていると思います。Hit はヒットした球で、mindis はこの球のポイントまでの距離です。Pir、pig、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;                       
4

1 に答える 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);
于 2011-10-17T03:07:13.237 に答える