ページ 1 / 1
レイ判定について教えてください!!(DXライブラリ)
Posted: 2013年2月07日(木) 19:01
by EIYUU
このごろ2Dゲーム製作から3Dゲーム製作に変えたのですが・・・
2Dでは、当たり判定を三平方の定理を使っていましたが、
3Dでは、それで衝突判定ができないので、衝突判定について調べていたところ
レイ判定というものが見つかりました。
しかし、複雑すぎてまったく理解できませんでした。
そういうことで、レイ判定の使い方を教えてください!
最初なので円と線分の判定でいいです。
できるだけコードもお願いします。
Re: レイ判定について教えてください!!(DXライブラリ)
Posted: 2013年2月07日(木) 19:37
by softya(ソフト屋)
DXライブラリにはコリジョン( 衝突判定 )関数が用意されています。
「DXライブラリ置き場 3D関係関数リファレンスページ」
http://homepage2.nifty.com/natupaji/DxL ... .html#R9N1
これを、まず試されてはどうでしょうか?
「DXライブラリ置き場 3Dアクション基本+追加コリジョンモデル」 実際のサンプルです。
http://homepage2.nifty.com/natupaji/DxL ... llObj.html
Re: レイ判定について教えてください!!(DXライブラリ)
Posted: 2013年2月08日(金) 21:23
by EIYUU
そのようなものがあったのですね・・・
しかし、使い方のサンプルを見てもよくわかりません。
単純なコードを書いてくれたらうれしいです。
あと説明つきでおねがいします
Re: レイ判定について教えてください!!(DXライブラリ)
Posted: 2013年2月08日(金) 21:51
by softya(ソフト屋)
EIYUU さんが書きました:そのようなものがあったのですね・・・
しかし、使い方のサンプルを見てもよくわかりません。
単純なコードを書いてくれたらうれしいです。
あと説明つきでおねがいします
3D関係関数リファレンスの方のサンプルは、あれ以上簡単になりませんし解説も書かれています。
どこの部分が分からない聞いて頂けると嬉しいのですが。
Re: レイ判定について教えてください!!(DXライブラリ)
Posted: 2013年2月08日(金) 22:19
by EIYUU
宣言の部分の説明とかが無いのでそこのところがわからなかったりとか・・
たとえば
VECTOR StartPos, EndPos ;
MV1_COLL_RESULT_POLY HitPoly ;
この上のがわかりませんね・・・
VECTORの意味とかMV1_COLL_RESULT_POLYの意味とか・・・
ほかにも、何がどうなったら当たりになるのかとか・・・
これと同じコードをかいて、3Dモデルは、縦横8個に分割されている面を用意して、
MV1SetupCollInfo( ModelHandle, 0, 8, 8, 1 ) ;
ってかんじに書いたのですが、線をいくら動かしてもあたりの判定がでなかったりします。
Re: レイ判定について教えてください!!(DXライブラリ)
Posted: 2013年2月08日(金) 23:01
by softya(ソフト屋)
3Dのリファレンスはひと通りざっと見て欲しいところですが、VECTORは名前から想像できる通りベクトルや3次元の頂点を表す構造体です。VGet()のリファレンスに書かれています。
MV1_COLL_RESULT_POLYは、これもMV1CollCheck_Line()を見れば分かりますが、当たり判定結果構造体と書かれています。
つまり、こういうリファレンスなどでは関数の使い方から調べれば答えは載っているのです。
ライブラリを使うなら、積極的に調べる様にしましょう。
> ってかんじに書いたのですが、線をいくら動かしてもあたりの判定がでなかったりします。
MV1SetupCollInfo( ModelHandle, 0, 8, 8, 1 ) ;
を
MV1SetupCollInfo( ModelHandle, -1, 8, 8, 1 ) ;
とすればポリゴンモデル全体が当たり判定をするように出来ます。これでも当たりませんか?
【補足】
そもそも3D分野自体が初心者向けとは言えないので、ネット上の情報も少ないです。
それでもDXライブラリの3D関数は、結構サンプルが豊富なので分かりやすい方だと思います。
がんばりましょう。
Re: レイ判定について教えてください!!(DXライブラリ)
Posted: 2013年2月09日(土) 17:48
by EIYUU
やはりできません。
一応コードを載せておきます。
どこがいけないのでしょうか・・・。
コード:
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE),SetWindowText("衝突判定"),DxLib_Init(),SetDrawScreen(DX_SCREEN_BACK);
int Model;
float y ;
VECTOR StartPos, EndPos;
MV1_COLL_RESULT_POLY HitPoly;
Model= MV1LoadModel( "Model/Model.mqo" );
MV1SetPosition( Model, VGet( 320.0f, 300.0f, 600.0f ) ) ;
MV1SetupCollInfo( Model, -1, 8, 8, 1 ) ;
y=300.0f;
while(ProcessMessage()==0&&ScreenFlip()==0&&ClearDrawScreen()==0){
if( CheckHitKey( KEY_INPUT_UP ) == 1 )
y += 16.0f ;
if( CheckHitKey( KEY_INPUT_DOWN ) == 1 )
y -= 16.0f ;
MV1DrawModel(Model);
StartPos = VGet( 0.0f, y, 600.0f ) ;
EndPos = VGet( 1000.0f, y, 600.0f ) ;
HitPoly = MV1CollCheck_Line( Model, 0, StartPos, EndPos ) ;
if( HitPoly.HitFlag == 1 )
EndPos = HitPoly.HitPosition ;
DrawLine3D( StartPos, EndPos, GetColor( 255,255,0 ) ) ;
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "HIT:%d", HitPoly.HitFlag ) ;
}
DxLib_End();
return 0;
}
Re: レイ判定について教えてください!!(DXライブラリ)
Posted: 2013年2月09日(土) 18:08
by softya(ソフト屋)
私の用意したデータではHITします。
mqoデータに問題が有る気がします。
どこかのアップローダにアップ出来ませんか?
Re: レイ判定について教えてください!!(DXライブラリ)
Posted: 2013年2月09日(土) 18:23
by EIYUU
いちおうここに・・・
http://kie.nu/MNi
ここにおいておきました
PWは、255です
Re: レイ判定について教えてください!!(DXライブラリ)
Posted: 2013年2月09日(土) 18:28
by softya(ソフト屋)
線(レイ)と平面が平行なので当たらないと思います。線(レイ)を平面に対して垂直に立ててみましょう。
Re: レイ判定について教えてください!!(DXライブラリ)
Posted: 2013年2月09日(土) 18:31
by EIYUU
線を垂直にというと・・・
どこを変えたらいいですか・・・
DrawLine3Dをかえるのでしょうか・・・
本当に わからなくてすみません
Re: レイ判定について教えてください!!(DXライブラリ)
Posted: 2013年2月09日(土) 18:35
by softya(ソフト屋)
EIYUU さんが書きました:線を垂直にというと・・・
どこを変えたらいいですか・・・
DrawLine3Dをかえるのでしょうか・・・
本当に わからなくてすみません
その質問をされるとは思っていませんでした。
三次元座標のx,y,zがどうなっているかイメージで把握できていますか?
数学で勉強されたことはありますよね?
Re: レイ判定について教えてください!!(DXライブラリ)
Posted: 2013年2月09日(土) 18:36
by EIYUU
いや・・・線の作り方は、わかります。
2点があれば作れるのわけですよね。
しかし、それをどこに記述すればいいのかがわかりません
Re: レイ判定について教えてください!!(DXライブラリ)
Posted: 2013年2月09日(土) 18:41
by softya(ソフト屋)
このプログラムで座標系変数は2つしかありません。
それは線分の頂点を指す座標系の変数ですので、迷う事がなく変更するものはそれしかない状況です。
最初の起動状態で、表示される線分の2頂点の座標も分からないですか?
Re: レイ判定について教えてください!!(DXライブラリ)
Posted: 2013年2月09日(土) 18:45
by EIYUU
この中で座標を持ったものって、
StartPosとEndPosで、あってますかね。
Re: レイ判定について教えてください!!(DXライブラリ)
Posted: 2013年2月09日(土) 18:47
by softya(ソフト屋)
EIYUU さんが書きました:この中で座標を持ったものって、
StartPosとEndPosで、あってますかね。
聞く前に、試してみましょう。
プログラムを理解するのは、それが一番の方法です。
そんな事でパソコンは壊れません。
Re: レイ判定について教えてください!!(DXライブラリ)
Posted: 2013年2月09日(土) 18:52
by EIYUU
おお
できました。
垂直になって、HITフラグも1になりました!
ありがとうございました!!!
思ったら書いてみるのが先ですね
本当にありがとうございました。
Re: レイ判定について教えてください!!(DXライブラリ)
Posted: 2013年2月09日(土) 19:07
by softya(ソフト屋)
EIYUU さんが書きました:おお
できました。
垂直になって、HITフラグも1になりました!
ありがとうございました!!!
思ったら書いてみるのが先ですね
本当にありがとうございました。
試行錯誤した上で分からなかったら聞いてくださいね。
そうすれば、行き詰まった時点で、こちらの説明もより分かるぐらいには理解が進んでいるはずです。