21

このペーパーで説明されているアルゴリズムを実装しようとしています。これは、レイ トレーシングに役立つ、直線に沿ってグリッド セルをトラバースするために使用されます。

http://www.cse.yorku.ca/~amana/research/grid.pdf

この論文では、アルゴリズムを初期化と反復トラバーサルの 2 つの部分として説明しています。反復トラバーサル部分は理解できますが、初期化部分の一部の変数がどのように計算されるかを理解するのに苦労しています。

tMaxX, tMaxY, tDeltaX&の初期化に助けが必要tDeltaYです。それらの初期化手順は次のように説明されています。

次に、光線が最初の垂直ボクセル境界を横切る t の値を決定し、それを変数 tMaxX に格納します。同様の計算を y で実行し、結果を tMaxY に格納します。これら 2 つの値の最小値は、現在のボクセルにとどまりながら光線に沿ってどれだけ移動できるかを示します。

最後に、tDeltaX と tDeltaY を計算します。TDeltaX は、そのような動きの水平成分がボクセルの幅と等しくなるように、光線に沿ってどれだけ移動する必要があるかを (t の単位で) 示します。同様に、ボクセルの高さに等しい垂直成分を持つ光線に沿った移動量を tDeltaY に保存します。

上記の英語の説明から必要なコードを推測できません。誰かがそれを数学/擬似コード式に翻訳できますか?

4

2 に答える 2

12

X座標変数の初期化(Yも同様)

  DX = X2 - X1
  tDeltaX = GridCellWidth / DX
  tMaxX = tDeltaX * (1.0 - Frac(X1 / GridCellWidth)) 
  //Frac if fractional part of float, for example, Frac(1.3) = 0.3, Frac(-1.7)=0.3

例:

  GridCellWidth, Height = 20
  X1 = 5, X2 = 105 
  Y1 = 5, Y2 = 55 
  DX = 100, DY  = 50
  tDeltaX = 0.2, tDeltaY = 0.4 
  tMaxX = 0.2 * (1.0 - 0.25) = 0.15  //ray will meet first vertical line at this param
  tMaxY = 0.4 * (1.0 - 0.25) = 0.3   //ray will meet first horizontal line at this param

パラメータ t = 0.15 で最初のセル境界が満たされることがわかります。

于 2012-09-11T13:09:23.703 に答える