トップページ > 過去ログ > 記事閲覧
モーションに沿ってカメラを動かしたい
名前:うはwwおkww 日時: 2012/09/02 12:55

FPSでモーションによる顔の向きの変化に合わせてカメラも向きを変えたりさせたいのですが、どのようにしたらいいのでしょうか? 位置の変化は顔を動かすためのボーンの座標を取得すれば出来るのは分かりますが、顔が下を向いているときにカメラも下を向いたりするにはどうしたらいいかが全く分かりません

Page: 1 |

Re: モーションに沿ってカメラを動かしたい ( No.1 )
名前:いっち 日時:2012/09/02 15:29

MV1GetFrameLocalWorldMatrix 辺りを使用すると出来るのではないでしょうか? 以下のスレッドのレス(No.3)にある管理人さんのソースが参考になると思います。 > h t t p://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=2674 いちおう、私なりに試してみました。 //-- 以下、テストコード ("DxChara.x"を使用)--// #include "DxLib.h" int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int ) { ChangeWindowMode( TRUE ); SetWindowText( "DxLib:" DXLIB_VERSION_STR ); if ( DxLib_Init( ) == -1 ) return -1; int white = GetColor( 255, 255, 255 ); int mh = MV1LoadModel( "DxChara.x" ); SetDrawScreen( DX_SCREEN_BACK ); SetCameraPositionAndTarget_UpVecY( VGet( -800.0f, 0.0f, 0.0f ), VGet( 0.0f, 0.0f, 0.0f ) ); MV1SetPosition( mh, VGet( 0.0f, -300.0f, 0.0f ) ); int ai = MV1AttachAnim( mh, 0, -1, FALSE ); float att = MV1GetAttachAnimTotalTime( mh, ai ); float at = 0.0f; while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { ClearDrawScreen( ); at += att / (60.0f * 2); if ( at >= att ) at = 0.0f; MV1SetAttachAnimTime( mh, ai, at ); { // 分かりづらいのでモデルのZ方向への移動をキャンセル MATRIX mat; MV1ResetFrameUserLocalMatrix( mh, 2 ); mat = MV1GetFrameLocalMatrix( mh, 2 ); mat.m[3][2] = 0.0f; MV1SetFrameUserLocalMatrix( mh, 2, mat ); } MV1DrawModel( mh ); MATRIX mat = MV1GetFrameLocalWorldMatrix( mh, 26 ); // 右手指先 float fx, fy, fz; GetMatrixXYZRotation( &mat, &fx, &fy, &fz ); DrawLine3D( VGet(0.0f, 0.0f, 0.0f), VTransform( VGet( 0.0f, -100.0f, 0.0f ), MGetRotX( fx )), white ); DrawFormatString( 0, 0, white, "TEST %f %f %f", fx, fy, fz ); ScreenFlip( ); } DxLib_End( ); return 0; }
Re: モーションに沿ってカメラを動かしたい ( No.2 )
名前:うはwwおkww 日時:2012/09/03 13:31

ここでいうボーンのZ軸方向というのはモデルにとってのローカル座標でのZ軸ではなく、ボーンにとってのローカル座標ということなんですね 本当にありがとうございました
Re: モーションに沿ってカメラを動かしたい ( No.3 )
名前:うはwwおkww(解決) 日時:2012/09/03 14:15

解決を忘れてました
Re: モーションに沿ってカメラを動かしたい ( No.4 )
名前:いっち(解決) 日時:2012/09/03 20:15

(No.1)のコードは MV1GetFrameLocalWorldMatrix のテストのつもりで雑にやっていますが、 リンク先の管理人さんのようにようにやらないと問題が出るかもしれません。

Page: 1 |