1

これは、レイ (および/またはライン セグメントやエッジなど) と、レイ トレーシング操作を実行している/実行していないソフトウェア レンダリング 3D エンジンにおけるそれらの場所に関する大きな一般化された質問です私は基本を学んでいますが、このことについてあまり知らないことを最初に認めたので、親切にしてください. :)

光線の代わりにパラメータ化された線が使用されないのはなぜだろうか (または??)。インターネット上のいくつかの cpp ファイルを見回したところ、いくつかのリソースで Ray.cpp オブジェクトが定義されていることがわかりました。1 つは頂点とベクトル、もう 1 つはポイントとベクトルを使用しています。法線またはベクトルのみで無限線を定義し、その線に沿って交点を定義して、その無限線のサブセットとして線分を作成できると確信しています。この方法で行を実装している現在のエンジンはありますか、それとももっと良い方法がありますか?

さらに複雑さ (または単純さ?) を追加するために、ウィキペディアは、ベクトル空間では、線分の端点はしばしばベクトルであり、特に u -> u + v であると述べています。すでに定義された無限の線と交差していますが、これの実装を見つけることができず、これを 3D エンジンに適用するときの私の考えの有効性について疑問に思います。Flash 3D エンジン、Papervision を見ると、さらに複雑になります。 Ray クラスを調べたところ、パラメーターとして 6 つの個別の数値を取り、それらを 2 つの異なる Number3D (Papervision の Vector に相当するもの) のデータ型として返します?!?

これらの低レベルの部分を実際の定義に従って実装する正しい方法を実際に使用するものの実装を見ることに非常に興味があります。

4

1 に答える 1

1

法線またはベクトルのみで無限の線を定義できると確信しています

いいえ、できません。ベクトルは線の方向を定義しますが、すべての平行線は同じ方向を共有するため、1 つを選択するには、線が通過する特定の点を使用してピン留めする必要があります。

ラインは通常、Origin + Direction*K 形式で定義されます。ここで、K は任意の実数値を取ります。その形式は他の数学にとって簡単だからです。線上の 2 点を使用することもできます。

于 2010-02-14T00:28:03.303 に答える