저는 Direct3D를 시작하려고합니다. 하지만 나는 fov 카메라를 작동시키지 못합니다. 최소한 수직 운동이 아닙니다. 나는 이유를 알았지 만 나는 아직도 그것을 고칠 수 없다.Direct3D9 수직 fov 카메라가 작동하지 않습니다
내가 C를 사용하고 있습니다 ++ (140) 및 D3DX9
코드 :
D3DXMATRIX viewMat;
static D3DXMATRIX viewRotXMat;
static D3DXMATRIX viewRotYMat;
static D3DXMATRIX viewRotZMat;
static float rotY = 0.0f;
static float rotXZ = 0.0f;
if (GetAsyncKeyState(VK_LEFT)) { rotY += 0.1f; }
if (GetAsyncKeyState(VK_RIGHT)) { rotY -= 0.1f; }
if (GetAsyncKeyState(VK_UP)) { rotXZ += 0.1f; }
if (GetAsyncKeyState(VK_DOWN)) { rotXZ -= 0.1f; }
//POINT pMO = getMouseOffset();
//rotY += pMO.x/10;
//rotXZ += pMO.y/10;
D3DXMatrixLookAtLH(&viewMat,
&D3DXVECTOR3(10.0f, 10.0f, 0.0f), //pos
&D3DXVECTOR3(0.0f, 10.0f, 0.0f), //look-at
&D3DXVECTOR3(0.0f, 1.0f, 0.0f)); //weird values
D3DXMatrixRotationY(&viewRotYMat, rotY);
D3DXMatrixRotationX(&viewRotXMat, cos(rotY) * rotXZ);
D3DXMatrixRotationZ(&viewRotZMat, (sin(rotY) * rotXZ) * -1);
d3ddev->SetTransform(D3DTS_VIEW, &(viewMat * viewRotXMat * viewRotYMat * viewRotZMat));
D3DXMatrixPerspectiveFovLH(&projMat,
D3DXToRadian(90),
(FLOAT)SIZEX/(FLOAT)SIZEY,
1.0f,
1000.0f);
d3ddev->SetTransform(D3DTS_PROJECTION, &projMat);
이 내 RenderFrame 기능의 중요한 부분입니다. 작동하지 않는 이유는 rotY 및 rotXZ 때문입니다. 어떤 이유로 약 45 ° 회전 할 때 rotY 변수가 3-4로 바뀝니다. 그렇다면 왜 D3DXMatrixRotationY 함수는 매개 변수로 각도를 사용하지만 일부는 부동 상태입니까? 이 매개 변수는 심지어 angle이라는 이름입니다 ... 지금 약 3 일 동안이 문제가 있습니다. 네가 나를 도울 수 있기를 바랍니다. 회전 행렬에 대한
각도가 "rotY"라디안 또는도로되어 있습니까? 그것은'D3DXMatrixRotationY' (그리고 그 문제에 대해서는'cos' /'sin')에 라디안으로 전달되어야합니다. 또한'& (viewMat * viewRotXMat * viewRotYMat * viewRotZMat)'의 임시 값의 주소는 표준에 맞지 않지만 컴파일러가 지원할 수 있습니다. – user4407569
이것은 directx 튜토리얼에서 보여주는 방법입니다 .http : //www.directxtutorial.com/ –
rotY는 분명히 라디안 단위입니다. 하지만 sin cos의 경우 도수가 roty 인 새로운 float을 정의했습니다. 그러나 그것은 여전히 이전과 같은 실패를합니다. 그것은 arround 45 *, 135 * 등을 뒤집습니다. –