質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

614閲覧

OpenGL 対応オブジェクトごとにAABB判定関数を走らせる

Tololololo

総合スコア118

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/12/11 16:49

編集2018/12/11 16:50

単純に対象となる2つのオブジェクトを引数にしてbool値でAABB判定の結果を返す関数を作りました。

C++

1// AABB判定のコード 2#include <iostream> 3using namespace std; 4 5bool AABB(float boxA[2][3], float boxB[2][3]) 6{ 7 8 return( 9 boxA[0][0] > boxB[1][0] && 10 boxA[1][0] < boxB[0][0] && 11 boxA[0][1] > boxB[1][1] && 12 boxA[1][1] < boxB[0][1] && 13 boxA[0][2] > boxB[1][2] && 14 boxA[1][2] < boxB[0][2] 15 ); 16 17} 18 19int main() 20{ 21 // 座標の{最大値},{最小値} 22 // このテストでは1つまりtrueで衝突しているはず 23 float bA[2][3] = {{10,10,10},{5,5,5}}; 24 float bB[2][3] = {{11,11,11},{9,9,9}}; 25 26 bool a = AABB( 27 bA, 28 bB 29 ); 30 cout << a; 31 return 0; 32} 33

 
引数には2つの対象しか入らないため、対象オブジェクトの数に応じたAABB判定関数を実行してやる必要があります。

イメージ説明

ObjectM -> 動き回るオブジェクト。どのオブジェクトとも衝突の可能性がある。
ObjectA,B,C -> 停止しているが、Mとの衝突の可能性があるオブジェクト。
つまり、AABB(M,A); AABB(M,B); AABB(M,C);をすべて書く必要がある。


2つのオブジェクトだけ!!とかであれば別段どうってことはないのですが、
数が増えていくにつれて同じ関数の実行回数が増えていくので、すぐクラッシュしたりするんじゃないかと心配です。

AABB判定ってこんなものですか?
それともやはりこのAABB判定をもっと工夫したほうがいいですか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そんなものでしょう。AABBは軽い処理なので多数回行っても大丈夫です。
ただ1点、一対多ならObjectM側にAABBをとる必要は無いですね。(他物体を太らせれば同じこと)
あとはAABB判定より中心間距離の方がやや軽いかなというのと、AABBや距離で処理が追いつかないほど大量にオブジェクトを出すならエリアを分けてプレイヤーのいるエリアのみ演算するとよいかと思います。

追記。
もう一つ思い出しました。多数の場合、オブジェクトの存在領域を8分木で管理すると判定が減って速いと思います。

投稿2018/12/12 01:30

編集2018/12/12 04:46
ikadzuchi

総合スコア3047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問