XMMATRIX использовать в качестве матрицы преобразования

В моем графическом проекте я использую XMMATRIX для представления преобразований тел. Теперь мне нужно масштабировать часть перевода моей матрицы. Как я могу сделать это с XMMATRIX? Функция XMMatrixScale позволяет мне изменять только строки X, y или z, но не T.

И вообще, я думаю, что не очень удобно использовать XMMATRIX в качестве матрицы преобразования. Какой у меня есть выбор? Я хотел бы иметь возможность легко вращать, масштабировать, преобразовывать и т. Д. Многое из этого у меня есть с XMMATRIX, но мне нужно что-то еще, чтобы работать с частью перевода?

0

Решение

Вы можете просто объединить операции, чтобы получить матрицу с масштабированием и переводом. Если вы возьмете свою матрицу 4×4 с масштабными коэффициентами и примените ее к единичной матрице со строкой перевода, вы заметите, что часть перевода также будет масштабирована. Вам просто нужно объединить матрицы (т.е. 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)

0

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


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