Я создал 2D-камеру (код ниже) для игры сверху вниз. Все работает нормально, когда позиция игроков близка к 0,0x и 0,0y.
К сожалению, по мере увеличения расстояния у преобразования возникают проблемы, примерно при 0,0x 30e7y (да, это 30 миллионов лет) камера начинает дрожать, когда игрок движется (камера обновляется с положением игрока в конце каждого обновления). большие расстояния, миллиард + камера даже не отслеживает игрока, так как я предполагаю, что любая ошибка в матрице слишком сильно усиливается.
Мой вопрос: есть ли проблема в матрице или это стандартное поведение для экстремальных чисел.
Метод преобразования камеры:
public Matrix getTransform()
{
Matrix transform;
transform = (Matrix.CreateTranslation(new Vector3(-position.X, -position.Y, 0)) *
Matrix.CreateRotationZ(rotation) * Matrix.CreateScale(new Vector3(zoom, zoom, 1.0f)) *
Matrix.CreateTranslation(new Vector3((viewport.Width / 2.0f), (viewport.Height / 2.0f), 0)));
return transform;
}
Метод обновления камеры:
Он запрашивает положение объекта с учетом его идентификатора, он возвращает базовый Vector2, который затем устанавливается в качестве положения камеры.
if (camera.CameraMode == Camera2D.Mode.Track && cameraTrackObject != Guid.Empty)
{
camera.setFocus(quadTree.getObjectPosition(cameraTrackObject));
}
Если кто-то увидит ошибку или расскажет мне, почему матрица борется, я был бы очень благодарен.