XMMATRIX использовать в качестве матрицы преобразования
В моем графическом проекте я использую XMMATRIX для представления преобразований тел. Теперь мне нужно масштабировать часть перевода моей матрицы. Как я могу сделать это с XMMATRIX? Функция XMMatrixScale позволяет мне изменять только строки X, y или z, но не T.
И вообще, я думаю, что не очень удобно использовать XMMATRIX в качестве матрицы преобразования. Какой у меня есть выбор? Я хотел бы иметь возможность легко вращать, масштабировать, трансформировать и т. Д. Многое из этого у меня есть с XMMATRIX, но мне нужно что-то еще для работы над частью перевода?
1 ответ
Вы можете просто объединить операции, чтобы получить матрицу с масштабированием и переводом. Если вы возьмете свою матрицу 4x4 с масштабными коэффициентами и примените ее к единичной матрице со строкой перевода, вы заметите, что часть перевода также будет масштабирована. Вам просто нужно объединить матрицы (т.е. Vector * Scale * Translation для DirectX IIRC.)
В "нормальной" математике у вас будет матрица масштаба S, матрица перевода T и вектор V, а полученная вами vecor V' = S * T * V; который сначала переводит V, затем масштабирует всю сцену (то есть, если вы перевели 1 единицу вправо и масштабируете на 2, общий перевод будет равен 2). В DirectX порядок отличается от IIRC из-за хранения основной матрицы столбцов / строк.
Небольшой числовой пример: возьмем V = (1, 0, 0), T = перевод по (1, 0, 0) и S = (2, 2, 2). T * V -> (2, 0, 0), это масштабируется как S = (4, 0, 0)