頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


三角形の内外判定

iPhoneでVRっぽいアプリを作ろうとしてるんだけど、VRゴーグルにiPhoneを入れちゃうので画面をタップできない。でもボタンの機能が欲しかったので、画面中央に十字を表示させてそれがボタンの枠内に入っているのを検出しようとしたのよ。
ボタンのエリア自体は長方形としても、それが画面に投影された時には任意の四角形になってるだろうからそれを三角形二つと考えて、ある点が三角形の内側にあるか?って判定をすればいいことになる。

こういうのを「内外判定」って言うそうな。

点と三角形の当たり判定( 内外判定 )
外積
参考にしたのは↑これらのページなど。
内外判定してくれる関数とか元々iOSのフレームワークにあるんじゃないのと思ったけど、調べても見つからないし、こうやって計算できるよなんてページが出てくる(下のリンクとか)。
algorithm - How to determine if a point is in a 2D triangle? - Stack Overflow

ボタンの四隅の(世界座標系での)座標を変換して行って、xy平面の画面(xyとも-1から1)に投影した時の座標を得ることができれば後は三角形の内外判定を2回するだけ。
実際には外積を計算する必要はなく、外積によるベクトルの向きが揃うかが問題なので、そのz成分を計算するだけでOK。

こんな感じに。左側に画面中央を示す十字マークがある(ちょっと薄くて見づらいな、要修正)。
スタートボタン上に十字マークが乗ったのを検出してる。




そう言えば、iPhoneのVRアプリで射撃するようなゲームがあってそれも画面中央を示すマークが(左右どちらかは忘れたけど)片側の画面にしかなかったんよ。
マークも左右両方にある方がいいやん、と思い最初左右それぞれの画面中央に表示させたんだけど、そうすると十字マークは無限遠に位置することになって遠くを見てる時はいいんだけど、近くを見ると十字マークにピントが合わない状態になりうっとおしい!ということになった。射撃ゲームで片側しかマークがなかったのはそういうことだったのかとこの時に気付いたわ。

<< ベクトル二つでカメラ姿勢を決めるのは不十分  TopPage  休暇村南淡路へキャンプに行ってきた >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1028-2a72a47b




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad