Spritebatch.Begin () Матрица преобразования - PullRequest
2 голосов
/ 19 июня 2011

Некоторое время я размышлял о том, как реализована матрица преобразования в spriteBatch. Я создал 2D камеру, и матрица преобразования выглядит следующим образом:

            if (needUpdate)
            transformMatrix =
               Matrix.CreateTranslation(-Position.X, -Position.Y, 0) *
                Matrix.CreateScale(curZoom, curZoom, 1) ; needUpdate = false;

Камера работает так хорошо, как я хочу, но я просто хочу знать, как применяется преобразование: влияет ли преобразование только на ось спрайтов или экран также координирует?

Заранее спасибо!

1 Ответ

6 голосов
/ 20 июня 2011

Я вижу, что вы ответили на свой вопрос, но для предоставления полной информации - SpriteBatch предоставляет интерфейс, аналогичный традиционной системе преобразований проекции мировоззрения.

Класс SpriteBatch имеет неявную матрицу проекции , которая берет координаты в «пространстве клиента» области просмотра ((0,0) в левом верхнем углу, одна единица на пиксель) и помещает их на экране.

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

И вызов Draw, хотя на самом деле не используется матрица, позволяет вам указать положение, вращение, масштаб и т. Д. - эквивалентно матрице world , используемой для позиционирования модели в сцене (модель космос в мир космос).

Итак, вы начинаете с вашего "модельного" эквивалента, который для SpriteBatch представляет собой квад (спрайт) размера текстуры (или исходного прямоугольника). При прорисовке этот четырехугольник преобразуется в его мировые координаты, затем он преобразуется в его вид координат, а затем, наконец, преобразуется в его проекцию координат.

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