2017-02-19 17 views
0

화면에서 광선 방향을 얻기 위해 점을 변환하려고합니다. 클릭. 결국 이것은 일종의 교차로에 사용됩니다. 지금 내가 한 방향은 이상한 결과를 만들어내는 것처럼 보입니다. 왜 그런지 모르겠습니다.세계 좌표 (DX11, C++)에서 화면을 클릭하는 위치의 광선 방향을 얻는 방법

projectionMatrix = XMLoadFloat4x4(this->projectionMatrix); 
viewMatrix = XMLoadFloat4x4(this->viewMatrix); 

pointX = ((2.0f * (float)mouseX)/(float)screenWidth) - 1.0f; 
pointY = (((2.0f * (float)mouseY)/(float)screenHeight) - 1.0f) * -1.0f; 

pointX = pointX/XMVectorGetX(projectionMatrix.r[0]); 
pointY = pointY/XMVectorGetY(projectionMatrix.r[1]); 

inverseViewMatrix = XMMatrixInverse(nullptr, viewMatrix); 

direction = 
    XMVectorSet((pointX * XMVectorGetX(inverseViewMatrix.r[0])) + (pointY * XMVectorGetX(inverseViewMatrix.r[1])) + XMVectorGetX(inverseViewMatrix.r[2]), 
       (pointX * XMVectorGetY(inverseViewMatrix.r[0])) + (pointY * XMVectorGetY(inverseViewMatrix.r[1])) + XMVectorGetY(inverseViewMatrix.r[2]), 
       (pointX * XMVectorGetZ(inverseViewMatrix.r[0])) + (pointY * XMVectorGetZ(inverseViewMatrix.r[1])) + XMVectorGetZ(inverseViewMatrix.r[2]), 0.0f); 

이 어떤 각도로 괜찮 작동하는 것 같다, 그러나 특정 지점에 도달하면, 그것은 회전을 중지하고 "예기치 않은"결과를 생성합니다. 아마도이 문제는 내가 직면 할 수없는 방향 인 Z 값과 관련이 있습니까?

비디오 예제에서 카메라가 방향을 바라 보도록하고 있습니다 (전 세계 Y 축을 중심으로 만 회전). 방향은 마우스 움직임을 기반으로합니다. 보시다시피 한 영역에서 잘 작동하는 것처럼 보이지만 특정 지점에 도달하면 뒤로 이동하고 마우스를 따라 잡기 시작합니다.

https://i.gyazo.com/c0e1cd6bc5c36a7a488ba81928061104.mp4

사람이 원인을 알고 있나요?

편집 : 해결, 문제였다 나에게 0 ~ 180도 자유보다는 ATAN했다 ACOS를 사용하여 내 카메라 회전 0-360

답변

0

문제는 나에게 0 ~ 180도 자유를 준 ACOS를 사용하여 내 카메라 회전이었다 atan을 사용하는 대신