コリジョン 当たり判定計算

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
てんむすキツネ
記事: 88
登録日時: 13年前
住所: 岡山

コリジョン 当たり判定計算

#1

投稿記事 by てんむすキツネ » 11年前

FPSゲームを作っていて、
カメラの位置から、足元(の基準)となっている位置まで
の座標を使って
まわりのものとの接触判定をしようとしています。

最初に

コード:

MV1SetupCollInfo( img_3D[0] );
で初期化してから

コード:

void clS_3D_graph::Hit(){

	MV1_COLL_RESULT_POLY_DIM out;
	int on_flag= 0;

	for(int i=0; i<OBJECT_3D_MAX; i++ ){
		if(graph.object[i].flag== 1){

			//物体と触れているかどうか 自分は、camera.xyの身長分の線として扱う
			out=  MV1CollCheck_Capsule( imG_3D[graph.object[i].object_img] , -1 ,
                                                                   VGet( graph.camera.x, graph.camera.y , graph.camera.z ) ,
                                                                   VGet( graph.camera.x, graph.camera_under_y ,  graph.camera.z ),CAMERA_XZ );

			for(int j=0; j<out.HitNum; j++){//あたっているなら あたった数分繰り返す
				if(out.HitNum!=  0){
						on_flag= 1;
					}
				}
			}
		}
	}
	if(on_flag== 0){//足場がCAMERA_Yの範囲になければ
		graph.camera_under_y-=13;//そこは穴だから落ちる
	}
}
要は、下に何もなければ
落ちていくようにしたいんです。

しかし何故か中心座標付近なら、きちんと当たり判定ができるのに
一定以上離れると、当たり判定がなくなります。

3D関係のものに触れるのは
はじめてなのでよくわかりません。

後、法線ベクトルとはどのようなものでしょうか?
自分は、ポリゴン(というか面)に対して垂直な線として認識していますが
あっているのでしょうか?
MLP!MLP!

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: コリジョン 当たり判定計算

#2

投稿記事 by softya(ソフト屋) » 11年前

これだと
MV1SetupCollInfo( img_3D[0] );
img_3D[0] しかコリジョン設定されていないですが、それではないでしょうか?

実際に指定しているMV1SetupCollInfoの詳細なパラメータも知りたい所です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
てんむすキツネ
記事: 88
登録日時: 13年前
住所: 岡山

Re: コリジョン 当たり判定計算

#3

投稿記事 by てんむすキツネ » 11年前

返信ありがとうございます。

3Dに関係するグラフィックはまだ2つしか
作ってないので。
実際の初期化ではこんな感じ

コード:

imG_3D[0]=MV1LoadModel( "date/graph/3D/0.mqo" );
	imG_3D[1]=MV1LoadModel( "date/graph/3D/ラビエル3D背景.mqo" );
	
	MV1SetupCollInfo( imG_3D[0] );
	MV1SetupCollInfo( imG_3D[1] );
リファレンスに載っていた説明(http://homepage2.nifty.com/natupaji/DxL ... .html#R9N8

第2引数「int FrameIndex」に
フレーム(ボーン)を指定するのですが、現在扱っているグラフィックはそんなものまだないので
モデル全体をコリジョンとして扱うために、-1を設定しています。
初期値が-1なのでしなくてもいいかなーとか
勝手に解釈して、飛ばしました。

その後の引数は、まだ処理速度の事を考えていないので飛ばしました。

本当は、弾幕STGで使う3D背景のテスト用に作っていたのですが、3Dグラフィック扱うのが楽しくて・・・

FPS作ろうかなーなんて。まだ3日目です(笑)
MLP!MLP!

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: コリジョン 当たり判定計算

#4

投稿記事 by softya(ソフト屋) » 11年前

とりあえず当たった場所のポリゴンの上にDrawTriangle3Dで三角形と当たり判定基準のDrawCapsule3Dを描画してみて下さい。
プログラム全体とデータを見せてもらうのが一番ですけどね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
てんむすキツネ
記事: 88
登録日時: 13年前
住所: 岡山

Re: コリジョン 当たり判定計算

#5

投稿記事 by てんむすキツネ » 11年前

こちらの都合で、
判定基準に直線を用いる方法に変えてみました。

こっちのほうがわかりやすいですし

現在、バグ中のものでよければUpします

http://www1.axfc.net/uploader/C/so/170710

キーワードはbagです。
あまりバグったものを人に渡すのは良くないと思うので、キーワードかけました


色々いじってみてたのですが、やっぱり
当たり判定自体がおかしい気がします。
引数の意味とかを間違えているかもしれません
MLP!MLP!

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: コリジョン 当たり判定計算

#6

投稿記事 by softya(ソフト屋) » 11年前

調べる予定ですが今日一日お待ちください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
てんむすキツネ
記事: 88
登録日時: 13年前
住所: 岡山

Re: コリジョン 当たり判定計算

#7

投稿記事 by てんむすキツネ » 11年前

わざわざお時間をとっていただき、本当にありがとうございます。
MLP!MLP!

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: コリジョン 当たり判定計算

#8

投稿記事 by softya(ソフト屋) » 11年前

コードが色々しているので調べるのが難しいです。
私も困ったときは小さなコードにまとめますので、コリジョン検証用のコードの作成をお願いします。

棒が動きまわって、当たり判定したらポリゴン面の3頂点が分かる(空中に3頂点の棒を垂直に伸ばすなど)するだけ良いのでmain.cppの1ファイルにまとめてください。
カメラは棒が見えるアングルでお願いします。カーソルキーだけで操作できるものが嬉しいです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
てんむすキツネ
記事: 88
登録日時: 13年前
住所: 岡山

Re: コリジョン 当たり判定計算

#9

投稿記事 by てんむすキツネ » 11年前

わかりました。
ただ、まだ扱い慣れていないので
夜中か、明日かぐらいになると思います

今度からは、出来るだけわかりやすくコードをかけるように努力してみます
MLP!MLP!

閉鎖

“C言語何でも質問掲示板” へ戻る