2

Cでレイトレーサーに取り組んでいます。レイプレーンの交差の計算を理解しようとしています。私は持っている

d = ((Po-Lo) (ドット) N) / (L (ドット) N)

今、私が正しければ...

n - the planes normal ray
Po = single point on the plane
L = the vector that represents the ray I am shooting
Lo = a point on the line

これがどのように機能するかについて私は混乱しています。ピクセルごとに移動する場合、線上の点 (Lo) は平面に着陸する必要がありますか? それが本当なら、キャストしている光線 (L) の方向ベクトルでそのポイントを表すことはできませんか?

これを完全に複雑にしすぎているように感じますが、コードでこれを機能させる方法がまったくわかりません。

編集:

d = a scalar in the real world domain.

では、平面と光線 (私が見ている点) が交差するためには、d をゼロにする必要がありますか? そして、方向ベクトル座標を使用して、線上のその点を表すことができますか>

4

1 に答える 1

4

平面上の任意の点pについて、次の方程式が成り立ちます。

dot(Po-p,N) = 0

p線上の任意の点について、次の式が成り立ちます。

p = Lo+L*d

点が平面と線 (交点) の両方にある場合、それらは両方とも true でなければなりません。したがって、次のように置き換えることができます。

dot(Po-(Lo+L*d),N) = 0

いくつかの代数を行うことで、d について解くことができます。

dot((Po-Lo)-L*d),N) = 0
dot(Po-Lo,N) - dot(L*d,N) = 0
dot(Po-Lo,N) - d*dot(L,N) = 0
dot(Po-Lo,N) = d*dot(L,N)
d = dot(Po-Lo,N)/dot(L,N)
于 2013-02-20T05:04:01.083 に答える