2011-03-10 8 views
1

안녕하세요, FPS = 스타일 카메라를 구현하려고합니다. 마우스 움직임은 작동하지만 마우스를 건드리지도 않습니다. 카메라는 마우스 없이도 모든 각도로 진행됩니다. 기본적으로, 요와 피치는 마우스 자체의 움직임없이 마우스에서 잘못된 값을 얻고 있습니다. 여기 가Direct3D에서 FPS 카메라 구현으로 WM_MOUSEMOVE가 작동하지 않습니다.

case WM_MOUSEMOVE: 
     gCamera->Yaw() = (float)LOWORD(lparam); 
     gCamera->Pitch() = (float)HIWORD(lparam); 
     break; 

요 피치 방법은 기본적으로 데이터 멤버 mPitch 및 mYaw에 대한 참조를 반환은 Win32 루프를위한 코드이며,이를 통해, 내가 베이시스 벡터의 회전 (오른쪽, 위쪽 및 보이는 벡터)

그냥 WM_MOUSEMOVE (디버깅을 통해 검사) 입력지고있다.하지만 심지어 마우스를 이동하지 않기 때문에 카메라가 모든 방향으로 회전하기 때문에 매우 높고 매우 잘못된 값을 얻고있다. 그냥 로켓 연료를 먹은 것 같아.

P.S : Yaw와 Pitch를 사용하여 행렬을 만들었 기 때문에 값을 타입 변환해야했기 때문에 저는 수레를 사용해야합니다.

도움을 감사합니다, 여러분

+0

그 위의 한 줄을 보면 아마도 * 중단 *을 잊어 버렸을 것입니다. –

+0

답이 도움이된다면 upvote 또는 선택한 대답으로 표시하십시오. 감사! – DuckMaestro

답변

0

마음에 당신의 단위를 유지합니다. WM_MOUSEMOVE lparam x & y 값은 논리적 (화면 픽셀) 좌표이지만 게임의 대부분의 회전 값은도 또는 라디안으로 표시됩니다. 예를 들어, 마우스가 < 400, 300>이지만 카메라 클래스가 라디안을 예상하면 변환 수학에서 다른 (잠재적으로 변하는) 숫자에 대해 많은 수의 회전을 곱해 잠재적으로 미친 움직임을 유발할 수 있습니다 마우스를 움직이지는 않겠지 만. 이 경우의 솔루션은 선택한 축척 비율을 사용하여 논리 단위를 라디안 또는 도로 변환하는 것입니다. 추가 의견에 대응

: 당신이 360도 회전에 해당할까요 (마우스로) 운동의 얼마나 많은 논리 단위 : 그것에 대해 생각하는 한 가지 방법은 자신에게 질문을하는 것입니다? 당신이 360 개도에 해당하는 윈도우의 전체 폭을 가로 질러 마우스 이동을 원하는 결정하는 경우 예를 들어

, 다음, 다음 수학 관계는

screenW * scaleFactor = 2 * PI

다음 scaleFactor와 대한 해결 미래 마우스에 적용하다 사용하여 값 :

mouseX * scaleFactor = orientationInRadians

이 명심,이 방법은 fo를 (절대 카메라 방향에 대한 절대 마우스 위치를 연결할 것 r 적어도 하나의 DOF), 마우스 위치가 아닌 마우스 위치의 변경을 추적 할 수 있습니다. 기존 오리엔테이션에 적용 할 오리엔테이션 (라디안)의 변화를 계산할 수 있습니다. 같은 공식을 사용하여 델타 (변경 량)를 논리적 코디에서 라디안으로 변환 할 수 있습니다.

+0

나는 휴식을 잊지 않았다. 마에스트로의 방식은 논리적입니다. 따라서이 상황에서 라디안 (매트릭스의 경우)으로 변환하는 데 좋은 스케일 계수는 0.2입니까? – DBoxer

+0

Pitch와 Yaw를 0.0001f에 배율로 곱한 것뿐입니다. WM_MOUSEMOVE는 화면의 왼쪽 위 모서리에서 원점을 취한다는 것을 알게되었습니다. 그렇다면 어떻게하면 FPS 카메라를 만들 수 있을까요 ?? FPS 카메라의 경우 원점이 가장자리가 아닌 화면 중앙에 있어야합니다. – DBoxer

+0

답변이 업데이트되었습니다. – DuckMaestro

관련 문제