2017-02-19 34 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

Кто-нибудь знает, что является причиной этого?

Edit: Решено, вопрос был мой поворот камеры с помощью АСОсов, которые дали мне свободу 0-180 ° градусов, а не Atan 0-360

ответ

0

Вопрос был мой поворотом камеры с помощью АСОсов, которые дали мне свободу 0-180 ° градусов вместо использования atan