トップページ > 記事閲覧
モデルを常にカメラ位置の方向へ向かせる
名前:Mrs.ポポ 日時: 2020/07/14 15:43

いつも便利に使わさせていただいております。 キャラクターとなる3Dモデルの周りをカメラがランダムに移動するのですが、その際に常にキャラクターの正面がカメラの位置となるように回転させたいです。 水平方向、垂直方向ともにです。 カメラがどの位置に移動しても、キャラクターの正面以外は見えなくしたいのです。 ご教授のほどよろしくお願いいたします。
メンテ

Page: 1 |

Re: モデルを常にカメラ位置の方向へ向かせる ( No.1 )
名前:管理人 日時:2020/07/15 01:19

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モデルが動いていることが分かるようになります
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存