ちょいDXライブラリで3Dモデルを表示させてカメラを動かすだけのテストをしてたのですが、
3D処理初めてなのにクラスまで入ったらどっちに問題があるかわからなくなるのでクラスは使わずに組んでました
やりたいことがだいたいできたのでクラスにしてみようと思ったのですがどれをどうすれば…
とりあえずソースだけ貼ると
#include "DxLib.h"
#include
float offsetX(float,float);
float offsetY(float,float);
// WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
ChangeWindowMode(TRUE), SetDrawScreen( DX_SCREEN_BACK );
//モデルの読み込み
int PlayerModel = MV1LoadModel( "dat/Kirito/Kirigaya Kazuto (Shiruhane).pmd" );
VECTOR CameraPos;
float defY = 10.0;
float angleXZ = 90.0;
float radius =-30.0;
float hightY = 0.0;
int Color ;
Color = GetColor( 255 , 255 , 255 ) ;
//奥行0.1~1000までをカメラの描画範囲とする
SetCameraNearFar( 0.1f, 1000.0f ) ;
// ESCキーが押されるかウインドウが閉じられるまでループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// 画面をクリア
ClearDrawScreen() ;
// 方向キーでカメラの座標を移動
if( CheckHitKey( KEY_INPUT_UP ) == 1 )
{
hightY += 3.0 ;
}
if( CheckHitKey( KEY_INPUT_DOWN ) == 1 )
{
hightY -= 3.0 ;
}
if( CheckHitKey( KEY_INPUT_LEFT ) == 1 )
{
angleXZ -= 0.2 ;
}
if( CheckHitKey( KEY_INPUT_RIGHT ) == 1 )
{
angleXZ += 0.2 ;
}
//カメラ上下に上限(上下だけに)
if(hightY > 30.0){ hightY = 30.0; }
if(hightY < -30.0){ hightY = -30.0; }
// カメラの座標を初期化
CameraPos.x = offsetX(angleXZ,radius) ;
CameraPos.y = hightY + defY ;
CameraPos.z = offsetY(angleXZ,radius) ;
// カメラの位置と注視点をセット、注視点は原点
SetCameraPositionAndTarget_UpVecY( CameraPos, VGet( 0.0f, 0.0f + defY, 0.0f ) ) ;
//モデル描画
MV1DrawModel( PlayerModel );
DrawFormatString(0,0,Color,"hightY = %f",hightY);
//表にバン
ScreenFlip();
WaitTimer(30);
}
// DXライブラリ使用の終了処理
DxLib_End() ;
// ソフトの終了
return 0 ;
}
float offsetX (float angle, float radius ){
return radius * cos(angle);
}
float offsetY (float angle, float radius ){
return radius * sin(angle);
}
てかひどいんだと思うんですがこれをどうすればいいやら…
とりあえずカメラ移動系をクラスでまとめようかとか思ってたのですが
まずクラスの使い方が合ってるのかすら不安になってきた始末…
ちょっと休みます