今回は、3D空間での床の当たり判定について考え方がよくわからないので解説してもらえませんか?
この手の質問は、結構出ていたと思うのですが、坂道の当たったあとの押し上げる処理がよくわかりません。
http://homepage2.nifty.com/natupaji/DxL ... ction.html
上記のURLの解説を参考に壁の当たり判定は、出来たのできました。
一応、僕は人に上下二つの球体をつけて、当たり判定をしています。
どういうことかというと、上半身に球体Aをつけて、足に球体B(半径 A>B)にして、壁に当たったときは、
大きさ的に上半身の球体Aでの壁との当たり判定をしてみました。
床は、高さ的に足にあると壁とは当たらず、床だけと判定できると思い、このような判定方法にしました。
とても大変ですが、坂がある場所ごとに座標で(この区域にプレイヤーが足を踏み入れたらY座標をUP)
とかという方法でもよいと思いますか?
質問が分かりにくいかもしれませんがお願いします。
DXライブラリ 3D空間での坂道の当たり判定
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: DXライブラリ 3D空間での坂道の当たり判定
3Dにおいての床との処理は奥深いものがあって、物理現象を完全には再現できませんので、これが正解というのはないのです。
なので、それらしく見えれば正解です。
特別複雑でなければ、体の中心からレイを床に飛ばしてレイが当たった所を足元にすれば良いと思いますよ。
なので、それらしく見えれば正解です。
特別複雑でなければ、体の中心からレイを床に飛ばしてレイが当たった所を足元にすれば良いと思いますよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: DXライブラリ 3D空間での坂道の当たり判定
なるほど。凄く納得しました。
DXライブラリの線分とモデルの判定関数を使って、交差した座標を取得したいと思います。
DXライブラリの線分とモデルの判定関数を使って、交差した座標を取得したいと思います。
Re: DXライブラリ 3D空間での坂道の当たり判定
大体ステージのモデルの高さは決まってるので、レイではなく線分でやりました。
また、僕が想像していたような滑らかな縦の斜め移動が出来ました。
ありがとうございました。
一応プログラム載せておきます。
こんな感じになりました。
スマホで今書いたのでインデントやスペースがおかしかったら、すみません。
コピペやパソコンで書いた方がよいかもしれませんが事情により、今出来ないので。
今回は、本当にありがとうございました。
また、僕が想像していたような滑らかな縦の斜め移動が出来ました。
ありがとうございました。
一応プログラム載せておきます。
//一部だけ
int STAGE ;//ステージのモデルはハンドル
int Player_X,Player_Y,Player_Z;//プレイヤーの座標
VECTOR StartPos, EndPos;//線分の始点と終点
MV1_COLL_RESULT_POLY HitPoly ;
// モデル全体のコリジョン情報を構築
MV1SetupCollInfo( STAGE,-1,3,3,3 ) ;
while(/*メインループ*/) {
StartPos = VGet( Player_X, Player_Y+500, Player_Z ) ;//始点
EndPos = VGet( Player_X, Player_Y-10000, Player_Z ) ;
HitPoly = MV1CollCheck_Line( STAGE , -1, StartPos, EndPos ) ;
if( HitPoly.HitFlag == 1 ){//衝突したら
Player_Y = HitPoly.HitPosition.y;//この時カメラを相対位置でない場合カメラも座標を移動
}
}
スマホで今書いたのでインデントやスペースがおかしかったら、すみません。
コピペやパソコンで書いた方がよいかもしれませんが事情により、今出来ないので。
今回は、本当にありがとうございました。