У меня есть следующий класс камеры:
public Vector2 Position { get; set; } = Vector2.Zero;
public float Rotation { get; set; } = 0.0f;
public float Zoom
{
get
{
// Negative zoom will flip the image
if (_zoom < 0.1f)
{
_zoom = 0.1f;
}
return _zoom;
}
set
{
_zoom = value;
// Negative zoom will flip the image
if (_zoom < 0.1f)
{
_zoom = 0.1f;
}
}
}
public Matrix Transform(Viewport viewport)
{
int viewportWidth = viewport.Width;
int viewportHeight = viewport.Height;
return
Matrix.CreateTranslation(new Vector3(-Position.X - viewportWidth / 2, -Position.Y - viewportHeight / 2, 0)) * // Translation Matrix
Matrix.CreateRotationZ(Rotation) * // Rotation Matrix
Matrix.CreateScale(new Vector3(Zoom, Zoom, 1)) * // Scale Matrix
Matrix.CreateTranslation(new Vector3(viewportWidth / 2, viewportHeight / 2, 0)); // Origin/Offset Matrix
}
public void Move(Vector2 amount)
{
Position += amount;
}
И Update()
метод, который проверяет пользовательский ввод с клавиатуры и мыши на определенные вещи, например, двигать, вращать, масштабировать.
Проблема
Как видно из моей матрицы преобразования, при увеличении / уменьшении (увеличение или уменьшение _zoom
) я приближаюсь к фиксированной исходной точке - центру моего экрана.
Как я могу сделать это так, когда он приближается к курсору мыши?
Я прочитал несколько ответов на похожие вопросы, но не смог реализовать это для своей камеры. Любая помощь приветствуется.