Как я могу преобразовать мировые координаты в экранные координаты, используя C ++ и DirectX11? - PullRequest
0 голосов
/ 18 декабря 2018

Я работаю над столкновениями для простой двухмерной игры, и я пытаюсь убедиться, что спрайты не могут покинуть края экрана, и я понимаю, как это делается, но я не могу получить правильные координатыдля выполнения расчетов.

enter image description here

На изображении черный прямоугольник - мой спрайт, чья позиция в мире находится вокруг (2,2, 0,0, 0,0), однакоширина экрана около 1200.Я знаю, что мне придется иметь дело с какими-то матричными вычислениями, но я не уверен, какую матрицу мне нужно использовать.

Я попробовал следующее из другого поста на SO, но это не таккажется, дает мне правильные результаты

Как я могу преобразовать мою мировую координату (2.2, 0.0, 0.0) в координаты пространства экрана в пикселях, чтобы я мог сравнить ее с шириной экрана?Если кто-нибудь и направит меня в правильном направлении, это будет высоко оценено.

Редактировать

Эта реализация немного неверна.

В настоящее время я проверяюесли центральное положение прямоугольника находится за пределами экрана.

Учитывая следующее изображение, где мировое положение (-2,2, 0,0, 0,0), когда это проецируется в координаты пространства экрана, я получаюзначение X -76, когда оно четко отображается на экране, поэтому оно должно быть выше 0. Кажется, что есть небольшое смещение, чем больше я перемещаю прямоугольник, тем не менее, в центре экрана значение X является правильнымна ~ 630, что составляет половину ширины экрана.

Вот код, который я использую, чтобы получить координаты пространства экрана для центра прямоугольника.

float centerX = boundingBox.m_center.x;
XMVECTOR centerVector = XMVectorSet(centerX, 0.0f, 0.0f, 0.0f);
XMVECTOR centerProjection = XMVector3Project(centerVector, 0.0f, 0.0f, screenSize.Width, screenSize.Height, 0.0f, 1.0f, projection, view, worldMatrix);
float centerScreenSpace = XMVectorGetX(centerProjection);

У кого-нибудь естьидеи, почему это может быть?

enter image description here

Кажется, смещение 150-200 пикселей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...