Что такое вращательное поведение в XNA? - PullRequest
6 голосов
/ 20 августа 2010

Я только начинаю в XNA и у меня есть вопрос о ротации. Когда вы умножаете вектор на матрицу вращения в XNA, он идет против часовой стрелки. Это я понимаю.

Однако позвольте мне привести вам пример того, чего я не понимаю. Допустим, я загружаю случайный художественный актив в конвейер. Затем я создаю некоторую переменную для увеличения каждого кадра на 2 радиана при запуске метода обновления (testRot + = 0.034906585f). Главное, что я запутался, это то, что ресурс вращается по часовой стрелке в этом пространстве экрана. Это смущает меня, поскольку матрица вращения будет вращать вектор против часовой стрелки.

Еще одна вещь, когда я указываю, где находится мой вектор положения, а также мое происхождение, я понимаю, что вращаюсь вокруг начала координат. Могу ли я предположить, что есть перпендикулярная ось, проходящая через источник этого актива? Если это так, откуда начинается вращение? Другими словами, я начинаю вращение с вершины оси Y или оси X?

Ответы [ 2 ]

11 голосов
/ 20 августа 2010

XNA SpriteBatch работает в клиентском пространстве .Где «вверх» - это Y-, а не Y + (как в декартовом пространстве, проекционном пространстве и том, что большинство людей обычно выбирают для своего мирового пространства).Это заставляет вращение появляться по часовой стрелке (не против часовой стрелки, как в декартовом пространстве).Фактические координаты, производимые вращением, одинаковы.

Вращения относительны, поэтому они не «запускаются» из какой-либо указанной позиции.

Если вы используете математические функции, такие как sin или cos или atan2, тогда абсолютные углы всегда начинаются с оси X + как нулевые радианы, а положительное направление вращения поворачивается к Y +.


Порядокоперации SpriteBatch выглядят примерно так:

  1. Спрайт начинается как квад с левым верхним углом в (0,0), его размер совпадает с размером текстуры (или * 1019•)
  2. Переведите спрайт по его позиции
  3. Примените матрицу из SpriteBatch.Begin

Это помещает спрайт в пространство клиента.

Наконец матрица применяетсядля каждой партии, чтобы преобразовать это пространство клиента в пространство проекции, используемоеГПУ.(Пространство проекции от (-1, -1) в левом нижнем углу окна просмотра до (1,1) в правом верхнем углу.)

2 голосов
/ 12 сентября 2010

Поскольку вы новичок в XNA, позвольте мне представить библиотеку, которая очень поможет вам в процессе обучения.Он называется XNA Debug Terminal и является проектом с открытым исходным кодом, который позволяет запускать произвольный код во время выполнения.Таким образом, вы можете увидеть, если ваши переменные имеют значение, которое вы ожидаете.Все это происходит на экране терминала в верхней части вашей игры и без остановки вашей игры.Его можно загрузить по адресу http://www.protohacks.net/xna_debug_terminal. Он бесплатный и очень прост в настройке, поэтому вам действительно нечего терять.

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