🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
OpenGL

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

C++

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

Q&A

解決済

1回答

1420閲覧

3DCG 球と球の当たり判定を実装したい。

退会済みユーザー

退会済みユーザー

総合スコア0

OpenGL

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

C++

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

0グッド

0クリップ

投稿2021/01/06 05:22

編集2021/01/06 09:14

参考サイトを参考に当たり判定を提示コードのうに実装しましたが。上手行きません。提示画像で黒い丸は固定です。赤い丸が移動しているブロックです(プレイヤーのようなもの)Sが最初にいる場所ですが。Nの場所に移動していると黒い丸を超えてもずっと衝突判定が起こってしまうのですがどうすればいいのでしょうか?Sの地点では当たり判定は起こっていません。

参考サイト: http://marupeke296.com/COL_3D_No5_SphereToSphere.html
イメージ説明

cpp

1/アップデート 2 3//アップデート 4void Game::Update() 5{ 6 7 glm::vec3 p1 = mMesh->at(0).getPosition(); 8 glm::vec3 p2 = mMesh->at(1).getPosition(); 9 10 float p1_r = 1; //半径 11 float p2_r = 1; //半径 12 13 float a = (sqrt(p2.x - p1.x)) + (sqrt(p2.y - p1.y)) + (sqrt(p2.z - p1.z)); 14 float b = (sqrt(p1.x - p2.x)) + (sqrt(p1.y - p2.y)) + (sqrt(p1.z - p2.z)); 15 16 if (a <= (sqrt(p1_r + p2_r))) 17 { 18 printf("当たり\n"); 19 } 20 else 21 { 22 printf("no hit \n"); 23 } 24 25 26 27 28 29 for (int i = 0; i < mMesh->size(); i++) 30 { 31 mMesh->at(i).Update(); 32 } 33 KeyInput(); //キー入力 34}

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

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

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

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

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

txty

2021/01/06 06:03 編集

.objのローダーは完成したのですね。
退会済みユーザー

退会済みユーザー

2021/01/06 06:08

いえ、完成しておりません。が取り得ず時間の無駄なので放置して別ののことに手をつけ始めました。
txty

2021/01/06 06:43

オブジェクト2つ出てるけど、これでも完成じゃないの
退会済みユーザー

退会済みユーザー

2021/01/06 06:52

これは自分で頂点座標を手入力した頂点座標です。
txty

2021/01/06 07:22

ああ、なるほど。なんでも出せるよう、引き続き頑張ってください。
stdio

2021/01/07 00:43

球と球の当たり判定と書いていて、描画しているものは四角形のように見えるのは何故ですか?
退会済みユーザー

退会済みユーザー

2021/01/07 01:19

> Nの場所に移動していると黒い丸を超えてもずっと衝突判定が起こってしまうのですがどうすればいいのでしょうか? デバッグしましょう
退会済みユーザー

退会済みユーザー

2021/01/07 01:26

stdio 氏 立方体ですが取り得ず球体で当たり判定をしています。
fana

2021/01/08 01:51

何故 参考先の数式をそのまま実装しないのか? 本当に理解に苦しむ. そうでなくとも > sqrt(p2.x - p1.x) とかいう式を考えた時点で不安を覚えたりとかしないのでしょうか? {算数,数学}が必要な処理を考えるなら,まずはコードを書くよりも前に,必要な{算数,数学}の側をきちんと理解すべきです. (数式を見て演算手順が意味がわからないならば,その内容をコード化できるわけがない)
退会済みユーザー

退会済みユーザー

2021/01/08 05:19

あっpowでした。関数でした。
stdio

2021/01/11 05:48

まぁ、ここまで理解していないのなら学校にでも入学した方が良いですよ... その程度で躓いているようでは、先が思いやられます...
guest

回答1

0

ベストアンサー

「2倍する」ことと,「2乗する」ことを区別しましょう.
提示URLの先で「^2」とか書かれているのは後者を意味します.

投稿2021/01/06 05:39

fana

総合スコア11985

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

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

退会済みユーザー

退会済みユーザー

2021/01/06 07:28 編集

質問ですが上から下に下がった時の判定などうまくできませんどうすればいいのでしょうか? そもそもこの式だけじゃ三次元の球体同士の当たり判定ってうまくできいないのではないかと思うのですが
fana

2021/01/06 07:40

> 質問ですが上から下に下がった時の判定などうまくできませんどうすればいいのでしょうか? (毎度のことながら)何をおっしゃっているのかが全くわかりません. > そもそもこの式だけじゃ三次元の球体同士の当たり判定ってうまくできいないのではないかと思う なぜそう思うのか?までが述べられないと,やはりこちらにはおっしゃる意味がわかりません. 「2つの球の中心間距離が,2つの球の半径の和以下か否か」という素朴な算数だと見えますが.
退会済みユーザー

退会済みユーザー

2021/01/06 07:47

質問ですがモデルの座標の原点がモデルの真ん中ではなく別の原点なのでしょうか?これをはっきりさせる方法はあるのでしょうか?別のモデルを表示させましたが。同じ座標に重なりました。
fana

2021/01/06 07:54

んん? p1.x とか p1.y とかいうのは,球の中心の座標ではないのですか???
退会済みユーザー

退会済みユーザー

2021/01/06 08:15

いや、とりえず、中心とうする値をモデルの座標って言うことにしたのですがやはりこれが悪いのでしょうか?その場合どうやってモデルの中心座標を入手できるのでしょうか?
fana

2021/01/06 08:29

そんなこと言われましても,あなたが言う「モデルの座標」とかいうのが何者で,それをどのように実装していて,「原点」がどこにある物なのか,等といった事柄はこちらは知りようがないわけですし. 「モデルの中心座標の入手」とか言われてもあなた以外に知りようがない話と思われます. そこらへんの内部事情がどうあれ,とにかくこの小学生か中学生かわからんけども義務教育レベルの算数の意味に合わせて「然るべくやる」だけの話であるとしか思えないので,申し訳ないですが,一体何を疑問視しているのかすら理解できないです. ご自身の実装においての話ならば,ご自身であれば【自明】ではないのですか? プログラミング言語としての文法の誤りに関しては回答しました. それ以外のあなたの実装特有の話については(上述のように)回答できかねます.
fana

2021/01/06 08:33

(「ご自身が物体の座標なりなんなりを須らく定義して,それを実際に表示しているのに,座標を知る方法がご自身ではわからない」という話なのだとすれば,そのような状況というのが私には理解不能です.)
fana

2021/01/06 08:37

回答内容で解決しないのであれば,ベストアンサーを付けないでください. (ベストアンサーがついていると話が終わっているように見え,他者が回答する率が激減するのではないかと思います) 現状で本件が解決していないのであれば,一旦このベストアンサーを外して,他者からのより役に立つ回答を待つと良いかと思います. (ベストアンサーを付けていなければ,「まだ回答を待っている」とかいうアクションを取れたりもするはずです)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問