最近DXライブラリで3Dに手を付け始めたのですがカメラの縦方向(X軸)の回転がいまいちうまくいきません
具体的に何がうまくいかないかと言うとカメラの回転の軸が(0.0.0)で固定されているので(0.10.0)を中心にして回転したいのですができません
よろしければ教えてくださいお願いします
色々実験してたのでコメントアウトが多くて申し訳ないのですがそれも何を試したのかの参考ということでお願いします
#define _USE_MATH_DEFINES
#include <math.h>
#include "DxLib.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
SetFullSceneAntiAliasingMode(12, 3);
SetGraphMode(640, 480, 16);
if (ChangeWindowMode(TRUE) != 0) {
return -1;
}
if (DxLib_Init() != 0) {
return -1;
}
if (SetDrawScreen(DX_SCREEN_BACK) != 0) {
return -1;
}
int ModelHandle[343];
double RotateX = 0; //単位は度 ラジアン = 度 * π / 180
double RotateY = 0;
double Radius = 30.0; //回転の半径 中心の物体との距離
ModelHandle[0] = MV1LoadModel("block3.x");
SetCameraNearFar(1.0f, 150.0f);
//SetupCamera_Perspective(30 * M_PI / 180);
//SetCameraPositionAndTarget_UpVecY(VGet(0.0f, 10.0f, 0.0f), VGet(0.0f, 10.0f, 0.0f));
while (!CheckHitKey(KEY_INPUT_ESCAPE)) {
ClearDrawScreen();
DrawBox(0, 0, 640, 480, 0xFFFFBB, TRUE);
if (CheckHitKey(KEY_INPUT_S)) {
RotateX -= 1;
if (RotateX < -75) {
RotateX = -75;
}
}
if (CheckHitKey(KEY_INPUT_W)) {
RotateX += 1;
if (RotateX > 70) {
RotateX = 70;
}
}
if (CheckHitKey(KEY_INPUT_A)) {
RotateY += 10;
}
if (CheckHitKey(KEY_INPUT_D)) {
RotateY -= 10;
}
MATRIX Center = MGetTranslate(VGet(0.0f, 10.0f, 0.0f));
MATRIX R = MGetTranslate(VGet(0.0f, 0.0f, -Radius));
//MATRIX RotX = MGetRotAxis(VGet(0.0f, 0.0f, 0.0f), RotateX * M_PI / 180);
MATRIX RotX = MGetRotX(RotateX * M_PI / 180);
MATRIX RotY = MGetRotY(RotateY * M_PI / 180);
MATRIX Mat1 = MMult(RotX, RotY);
MATRIX Mat2 = MMult(Center, R);
MATRIX Mat3 = MMult(Center, Mat1);
//VECTOR CamPos = VTransform(VTransform(VGet(10.0f, 0.0f, -Radius), RotX), RotY);
//VECTOR CamPos = VTransform(VTransform(VGet(0.0f, 15.0f, -Radius), RotX), RotY);
//VECTOR CamPos = VTransform(VTransform(VGet(0.0f, 0.0f, 0.0f), Mat2), Mat1);
//VECTOR CamPos = VTransform(VGet(0.0f, 10.0f, 0.0f), Mat1);
VECTOR CamPos = VTransform(VGet(0.0f, 0.0f, -Radius), Mat3);
SetCameraPositionAndTargetAndUpVec(CamPos, VGet(0.0f, 0.0f, 0.0f), VGet(0.0f, 1.0f, 0.0f));
MV1DrawModel(ModelHandle[0]);
ScreenFlip();
}
DxLib_End();
return 0;
}