Вопрос о массиве PHP

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

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

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

6
задан Santosh Kumar 21 November 2015 в 16:06
поделиться

1 ответ

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

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

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


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

  1. Спрайт начинается как четырехугольник с верхним левым углом в точке (0,0), его размер совпадает с размером текстуры. (или SourceRectangle ).
  2. Переведите спрайт обратно по его источнику (таким образом поместив его начало в (0,0)).
  3. Масштабировать спрайт
  4. Повернуть спрайт
  5. Перевести спрайт по его положению
  6. Применить матрицу из SpriteBatch.Begin

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

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

11
ответ дан 8 December 2019 в 18:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: