トップページ > 過去ログ > 記事閲覧
マウスでの視点操作
名前:名無し 日時: 2011/02/02 18:48

はじめまして、名無しと申します。宜しくお願いします。 3D空間でマウスでの視点操作をしたいと思っています。 可能でしょうか、可能でしたらどのようにしたら良いのでしょうか。 何方か教えて下さい。宜しくお願い致します。

Page: 1 |

Re: マウスでの視点操作 ( No.1 )
名前:いっち 日時:2011/02/03 22:25

毎フレーム GetMousePoint でマウスを監視すればマウスの移動量が求められるので、 それに合わせてカメラを動かせば良いと思います。 サンプルの3Dアクション(://homepage2.nifty.com/natupaji/DxLib/program/dxprogram_3DAction.html)基本で言うと、 Camera_Process の前半部分をマウスの移動量でカメラの角度を変えるようにすればそれっぽくなるのではないでしょうか。 > はじめまして、名無しと申します。宜しくお願いします。 たくさんいらっしゃるので「名無し」というハンドルはやめたほうがいいと思います。
Re: マウスでの視点操作 ( No.2 )
名前:名無し 日時:2011/02/06 09:55

作ってみたらこうなったんですけど どうすればいいすかね^^; #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int Model1,mausux , mausuy ; ChangeWindowMode( TRUE ) ; if( DxLib_Init() == -1 ) { return -1; } Model1 = MV1LoadModel( "DxChara.x" ) ; SetDrawScreen( DX_SCREEN_BACK ) ; while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { MV1SetPosition( Model1, VGet( 500.0f, 0.0f, 0.0f ) ) ; //マウスカーソルの位置を取得 GetMousePoint( &mausux, &mausuy ); // カメラの位置と注視点をセット、注視点は原点 SetCameraPositionAndTarget_UpVecY( VGet( 0.0f, 0.0f, 0.0f ), VGet( mausux,mausuy, 0.0f ) ) ; MV1DrawModel( Model1 ) ; ScreenFlip() ; ClearDrawScreen() ; } DxLib_End() ; return 0 ; } >たくさんいらっしゃるので「名無し」というハンドルはやめたほうがいいと思います。 次回から他の名前にします。
Re: マウスでの視点操作 ( No.3 )
名前:いっち 日時:2011/02/07 18:12

やってみました。 ※ソースを少し修正しました。動作は変わっていないと思います。 //- 以下、サンプル (SimpleModel.mqoを使用) -// #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode( TRUE ); if( DxLib_Init() < 0 ) return -1 ; int ModelHandle = MV1LoadModel( "SimpleModel.mqo" ); float CamV = 0.0f, CamH = 0.0f, CamR = 800.0f; const float MinV = -PHI_F / 180.0f * 72.5f, MaxV = PHI_F / 180.0f * 72.5f; const float MinH = 0.0f, MaxH = PHI_F * 2.0f; const float MinR = 200.0f, MaxR = 2000.0f; const float AngleRate = PHI_F / 180.0f, ZoomRate = 10.0f; MATRIX RotV, RotH; VECTOR CamPos = VGet( 0.0f, 0.0f, -CamR ), FocusPos = VGet( 0.0f, 0.0f, 0.0f ); int NewX = 0, NewY = 0, NewBtn = 0, OldX = 0, OldY = 0, OldBtn = 0; int MoveX = 0, MoveY = 0, MoveZ = 0; SetDrawScreen( DX_SCREEN_BACK ); while ( ProcessMessage( ) == 0 && !CheckHitKey( KEY_INPUT_ESCAPE ) ) { ClearDrawScreen( ); // スペースキーで初期化 if ( CheckHitKey( KEY_INPUT_SPACE ) ) { CamV = 0.0f; CamH = 0.0f; CamR = 800.0f; } // マウス入力の取得 MoveX = MoveY = 0; MoveZ = -GetMouseWheelRotVol( ); if ( (NewBtn = GetMouseInput( )) & MOUSE_INPUT_LEFT ) { GetMousePoint( &NewX, &NewY ); if ( OldBtn & MOUSE_INPUT_LEFT ) { MoveX = NewX - OldX; MoveY = NewY - OldY; } OldX = NewX; OldY = NewY; } OldBtn = NewBtn; // マウスの情報からカメラの情報に変換 CamV += MoveY * AngleRate; CamH += MoveX * AngleRate; CamR += MoveZ * ZoomRate; // 補正 if ( CamV > MaxV ) CamV = MaxV; if ( CamV < MinV ) CamV = MinV; if ( CamH > MaxH ) CamH -= MaxH; if ( CamH < MinH ) CamH += MaxH; if ( CamR > MaxR ) CamR = MaxR; if ( CamR < MinR ) CamR = MinR; // カメラの設定 RotV = MGetRotX( CamV ); RotH = MGetRotY( CamH ); CamPos = VTransform( VTransform( VGet( 0.0f, 0.0f, -CamR ), RotV ), RotH ); SetCameraPositionAndTarget_UpVecY( CamPos, FocusPos ); DrawLine3D( VGet( 0.0f, 0.0f, 0.0f ), VGet( 1000.0f, 0.0f, 0.0f ), GetColor( 255, 0, 0 ) ); DrawLine3D( VGet( 0.0f, 0.0f, 0.0f ), VGet( 0.0f, 1000.0f, 0.0f ), GetColor( 0, 255, 0 ) ); DrawLine3D( VGet( 0.0f, 0.0f, 0.0f ), VGet( 0.0f, 0.0f, 1000.0f ), GetColor( 0, 0, 255 ) ); MV1DrawModel( ModelHandle ); ScreenFlip( ); } DxLib_End( ); return 0; }
Re: マウスでの視点操作 ( No.4 )
名前:名無し(解決) 日時:2011/02/06 22:37

丁寧に解説していただき有難う御座います。 初心者ですいません、以後ご質問させていただくようなことがありましたらどうぞ宜しくお願い致します。有難う御座いました

Page: 1 |