トップページ > 過去ログ > 記事閲覧
SetCameraViewMatrix(); 使用時のY方向
名前:風邪のクロノア 日時: 2011/12/08 03:51

いつもお世話になっております。 SetCameraViewMatrix();を利用して、カメラを制御しようとしたのですが、 Y方向をプラスに設定するとカメラの位置が下がってしまいます。 他のモデル描画時の座標や、SetCameraPositionAndAngle();を利用した際は Yをプラスにすると上に移動するのですが… SetCameraViewMatrix();では逆にしている理由が 何かあるのでしょうか? お手数をおかけいたしますが、ご教授いただけたら幸いです。 以下にテストコードをアップしました。 リファレンス SetCameraViewMatrix();関数のサンプルコードに 少し(3行)だけ加筆したものになります。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle ; float Rotate ; MATRIX Matrix ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // モデルの読み込み ModelHandle = MV1LoadModel( "SimpleModel.mqo" ) ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // カメラの回転値を初期化 Rotate = 0.0f ; // ESCキーが押されるかウインドウが閉じられるまでループ while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { // 画面をクリア ClearDrawScreen() ; // 左右キーでカメラの回転値を変更 if( CheckHitKey( KEY_INPUT_LEFT ) == 1 ) { Rotate -= PHI_F / 60.0f ; } if( CheckHitKey( KEY_INPUT_RIGHT ) == 1 ) { Rotate += PHI_F / 60.0f ; } // 回転値を使用してY軸の回転行列を作成 Matrix = MGetRotY( Rotate ) ; //追加コード if(CheckHitKey(KEY_INPUT_LSHIFT)){ Matrix = MMult(Matrix, MGetTranslate(VGet(0,100, 0))); } // 回転行列をビュー行列としてセット SetCameraViewMatrix( Matrix ) ; // モデルをカメラを囲むように4個描画 MV1SetPosition( ModelHandle, VGet( 0.0f, 0.0f, 800.0f ) ) ; MV1DrawModel( ModelHandle ) ; MV1SetPosition( ModelHandle, VGet( 0.0f, 0.0f, -800.0f ) ) ; MV1DrawModel( ModelHandle ) ; MV1SetPosition( ModelHandle, VGet( 800.0f, 0.0f, 0.0f ) ) ; MV1DrawModel( ModelHandle ) ; MV1SetPosition( ModelHandle, VGet( -800.0f, 0.0f, 0.0f ) ) ; MV1DrawModel( ModelHandle ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; }

Page: 1 |

Re: SetCameraViewMatrix(); 使用時のY方向 ( No.1 )
名前:yasi 日時:2011/12/10 21:24

SetCameraPositionAndAngleはワールド座標(行列)を基準にセットする関数ですが、 SetCameraViewMatrixはビュー座標(行列)を基準にセットする関数だからです。 ワールド座標は3Dの空間の中に0点を置き、それを中心に座標を表します。 勿論カメラ位置を表すワールド座標という概念も存在しています。 一方でビュー座標ではカメラを中心とした世界の座標を表してします。 今回、風邪のクロノアさんが提示していただいたサンプルプログラムでは、 「カメラ」が下がっているのではなく、「カメラから見た世界」が上がっている という解釈が正しいかもしれません。 何故幾つもの座標が存在するのか?等、疑問もあるかもしれませんが、 その辺りは「ワールド ビュー 変換」等で検索していただくと、 詳しく書いてあるサイトが見つかると思います。

Page: 1 |