巨大な 3D グリッドを想像してみてください (手続き的に定義され、無限になる可能性があります。少なくとも、1 辺あたり 10^6 座標です)。各グリッド座標には、プリミティブがあります (たとえば、球、ボックス、またはその他の簡単で数学的に簡単に定義できる関数)。
グリッドの要素に対して、グリッドの外側の原点とそれに入る方向で、光線を交差させるアルゴリズムが必要です。つまり、レイはこの巨大なグリッドの途中まで移動し、プリミティブに当たる可能性があります。グリッドの範囲のため、反復法 [編集: (レイ マーチングなど)] は容認できないほど遅くなります。私が必要としているのは、プリミティブ ヒットを見つけるための閉じた形式の [編集:一定時間] ソリューションです。
私が考えた 1 つの可能なアプローチは、x、y、z のそれぞれのモジュラー算術空間でグリッド セルを囲む 8 つの座標のそれぞれのプリミティブに向かって各タイム ステップでレイが収束する量を決定し、次に除算することです。光線の方向によって最小距離を取ります。これが機能する可能性があると考える証拠は直感以外になく、Google も役に立ちません。「グリッドを交差させる」とは、グリッドの面を交差させることを意味します。
ノート:
- 私は本当にプリミティブの表面法線だけを気にします (交点までの距離があれば簡単に見つけることができますが、距離自体は気にしません)。
- この時点では、交差するプリミティブのタイプは重要ではありません。理想は箱です。2 番目の選択肢、球。ただし、どのようなアルゴリズムが使用されていても、他のプリミティブに一般化できる可能性があると想定しています。最悪の事態が発生したとしても、このアプリケーションにとってはそれほど重要ではありません。
ありがとう、
イアン