技術指南/応用技術
ここでは、3Dゲームを作成するのに使用するかもしれない応用技術を紹介します。
ちょっと難しいですが、自由度は高くなります。
ちょっと難しいですが、自由度は高くなります。
コリジョン
- 球と球
簡易的なコリジョン判定
DxLibの関数ではHitCheck_Sphere_Sphereを使うと簡単です
DxLibの関数ではHitCheck_Sphere_Sphereを使うと簡単です
int HitCheck_Sphere_Sphere( VECTOR Sphere1CenterPos, float Sphere1R, VECTOR Sphere2CenterPos, float Sphere2R ) ;
// 球と球の当たり判定( TRUE:当たっている FALSE:当たっていない )
但し,これ以外の方法で球と球の判定であれば,球の中心点の座標からの距離と2つの球の半径で比べる方法もある.
- VECTOR R1,R2;//球体の座標1,2
- float r1 = 1.0f, r2 = 2.0f;//球体の半径を決める
- R1=VGet(0,0,0);
- R2=Vget(2,0,0);
- if(VSquareSize(VSub(R1,R2) ) <= (r1+r2)*(r1+r2))
- {//平方根の計算は処理が重いので2乗のまま扱う
- //2つの球が接触しているときの処理
- }
- 対モデル判定
モデルとの判定となると簡易的なコリジョンと比べ計算量も増えるため重くなります
しかし,簡易的な場合と比較してある程度厳密に判定をすることが可能となります
特に,ゲームでは地面のステージモデルとキャラとの当たり判定とかには使えるのではないでしょうか
モデルで判定を行う場合には,MV1SetupCollInfo関数でモデルのコリジョン情報を構築する必要があります
しかし,簡易的な場合と比較してある程度厳密に判定をすることが可能となります
特に,ゲームでは地面のステージモデルとキャラとの当たり判定とかには使えるのではないでしょうか
モデルで判定を行う場合には,MV1SetupCollInfo関数でモデルのコリジョン情報を構築する必要があります
int MV1SetupCollInfo( int MHandle, int FrameIndex, int XDivNum, int YDivNum, int ZDivNum ) ;//コリジョン情報を構築する
- モデルと線分
- モデルと球
- モデルとカプセル型
参考(DxLibの3Dアクションサンプル):
http://homepage2.nifty.com/natupaji/DxLib/program/dxprogram_3DAction.html
http://homepage2.nifty.com/natupaji/DxLib/program/dxprogram_3DAction.html
フレーム操作
アクセサリの装備
3Dのゲームとなるとキャラに武器を持たせモーションに合わせて振り回すといったことをするかと思います。
DxLibでやる場合はMV1GetFrameLocalWorldMatrix関数を使います。
DxLibでやる場合はMV1GetFrameLocalWorldMatrix関数を使います。
MV1GetFrameLocalWorldMatrix( int MHandle, int FrameIndex ) ;
指定のフレームのローカル座標からワールド座標に変換する行列を得る。
キャラクターモデルのアクセサリを付けたいフレーム( ボーン )の座標変換情報である行列をMV1GetFrameLocalWorldMatrix で取得して、それを MV1SetMatrix でアクセサリモデルの座標変換情報として設定することで、アクセサリモデルの原点がキャラクターモデルのアクセサリを付けたいフレームの座標になり、その状態で描画するとそのフレームにくっついているように見えるというものです
- ソース
+ | ... |