0

私は、平行 (ただし回転可能) 投影を使用する 2.5D ゲームのタイル エンジンに取り組んでいます。タイルは、頂点が調整され、カメラの位置と x/y 回転に基づいて配置が設定された平らな四角形です。ヨー (z) はありません。Starling でエンジンを記述します。

カメラの可視領域は、任意に回転し、固定幅の任意の高さの楕円内に収まるグリッド領域として説明できます。

私が今やりたいのは、投影する前に、ズーム半径/ sin / cosに対して設定された各座標をテストすることなく、画面スペース内にあるタイルのリストを取得することです. これは、半径よりも大きい限り、ダーティ セットになる可能性があります。しかし、私は最も汚れが少なく、最も最適化されたソリューションを探しています。

4

3 に答える 3

1

あなたが何をしたいのかを正しく理解していれば、これは充填の問題に似ています。

楕円の上に長方形のグリッドを重ねて、少なくとも楕円の内側にコーナーがあるタイルをリストしたいとします。適切なスケーリングを使用すると、これは楕円のスキャンフィルと同じになります。

ax² + 2bxy + cy² + 2dx + 2ey + f = 0グリッド点が整数座標に収まるように座標をスケーリング/変換して、楕円を暗黙的な形式 に置きます。最初に、有用なy値の範囲を決定します。次に、すべてのスキャンラインについて、 の極値を決定しますx

修正してみましょう。 :yに 2 次方程式がありxますax² + 2(by + d)x + (cy² + 2ey + f) = 0

その判別式は(by+d)- a(cy²+2ey+f) = (b²-ac)y² + 2(bd-ae)y + (d²-af)です。

この 2 次方程式を解くと、値yの範囲が得られます。y最小の天井と最大の床を取ります。

次に、この範囲内のすべての整数について解いてx、水平方向の範囲を取得します。

[At² + 2Bt + C= 0 の形式の方程式に判別式 B²-AC を使用していることに注意してください。]

于 2014-09-24T09:01:02.780 に答える
0

タイルが動かない場合は、octree または kd ツリーを使用できます。

于 2014-09-20T18:30:06.370 に答える