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

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

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

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

56 голосов | спросил Narf the Mouse 1 stEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 01 Sep 2011 20:44:40 +0400 2011, 20:44:40

3 ответа


71

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

T * R * S

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

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

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

ответил Raphael R. 1 stEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 01 Sep 2011 21:18:17 +0400 2011, 21:18:17
-4

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

ответил nil 6 J000000Thursday17 2017, 09:45:48
-5

Я действительно верю, что это переворот и набор номера

ответил Jimmy 24 Jam1000000amWed, 24 Jan 2018 05:12:05 +030018 2018, 05:12:05

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132