Итак, я знаю, что есть несколько вопросов / ответов относительно создания 2D-камеры для XNA, однако люди, похоже, просто рады опубликовать свой код без объяснения причин.Я ищу больше объяснений того, что я делаю неправильно.
Прежде всего, я понимаю весь Мир -> Вид -> Проекция -> Преобразование экрана.
Моя цельдолжен иметь объект камеры, который центрирован в центре области просмотра, и что, когда положение камеры перемещается вверх, оно соотносится с движением вверх в области просмотра, а когда оно перемещается вправо, оно коррелирует с движением вправо в области просмотра.
Мне трудно реализовать эту функцию, потому что значение Y в окне просмотра инвертировано.
//In Camera Class
private void UpdateViewTransform()
{
//My thinking here was that I would create a projection matrix to center the camera and then flip the Y axis appropriately
Matrix proj = Matrix.CreateTranslation(new Vector3(_viewport.Width * 0.5f, _viewport.Height * 0.5f, 0)) *
Matrix.CreateScale(new Vector3(1f, -1f, 1f));
//Here is the camera Matrix. I have to give the Inverse of this matrix to the Spritebatch I believe since I want to go from World Coordinates to Camera Coordinates
_viewMatrix = Matrix.CreateRotationZ(_rotation) *
Matrix.CreateScale(new Vector3(_zoom, _zoom, 1.0f)) *
Matrix.CreateTranslation(_position.X, _position.Y, 0.0f);
_viewMatrix = proj * _viewMatrix;
}
Может кто-нибудь помочь мне понять, как я могу построить свое преобразование представления для передачи в SpriteBatch так, чтобы я достигчто я ищу.
РЕДАКТИРОВАТЬ
Это как преобразование, кажется, работает, однако я не уверен, почему.Может, кто-нибудь объяснит мне это в понимании:
Matrix proj = Matrix.CreateTranslation(new Vector3(_viewport.Width * 0.5f, _viewport.Height * 0.5f, 0));
_viewMatrix = Matrix.CreateRotationZ(_rotation) *
Matrix.CreateScale(new Vector3(_zoom, _zoom, 1.0f)) *
Matrix.CreateTranslation(-1 * _position.X, _position.Y, 0.0f);
_viewMatrix = proj * _viewMatrix;
Я уже построил raytracer, поэтому я должен понять ваше понимание, моя путаница заключается в том, что он 2D и SpriteBatch скрывает то, что он делаетот меня.Спасибо!Фарид