Традиционно существует три матрицы: World, View и Project.
BasicEffect
и большинство других 3D-эффектов просто имеют эти матрицы.Вы используете Project, чтобы определить, как точки проецируются из трехмерного мира на 2D-область просмотра ((-1, -1) в нижнем левом углу области просмотра до (1,1) в правом верхнем углу).Вы устанавливаете Вид, чтобы перемещать камеру в мировом пространстве.И вы используете Мир, чтобы перемещать свои модели в мировом пространстве.
SpriteBatch
немного отличается.Он имеет неявную матрицу Project, которая заставляет ваше мировое пространство соответствовать клиентскому пространству области просмотра ((0,0) в верхнем левом углу и (ширина, высота) в правом нижнем углу).Вы можете передать матрицу transformMatrix
в Begin
, которую вы обычно можете рассматривать как матрицу просмотра.И тогда параметры, которые вы передаете Draw
(положение, вращение, масштаб и т. Д.), Работают так, как будет работать матрица мира.
Если вам нужно сделать «странные» вещи с вашими матрицами мира или проекта в SpriteBatch
, вы можете просто встроить эти преобразования в transformMatrix
.Для «отмены» встроенных преобразований может потребоваться просто математика.
В XNA 4 вы также можете использовать Effect
(например, BasicEffect
) непосредственно в SpriteBatch
, который вы можете предоставить с помощьюпроизвольные матрицы ( детали ).