いつもお世話になっております。
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 ;
}