Submit Search
衝突判定
•
10 likes
•
11,219 views
Moto Yan
Follow
大学の時に作った衝突判定についてだべった時用のスライド。 発見したのでアップしてみる。スライドの作り方がいま見るとすごく雑い。
Read less
Read more
Gallery
Report
Share
Gallery
Report
Share
1 of 20
Download now
Download to read offline
More Related Content
衝突判定
1.
www.***.net Collision Detection 衝突判定の基礎とCPUの構造から見る高速化
2.
www.***.net
なぜ衝突判定か ゲームでは、処理時間の9割は描画関係。 でも衝突判定はオブジェクト数のO(n^2)に なる。 画面が複雑になるとオブジェクト数も増え る。 だから結構衝突判定も重い(ことがある)。 2
3.
www.***.net
Contents 点の衝突判定 矩形の衝突判定 矩形と線分の衝突判定 3Dへの拡張 ゲームにおけるBVの使用 衝突可能性による高速化 3
4.
www.***.net
点の衝突判定 return (a.x==b.x && a.y==b.y) ? 1 : 0; return !((a.x ^ b.x) | (a.y ^ b.y)); 上記のコードは等価だが、下記のコードは条 件分岐がなく、高速である。 4
5.
www.***.net
矩形の衝突判定 return (r1.left <= r2.right)&&(r1.right >= r2.left)&&(r1.top <= r2.bottom)&&(r1.bottom >= r2.top); return ((DWORD)(r1.left - r2.right) & (r2.left - r1.right) & (r1.top - r2.bottom) & (r2.top - r1.bottom)) >> 31; これは最上位ビット(符号)に着目している 5
6.
www.***.net
矩形と線分の衝突判定 は、線分同士の判定に帰着させる。4辺と 線分を交差判定する(包括関係は例外)。 スーパーマリオワールドぐらいならそこまでし なくても良い(特殊な矩形を用意)。 坂の任意の点の高さをh=sin(θ)・wで。 6
7.
www.***.net
線分の交差判定 何気に結構重い処理。 二つの直線に交差点があるかを確認した 上で、交差点がボックス内に収まっている か判定する。 要は連立一次方程式を解きましょう。 7
8.
www.***.net
3Dへの拡張 点,円はそのまま応用できる。 矩形はAABBとOBBの二通りが考えられ る(とりあえずね)。 ただし移動を考え始めると結構面倒。 8
9.
www.***.net ゲームにおけるBVの使用
本当はマッピング画像(色による判定)を作 るのがよい(2D) 本当はポリゴン同士の当たり判定を総当り でやる方がよい(3D) でも面倒かったり重かったり。 特に3Dでは球,AABB,OBB,n-DOPが多い。 9
10.
www.***.net
OOBの判定 データ構造が命(一般的なのは中心座標・ x,y,zへの半径・ x,y,z 方向行列)。 フィッティングがさらに重要。 ベクトルの微分とかめんどくさいけど。 死ねる。 n-DOPの方が効率良いんでない?って話も あるけど、今回はカットで(ごめん)。 10
11.
www.***.net 衝突可能性による高速化(2D) 軸ソート グリッディング
BSPTreeも使えるけど、二次元ではあまり 使用する意義がないと思われ・・ 11
12.
www.***.net
軸ソート 1.矩形のLeftの値でクイックソートする。 2.ソートされた順番に次の処理を行っていく。 ・リストに当たり判定を調べる矩形を加える。 ・リストにある矩形を順に調べていく (1)リストからとってきた矩形の右端が今調 べている矩形の左端より左の場合はリストから はずす (2)リストからはずさなかった場合は交差判 定を行う 12
13.
www.***.net
グリッディング 1.矩形の範囲からその矩形を含んでいる 桝目のリストに、そのリストを加える。 2.桝目のリスト毎で通常の当たり判定の 計算を行う。 ・コツは升目のサイズを2の累乗にすること ・升目のサイズが一意な事と、複数個の枡に 属するオブジェクトの扱いが問題 13
14.
www.***.net 衝突可能性による高速化(3D) kdTree
BSP Tree この二つのやろうとしていることは大体一緒。 そんでもってどっちも2Dにも使える。あん まり使用事例聞かないけど 14
15.
www.***.net
kd Tree 2D→4分木 3D→8分木 k分木に一般化可能 対象領域全域をカバーする矩形を再帰的に n分割する。分割線上のオブジェクトを節に 保存し、非分割領域に属するオブジェクト をそれぞれの葉とする。 15
16.
www.***.net
BSP Tree binary space partition tree 見てのとおりの二分木でkd treeと同じこと をしようとする手法。超平面とか出てくる。 むずい。 何が難しいって、効率的なBSP Treeの構 築が。何とか最悪を回避すること。 16
17.
www.***.net
おまけ 2Dの判定を精密に行うには 当たりエリアを着色した画像を作る。キャラク タと同期して動かす(描画しない)。すべて の点の座標について、他のキャラクタの当 たり判定画像が着色されているか調べる。 17
18.
www.***.net
おまけ 3Dの判定を精密に行うには →三角形のポリゴンを総当りで判定する。 空間分割と併用すればこれで割とOKな時も ある。 ※非三角ポリゴンをモデルに含む時が要注 意 18
19.
www.***.net 三角と三角 一方の三角形の二つの辺が他方の三角
形の内部を貫通している 各三角形のうちのそれぞれの一辺が他方 の三角形の内部を貫通している ※三角形が縮退しているとだめ。要例外 19
20.
www.***.net
おわり。 次は誰かほかのテーマでやってくれ。 ・・・つーか準備不足でごめん。 20
Download now