これは、レイ (および/またはライン セグメントやエッジなど) と、レイ トレーシング操作を実行している/実行していないソフトウェア レンダリング 3D エンジンにおけるそれらの場所に関する大きな一般化された質問です。私は基本を学んでいますが、このことについてあまり知らないことを最初に認めたので、親切にしてください. :)
光線の代わりにパラメータ化された線が使用されないのはなぜだろうか (または??)。インターネット上のいくつかの cpp ファイルを見回したところ、いくつかのリソースで Ray.cpp オブジェクトが定義されていることがわかりました。1 つは頂点とベクトル、もう 1 つはポイントとベクトルを使用しています。法線またはベクトルのみで無限線を定義し、その線に沿って交点を定義して、その無限線のサブセットとして線分を作成できると確信しています。この方法で行を実装している現在のエンジンはありますか、それとももっと良い方法がありますか?
さらに複雑さ (または単純さ?) を追加するために、ウィキペディアは、ベクトル空間では、線分の端点はしばしばベクトルであり、特に u -> u + v であると述べています。すでに定義された無限の線と交差していますが、これの実装を見つけることができず、これを 3D エンジンに適用するときの私の考えの有効性について疑問に思います。Flash 3D エンジン、Papervision を見ると、さらに複雑になります。 Ray クラスを調べたところ、パラメーターとして 6 つの個別の数値を取り、それらを 2 つの異なる Number3D (Papervision の Vector に相当するもの) のデータ型として返します?!?
これらの低レベルの部分を実際の定義に従って実装する正しい方法を実際に使用するものの実装を見ることに非常に興味があります。