MV1SetRotationZYAxis という関数で常にカメラの方向に3Dモデルを向けることが出来ます
<MV1SetRotationZYAxis>
https://dxlib.xsrv.jp/function/dxfunc_3d_model_0.html#R3N8
3Dモデルとカメラがランダムに動き、3Dモデルが常にカメラの方向を向くプログラムを組んでみましたので
よろしければご覧ください m(_ _)m
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int ModelHandle ;
VECTOR CameraPos ;
VECTOR CameraPosAdd ;
VECTOR ModelPos ;
VECTOR ModelPosAdd ;
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// 背景色はグレー
SetBackgroundColor( 64, 64, 64 ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// 3Dモデルを読み込み
ModelHandle = MV1LoadModel( "DxChara.x" ) ;
// カメラの Near, Far を設定
SetCameraNearFar( 16.0f, 6000.0f );
// カメラの初期位置と移動方向を設定
CameraPos = VGet( 0.0f, 840.0f, -1380.0f ) ;
CameraPosAdd = VGet( 8.0f, 8.0f, 8.0f ) ;
// 3Dモデルの初期位置と移動方向を設定
ModelPos = VGet( 0.0f, 0.0f, 0.0f ) ;
ModelPosAdd = VGet( -6.0f, 6.0f, -6.0f ) ;
// メインループ
while( ProcessMessage() == 0 )
{
// 画面のクリア
ClearDrawScreen() ;
// カメラを移動
CameraPos = VAdd( CameraPos, CameraPosAdd ) ;
// カメラが一定範囲内を動くようにする処理
if( CameraPos.x < -2000 || CameraPos.x > 2000 )
{
CameraPosAdd.x = -CameraPosAdd.x ;
}
if( CameraPos.y < -1000 || CameraPos.y > 1000 )
{
CameraPosAdd.y = -CameraPosAdd.y ;
}
if( CameraPos.z < -3000 || CameraPos.z > 3000 )
{
CameraPosAdd.z = -CameraPosAdd.z ;
}
// 3Dモデルを移動
ModelPos = VAdd( ModelPos, ModelPosAdd ) ;
// 3Dモデルが一定範囲内を動くようにする処理
if( ModelPos.x < -2000 || ModelPos.x > 2000 )
{
ModelPosAdd.x = -ModelPosAdd.x ;
}
if( ModelPos.y < -1000 || ModelPos.y > 1000 )
{
ModelPosAdd.y = -ModelPosAdd.y ;
}
if( ModelPos.z < -3000 || ModelPos.z > 3000 )
{
ModelPosAdd.z = -ModelPosAdd.z ;
}
// カメラの位置をセット、向きは3Dモデルの方向
SetCameraPositionAndTarget_UpVecY( CameraPos, ModelPos ) ;
// 3Dモデルの位置をセット
MV1SetPosition( ModelHandle, ModelPos ) ;
// 3Dモデルの方向をセット( カメラの方向 )
MV1SetRotationZYAxis( ModelHandle, VSub( ModelPos, CameraPos ), VGet( 0.0f, 1.0f, 0.0f ), 0.0f ) ;
// 3Dモデルを描画
MV1DrawModel( ModelHandle ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
カメラも3Dモデルもお互いにお互いの方向を向いているので実行しても
3Dモデルが動いているのかいまいち分かりませんが、
MV1SetRotationZYAxis( ModelHandle, VSub( ModelPos, CameraPos ), VGet( 0.0f, 1.0f, 0.0f ), 0.0f ) ;
↑この行をコメントアウトすると3Dモデルがカメラの方向を向かなくなるので、
3Dモデルが動いていることが分かるようになります