Как перевести спрайт и геометрию вершины на одинаковое расстояние? - PullRequest
2 голосов
/ 19 марта 2011

Я пытаюсь собрать двигатель 2.5 с XNA.По сути, я хочу отображать 2D-спрайтов (главного героя и других монстров) на 3D-фоне.Игра станет платформой.Теперь использование матрицы перевода на спрайте не дает того же результата, что и перевод геометрии вершины в мировом пространстве.Я имею в виду, если я применю

Matrix.CreateTranslation(new Vector3(viewportWidth / 2, viewportHeight / 2, 0));

, спрайт будет переведен в середине экрана (начиная с верхнего левого края дисплея).Но если я применю ту же трансформацию к кубу в мировом пространстве, он переведет очень далеко.Меня это не удивляет, но мне интересно перевести спрайт и 3D-объект на одно и то же расстояние, игнорируя все данные проекта / не проектируемых координат.

Спасибо!

1 Ответ

1 голос
/ 19 марта 2011

Традиционно существует три матрицы: 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, который вы можете предоставить с помощьюпроизвольные матрицы ( детали ).

...