Я пытаюсь преобразовать точку, на которую я нажимаю на экран, чтобы получить направление лучей, где я щелчок. В конце концов это будет использоваться для какого-либо пересечения. Направление, которое у меня сейчас, похоже, вызывает странные результаты, и я не знаю, почему.Как получить направление лучей, где я нажимаю на экран в мировых координатах (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