Матрица, необходимая для преобразования вращения одной системы координат в другую

У меня есть матрицы вращения в «самодельной» системе координат GL, и я хочу применить их к системе координат Collada.

Я знаю, что мне нужна Матрица для умножения вращений GL, чтобы преобразовать их в систему координат коллада (где Z на самом деле вверх).
Системы координат показаны на рисунке здесь:

введите описание изображения здесь

Мне нужно преобразование из левой системы в правую .. для большего понимания:
ColladaMatrix = GLRotMatrix * NeededMatrix

Кто-нибудь знает матрицу, которая мне нужна?

0

Решение

Я думаю, что вам нужно умножить на две матрицы изменить основу вашей матрицы вращения.

Действительно, ColladaMatrix — это то, что имеет значение ([col] означает в координатах коллада, [gl] в координатах GL)

y [col] = R [col, col] x [col]

но если вы хотите использовать матрицу GL, вам нужно преобразовать x [col] в координаты GL, затем применить вращение в базисе GL и, наконец, вернуться к координатам Collada. Так

y [col] = B [gl-> col] R [gl, gl] B [col-> gl] x [col]

Так,

R [col, col] = B [gl-> col] R [gl, gl] B [col-> gl]

и здесь B [gl-> col] и B [col-> gl] одинаковы, поэтому

                  [1 0 0                  [1 0 0
MatrixCollada  =   0 0 1   * MatrixGL *    0 0 1
0 1 0]                  0 1 0]

Надеюсь, поможет!

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

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

3

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

Я вижу, что я неправильно понял часть о матрицах вращения в вашем вопросе. Я думал, что вы просите матрицу вращения, которая преобразует координаты GL в координаты COLLODA.

Это матрицы, которые преобразуют левую систему (ту, которую вы пометили «GL») в правую систему («COLLADA»):

1 0 0
0 0 1
0 1 0

чтобы преобразовать наоборот, вы бы использовали ту же матрицу.

0

DirectX и многие библиотеки и игровые движки (не OpenGL) работают с системой правил левой руки, и почти все математические модели и устройства, которые вы найдете, работают с правилом правой руки, это относится к математическому перекрестному произведению векторов.

Вот почему нет возможности конвертировать одну систему в другую с помощью простых вращений.

Вы должны выбрать одну систему координат для работы, попытаться использовать ту, которая будет использовать больше всего, а затем создать некоторые полезные функции для преобразования в одну систему координат в другую.

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

Если у вас есть проблемы с вращением (и у вас это будет, если вы используете угол наклона более 90 °), найдите замок карданного подвеса, а затем используйте кватернионы, что сэкономит много времени и усилий.

Тогда посмотрите это: Эйлер в Кватернион, и измените sin (x) на -sin (x), чтобы перейти от одной системы координат к другой.

с уважением.

0