3

あまりにも多くのコンテキストが必要になるため、この質問のコードは投稿しませんが、私が行っていることを概念的に説明します。

アフィン変換を使用する単純なレイトレーサーを構築しています。つまり、カメラ座標からのすべての光線を一般的な形状と交差させているということです。すべての形状にはアフィン変換が関連付けられており、シーンオブジェクトと交差する前に、光線は最初にこれらの変換の逆数で乗算されます。

たとえば、半径3の球を(10,10,10)に配置したいとします。球を作成し、この変換を表す変換行列を与えます。

カメラ座標で光線を作成します。光線に球の変換行列の逆数を掛けて、一般的な球と交差させます((0,0,0)でr = 1)。交点でこの一般的な光線に沿った距離を取り、それを使用して、一般的な法線と元の光線に沿った点を見つけ、これらを変換オブジェクトに保存します(距離(t)と実際の変換とともに)。

この交点の色を理解するときが来たら、変換の逆転置を取り、それを一般的な法線で乗算して法線を見つけます。逆変換された光線の交点からのt値を使用する場合、交点は元の変換されていない光線に沿った点にすぎません。

問題は、私がこのように物事を行うとき、変換が奇妙な効果をもたらすことです。主な効果は、変換によってライトがシーンから引きずられるように見えることです。たくさんの画像を作成し、フレームごとに球に少し大きな回転を適用すると、シーン内のライトがその周りをドラッグしているように見えます。これが例です

正直なところ、ここで何が間違っているのか理解できませんが、髪を引き裂いています。これが起こっている理由は何も考えられません。どんな助けでも大歓迎です。

4

2 に答える 2

1

ワールド座標ではなく、オブジェクト座標で交差を行うことを決定しました。エラーであるIMHO(多くのインスタンス化を行っている場合を除く)。ただし、その場合、オブジェクト空間の法線だけでなく、オブジェクト空間の交点も計算する必要があります。これらは、オブジェクト変換を使用してワールド座標に変換し直す必要があります。その逆ではありません。これは、オブジェクトがワールドスペースに到達する方法であり、オブジェクトスペース内のすべてがワールドスペースに到達する方法です。一方で、tパラメータを変換する方法がわからないので、正しい結果が得られるまで、最初に交点を変換します。

于 2011-04-18T19:16:41.413 に答える
1

免責事項:私はレイトレーシングの専門家ではありません。また、問題の説明で転置の転置を誤解しています。

特に、交点の法線を計算すると、「変換された座標空間」になりますよね?したがって、法線もその座標空間にあります。後でそのベクトルを実際の交点に転置するだけですが、法線はまだ回転しています。

正の x で赤、負の x で青の一般的な球があると仮定します。カメラが 20,0,0 にあり、1 番目の球体が y 軸を中心に 180 度だけ回転しているとします (転置なし)。次に、光線 (1,0,0) は変換された光線 -1,0,0 になり、(-1,0,0) および t = 9 で負の x から球体に当たります。法線は (-1 ,0,0)。その法線を実際の交点に転置しても、法線は (-1,0,0) のままです。したがって、その法線に従うことで、正しい色だけでなく、球の「裏側」からの光も得られるはずです。

于 2011-04-14T08:31:57.527 に答える