Заставить объект вращаться вокруг глобальной оси Directx

Я пытаюсь повернуть объект вокруг глобальной оси Y (в основном, отклонение вокруг 0,1,0 независимо от текущей ориентации). Я бы показал картинку, но репутацию … Я хочу вращать рыскание вокруг глобальной оси вместо оси, локальной для объекта. Например, если я слегка наклоню коробку с помощью шага, а затем попытаюсь повернуть рыскание, она будет поворачивать коробку под углом наклона, а не прямо, как если бы коробка вообще не была наклонена.

Каждый объект сохраняет свое положение и вращение в матрице, которая обновляется при каждом вызове обновления. Код для вращения выглядит так:

D3DXMatrixRotationYawPitchRoll(&rotation, yaw, pitch, roll);
D3DXMatrixMultiply(&position, &rotation, &position);

где позиция — это выдающаяся матрица, которая переводится и поворачивается при каждом обновлении. Это то, что вращает его локально, но я хочу повернуть рыскание через глобальную ось.

Как я могу написать это так, чтобы вращение рыскания было завершено, как если бы локальный вектор повышения был (0,1,0), даже если наклонен?

0

Решение

В следующем коде есть две матрицы вращения, A и B. Одна — это вращение вокруг локальной оси на worldYaw, а другая — на вращение вокруг глобальной оси на worldYaw.

D3DXMatrixRotationYawPitchRoll(&rotation, yaw, pitch, roll);
D3DXMatrixRotationYawPitchRoll(&worldRotation, worldYaw, 0, 0);
D3DXMatrixMultiply(&A, &rotation, &worldRotation);
D3DXMatrixMultiply(&B, &worldRotation, &rotation);

Я никогда не смогу держать это в голове, если D3D использует векторы строк или столбцов, поэтому я не могу сказать, является ли A или B тем, что вы ищете 🙂

0

Другие решения

Исправлена ​​проблема. Решили сохранить старые значения из предыдущего кадра, чтобы перестроить матрицу позиций.

Теперь я строю матрицу из изменений текущего фрейма, завершая ее с перемещением и поворотом, а затем добавляю эти значения к общим значениям перед созданием окончательной матрицы.

Работает как шарм!

0

По вопросам рекламы [email protected]