1

現在、レイ トレーサーでレイと他のタイプのオブジェクトとの交差テストを行おうとしています。光線の衝突は、ディスタンス フィールドのように一定または動的なサイズのステップで反復するのではなく、方程式を解くことによって数学的に解決されます。これはうまく機能していますが、解決しようとしている問題があります。

// So if we put these two together (changing x,y,z in
// equation 1 with the values from equation 2, we get:

cx,cy,cz = sphere center
r        = sphere radius
ox,oy,oz = ray origin
dx,dy,dz = ray direction
t        = if the ray will hit, then that point is origin + direction * t

(Eq1) SphereEquation = (x - cx)^2 + (y - cy)^2 + (z - cz)^2 == r^2;
(Eq2) RayEquation    = {x,y,z} == {ox,oy,oz} + t*{dx,dy,dz};

CollisionEquation    = ((ox + t*dx) - cx)^2 + 
                       ((oy + t*dy) - cy)^2 + 
                       ((oz + t*dz) - cz)^2 
                       == r^2

変数は、光線がいつ衝突するかをt表します。したがって、pq 式を使用して変数を解くと、光線が衝突するかどうかがわかります。私の問題は、グリッド上に無限の数の球があり、それらの間に一定のサイズのステップがあることです。光線がそれらのいずれかと交差する可能性のある方程式を作成したいと思います。このようなものを見つけようとしましたが、何も見つかりません。では、この方程式はどのように作成できるのでしょうか。それが不可能なら、なぜですか?t

PS 必要に応じて Mathematica を使用しています。誰かが知りたい場合は、レイトレーサーは GLSL で実行されます ;)

あらゆる種類のヘルプを事前にありがとう.

4

1 に答える 1

1

それは正確なセットアップに少し依存します:

オブジェクトは必ず 2 次元グリッド上にありますか (草の例のように)? もしそうなら、

1)レイとグリッドを含む平面との交点を計算しsます(これは、レイが当たる候補となるオブジェクトが存在する必要がある場所です)。

2) 候補オブジェクトが持つことができる適切な最大距離を計算しますs(これは簡単ではないかもしれません。オブジェクトのサイズと視野角に依存します)。

3)tすべての候補 (つまり、 までの計算された最大距離よりも近いすべてのオブジェクト) について、上記のように計算しsます。最小tの勝利。

于 2012-08-16T13:48:10.157 に答える