ホームへ戻る

 3d.04 モデルを回転させてみよう

 3d.01章のモデルを回転させられるようにしてみましょう。

実行結果


Xを押しながら左右キーを押すとX軸回転
Yを押しながら左右キーを押すとY軸回転

という操作を受け付けます。
モデルの回転をするには
MV1SetRotationXYZ( ModelHandle, VGet( x, y, z) ) ;
を利用します。
今回新しく使っている関数はこれだけです。
以下のサンプルを見てみましょう。


/***** main.cpp *****/

#include <math.h>
#include <DxLib.h>

static const float ROTATE_SPEED = DX_PI_F/90;//回転スピード

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
    ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK );

    float angleX = 0.f, angleY = 0.f;

    //3Dモデルの読み込み
    int ModelHandle = MV1LoadModel( "dat/Lat式ミク/Lat式ミクVer2.3_Normal.pmd" ) ;

    //奥行0.1~1000までをカメラの描画範囲とする
    SetCameraNearFar( 0.1f, 1000.0f ) ;
    
    //(0,10,-20)の視点から(0,10,0)のターゲットを見る角度にカメラを設置
    SetCameraPositionAndTarget_UpVecY( VGet( 0, 10, -20 ), VGet( 0.0f, 10.0f, 0.0f ) ) ;

    while(!ScreenFlip()&&!ProcessMessage()&&!ClearDrawScreen()){

        if( CheckHitKey(KEY_INPUT_X) > 0){//Xキーが押されていたら
            if( CheckHitKey(KEY_INPUT_LEFT) > 0 ){//左キーが押されていたら
                angleX -= ROTATE_SPEED;
            }
            if( CheckHitKey(KEY_INPUT_RIGHT) > 0 ){//右キーが押されていたら
                angleX += ROTATE_SPEED;
            }
        }
        if( CheckHitKey(KEY_INPUT_Y) > 0){//Yキーが押されていたら
            if( CheckHitKey(KEY_INPUT_LEFT) > 0 ){//左キーが押されていたら
                angleY -= ROTATE_SPEED;
            }
            if( CheckHitKey(KEY_INPUT_RIGHT) > 0 ){//右キーが押されていたら
                angleY += ROTATE_SPEED;
            }
        }

        //第二引数の回転角度をセット
        MV1SetRotationXYZ( ModelHandle, VGet( angleX, angleY, 0.0f ) ) ;

        // 3Dモデルの描画
        MV1DrawModel( ModelHandle ) ;

    }

    DxLib_End();
    return 0;
}    


実際に操作してみてください。
実行結果のように動けば成功です。

→分からないことがあれば掲示板で質問して下さい


- Remical Soft -