void rotate()関数の定義にある////コメント部は一体何をするためのコードなのでしょうか? カメラ座標 - 中心座標とは
参考サイト:https://dixq.net/g/3d_02.html
http://www.geisya.or.jp/~mwm48961/kou2/linear_image3.html
http://usakororin.livedoor.biz/archives/51213311.html
#include "DxLib.h" #include <iostream> using namespace std; #include "Input.hpp" #include "Frame.hpp" static const float ROTATE_SPEED = DX_PI_F / 90;//回転スピード /* (x,y)の点を(mx,my)を中心にang角回転する */ void rotate(float *x, float *y, const float ang,const float mx, const float my) { const float ox = *x - mx, oy = *y - my;////// *x = ox * cos(ang) + oy * sin(ang); *y = -ox * sin(ang) + oy * cos(ang); *x += mx; *y += my; } int WINAPI WinMain(HINSTANCE hINSTANSE, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ChangeWindowMode(true); constexpr unsigned int ss = 80;//画面の大きさ //画面サイズ1280,720 SetGraphMode(16 * ss, 9 * ss, 32); DxLib_Init(); SetDrawScreen(DX_SCREEN_BACK); float cameraX = 0, cameraZ = -20; const float targetX = 0, targetZ = 0; int Modelhandle = MV1LoadModel("assets/resource/Lat式ミクVer2.31/Lat式ミクVer2.31_Normal.pmd"); SetCameraNearFar(0.1f, 1000.0f); while (ScreenFlip() == 0 && ProcessMessage() == 0 && Input::UpdateKey() == 0 && ClearDrawScreen() == 0 && Fps::Update()) { if (Input::keyboard(KEY_INPUT_ESCAPE) > 0){ break; } if(Input::keyboard(KEY_INPUT_LEFT) > 0) { rotate(&cameraX,&cameraZ,+ROTATE_SPEED,targetX,targetZ); }else if(Input::keyboard(KEY_INPUT_RIGHT) > 0) { rotate(&cameraX, &cameraZ, -ROTATE_SPEED, targetX, targetZ); } SetCameraPositionAndTarget_UpVecY(VGet(cameraX, 10, cameraZ), VGet(targetX, 10.0f, targetZ)); MV1DrawModel(Modelhandle); //game->Update(); //game->Draw_Update(); Fps::Wait(); } DxLib_End(); return 0; }
あなたの質問のうち結構な割合がプログラミングというより数学または物理(力学)関係なので一度勉強してみるといいと思います。
数式にプログラムではこうだからこうするということを質問しているのですがやめたほうがいいのでしょうか?
回答2件
あなたの回答
tips
プレビュー