Каков правильный порядок умножения масштабных, вращательных и переводных матриц для правильной мировой матрицы?

62

Предположим, что DirectX является платформой, если это важно. (Уверен, это не так)

Предполагая, что у меня есть правильная шкала, матрица вращения и перевода, в каком порядке я умножаю их, чтобы получить правильную матрицу мира и почему?

Под «правильным» я подразумеваю «я мог бы выбросить их прямо в DirectX и получить наиболее часто используемый 3D-кадр».

Нарф Мышь
источник
6
Вот объяснение «вращать, а затем переводить» (вращаться) против «перевести, а затем вращать» (вращаться)
бобобобо
ссылка хорошая, но с небольшой ошибкой. это должен быть эффект вращения, а не вращения, потому что сфера имеет тенденцию сдвигаться от своего положения (оставаясь на оси) путем перемещения.
infoclogged

Ответы:

77

Обычно это масштаб, затем вращение и, наконец, перевод. С обозначением матрицы (т. Е. T для матрицы перевода, R для матрицы вращения и S для матрицы масштабирования) это будет:

T * R * S

Однако, если вы хотите повернуть объект вокруг определенной точки, то это масштаб, перемещение точки, вращение и, наконец, перемещение объекта.

Почему: сначала вы хотите масштабировать объект так, чтобы переводы работали правильно. Затем вы поворачиваете оси так, чтобы перемещение происходило по настроенным осям. Наконец вы переводите объект в его положение.

В OpenGL вы можете использовать gluLookAt, чтобы получить полное преобразование камеры за один вызов. Вероятно, аналогичный вызов для DirectX.

Рафаэль Р.
источник
11
И помните, что если вы хотите преобразовать вокруг центра, то сначала вы должны выполнить преобразование, чтобы сместить центр, чтобы быть в исходной точке, затем сделайте, как указано в user392858, а затем снова переведите его обратно в исходную точку на ту же величину. Однако, как правило, это необходимо только в 2D, где у вас есть спрайт с верхним левым краем в начале координат.
инженер
Отлично. :) Теперь мне просто нужно выяснить, почему моя модель теперь инвертируется в горизонтальном представлении и нуждается в точечном произведении на направленном источнике света, инвертированном в вертикальном представлении. Раньше этого не делали, потом я исправил некоторые математические ...
Мышиный Нарф
Просто позвольте мне отметить, что я ненавижу неправильно размещенные негативные признаки. В любом случае, спасибо, и вы можете считать этот вопрос законченным. :)
Нарф Мышь
Нет проблем, всегда рады помочь.
Рафаэль Р.
2
@ Matthias Насколько я знаю, это зависит от того, как вы затем умножить на вектор, который вы хотите преобразовать. Если вы умножаете M * v, тогда да, ответ имеет обратный порядок.
Биальпио
-4

вращение и масштабирование перевода - последовательность выполнения операции

ноль
источник
-5

Я верю, что это ротация перевода и набор номера

Джимми
источник
2
Это не дает больше объяснения, чем существующие ответы.
DMGregory