ページ 1 / 1
球と円柱の当たり判定
Posted: 2021年8月09日(月) 14:51
by make_unique
こんにちは3Dの当たり判定で円柱と球の当たり判定をやりたいのですが、なかなかうまくいきません。
どういう条件で当たっているか判定できますか?
Re: 球と円柱の当たり判定
Posted: 2021年8月09日(月) 16:31
by littlestream
球と球の当たり判定を応用して座標毎に行うのはどうでしょうか?
円柱は下底が円なのでそれに高さで伸ばしてみるのと
球はそのまま球の当たり判定へ組み込めるので
球と円柱のあらゆる座標との当たり判定でどうでしょうか?
自分はそれを応用してレイトレーシングでソフトウェアレンダリングしたことがあります。
確か球と球の当たり判定は球Aと球Bと半径RA,RBとすると
(AX-BX)^2+(AY-BY)^2+(AZ-BZ)^2<(RA+RB)^2
だと思います。
Re: 球と円柱の当たり判定
Posted: 2021年8月09日(月) 17:58
by littlestream
Re: 球と円柱の当たり判定
Posted: 2021年8月09日(月) 18:59
by usao
円柱の中心軸と球の中心点が成す平面上で考えれば
ただの長方形と円の判定になるんじゃない?
Re: 球と円柱の当たり判定
Posted: 2021年8月09日(月) 20:50
by make_unique
皆さん回答ありがとうございます!
実は私当たり判定がすごく苦手なのでいままで逃げてきたんですよね...
なので球と球しかわからないです...
littlestreamさん
申し訳ないですけどちょっと仰っていることがわからないです。すみません...
DXライブラリは使っていなくて、DirectX11を使っています。
usaoさん
なんかよさそうなんですけどどういう風に計算できるものなのでしょうか?
Re: 球と円柱の当たり判定
Posted: 2021年8月09日(月) 23:18
by みけCAT
usaoさんの言うように、円と長方形の当たり判定に帰着させる方法が良さそうですね。
まず、
点と直線と平面と交点と距離
に載っている方法で、球の中心点から円柱の中心軸に垂線を下ろした時の交点を求めます。
すると、この交点を原点、円柱の中心軸をx軸、交点と球の中心点を通る直線をy軸 (軸の向きは適当に)
とした平面を考えることができ、
その平面における球の中心点、および円柱の2個の底面と中心軸の交点の座標 (≒距離) がわかるはずです。
あとは、これらの座標と、球や円柱の半径を用いて、当たり判定をする円と長方形の座標が求まります。
- 円と長方形への帰着
- mixcpp-20210809.png (11.75 KiB) 閲覧数: 7869 回
円と長方形の当たり判定は、たとえばここで。
よしいずの雑記帳 円と長方形との当たり判定
Re: 球と円柱の当たり判定
Posted: 2021年8月10日(火) 00:30
by make_unique
みけCATさんありがとうございます。
私がやりたいのは円柱の丸い面の上で球のコリジョンを持ったキャラクターが戦う
というものなんですけどその判定がいるのですけどどうしましょう?
Re: 球と円柱の当たり判定
Posted: 2021年8月10日(火) 11:40
by usao
> どうしましょう?
って何だ?
「実装すればよくね?」以外に何かある?
みけCAT氏の図のaの値が円柱半径以内のときは判定方法は自明,みたいな処理を先にやる形にすれば
「面を成さない」パターンはそっちに含まれるから変な面倒も起きないだろう.
Re: 球と円柱の当たり判定
Posted: 2021年8月10日(火) 11:45
by usao
Re: 球と円柱の当たり判定
Posted: 2021年8月10日(火) 19:08
by みけCAT
make_unique さんが書きました: ↑2年前
私がやりたいのは円柱の丸い面の上で球のコリジョンを持ったキャラクターが戦う
というものなんですけどその判定がいるのですけどどうしましょう?
どう実装するかを考えて実装すればいいと思います。
・円柱は何個あるのか?
・円柱は動くのか?
・「戦う」とは具体的にどのような動作か?
・キャラクターの可能な動きは? (たとえばジャンプはできる?)
などによって、具体的な適切な実装は違ってきそうだと思います。
Re: 球と円柱の当たり判定
Posted: 2021年8月24日(火) 10:06
by Nanashi 777
通りすがりですが
usaoくんはなんでマトモな回答もしてないのにタメ口でしかも揚げ足をとるような口調なんでしょうか?
昔ながら(苦笑)の閉鎖的、排他的なエンジニア感があって見てられずコメントしてしまいました。