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