タグ

4分木空間分割に関するedo_m18のブックマーク (2)

  • その15 8分木空間分割を最適化する!

    ホーム<ゲームつくろー!<衝突判定編 3D衝突編 その15 8分木空間分割を最適化する! 空間分割はオブジェクト同士の衝突や不必要な描画を除くなどパフォーマンスの最適化に必須の技術です。2D衝突編その8とその9では、2D平面を分割する4分木空間分割の最適化と実装をしました。同じ考え方は3D空間の分割にも十分に活用できます。 3Dの空間を分割する典型が8分木空間分割(Octree)です。空間分割の方法は、4分木とお話がかぶりますが、まず一番大きな空間(ルート空間)を定義します。3Dの場合これは直方体となります。分割は各辺のど真ん中を割ります。縦横高さそれぞれで分けるので、1回の分割で8つの小空間が出来上がります。これで親であるルート空間の下に8つの小空間が所属する事になります。後は空間を分割するたびに樹状に所属が広がっていきます。 オブジェクトは境界図形に包まれて、8分木内にある境界図形をす

  • その9 4分木空間分割を最適化する!(実装編)

    ホーム<ゲームつくろー!<衝突判定編 2D衝突編 その9 4分木空間分割を最適化する!(実装編) 前章で4分木空間分割の最適化法を紹介しました。章ではその実装に目を向けてみたいと思います。 ① 実装ポイントをおさらい まず先に、実装のポイントをおさらいしておきましょう。 ○ 登録作業 衝突対象となるオブジェクトを4分木(線形4分木)に直接登録すると、更新時にそれをツリーから検索する非常な手数がかかるため、前章ではオブジェクトと登録空間を一緒にしたOBJECT_FOR_TREE構造体を登録するスタイルにしました。オブジェクトはその境界図形の大きさから適切な空間に置かれる必要があります。これは最下位空間にモートン順序を振り、境界図形範囲→モートン番号→線形4分木要素番号という連鎖的な変換関数を用いると、o(1)レベルで空間へ登録する事ができます。 ○ 空間は登録専門、オブジェクトは自主的にリ

  • 1