3Dモデルの向きの変更は MV1SetRotationXYZ を使用して行います
// 90度角度を変える
MV1SetRotationXYZ( ModelHandle, VGet( 0.0f, DX_PI / 2.0f, 0.0f ) );
特定の位置に3Dモデルを向けさせる場合は atan2 を使用して
MV1SetRotationXYZ に設定するための値を取得します
二つの3Dモデルを表示して、片方のモデルがもう片方のモデルの方に向くプログラムを
組んでみましたので、よろしければご覧ください
#include "DxLib.h"
#include <math.h>
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle1 ;
int ModelHandle2 ;
VECTOR Position1 ;
VECTOR Position2 ;
VECTOR SubVector ;
float Angle ;
// ウインドウモードで起動
ChangeWindowMode( TRUE );
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1;
// クリアカラーをグレーに変更
SetBackgroundColor( 64, 64, 64 ) ;
// 3Dモデルの読み込み
ModelHandle1 = MV1LoadModel( "DxChara.x" ) ;
ModelHandle2 = MV1DuplicateModel( ModelHandle1 ) ;
// 描画先を裏画面に変更
SetDrawScreen( DX_SCREEN_BACK ) ;
// カメラの設定
SetCameraPositionAndTarget_UpVecY( VGet( -20.0f, 2400.0f, -1700.0f ), VGet( -0.000f, 380.0f, -10.0f ) );
SetCameraNearFar( 17.0f, 10000.0f );
// 3Dモデルの座標を初期化
Position1 = VGet( 0.0f, 0.0f, 0.0f ) ;
Position2 = VGet( 1000.0f, 0.0f, 0.0f ) ;
// メインループ
while( ProcessMessage() == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// キー入力で座標を移動
if( CheckHitKey( KEY_INPUT_LEFT ) ) Position2.x -= 40.0f ;
if( CheckHitKey( KEY_INPUT_RIGHT ) ) Position2.x += 40.0f ;
if( CheckHitKey( KEY_INPUT_UP ) ) Position2.z += 40.0f ;
if( CheckHitKey( KEY_INPUT_DOWN ) ) Position2.z -= 40.0f ;
// 3Dモデル2から3Dモデル1に向かうベクトルを算出
SubVector = VSub( Position1, Position2 ) ;
// atan2 を使用して角度を取得
Angle = atan2( SubVector.x, SubVector.z ) ;
// atan2 で取得した角度に3Dモデルを正面に向かせるための補正値( DX_PI_F )を
// 足した値を3Dモデルの Y軸回転値として設定
MV1SetRotationXYZ( ModelHandle2, VGet( 0.0f, Angle + DX_PI_F, 0.0f ) );
// 3Dモデル1を描画
MV1SetPosition( ModelHandle1, Position1 ) ;
MV1DrawModel( ModelHandle1 ) ;
// 3Dモデル2を描画
MV1SetPosition( ModelHandle2, Position2 ) ;
MV1DrawModel( ModelHandle2 ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End();
// ソフトの終了
return 0;
}