У меня есть матрицы вращения в «самодельной» системе координат GL, и я хочу применить их к системе координат Collada.
Я знаю, что мне нужна Матрица для умножения вращений GL, чтобы преобразовать их в систему координат коллада (где Z на самом деле вверх).
Системы координат показаны на рисунке здесь:
Мне нужно преобразование из левой системы в правую .. для большего понимания:
ColladaMatrix = GLRotMatrix * NeededMatrix
Кто-нибудь знает матрицу, которая мне нужна?
Я думаю, что вам нужно умножить на две матрицы изменить основу вашей матрицы вращения.
Действительно, 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]
Надеюсь, поможет!
замечаниеТо же самое происходит при диагонализации матрицы (которая на самом деле является изменением базиса), вам нужно предварительно и после умножить матрицу, которую вы хотите диагонализировать.
Редактировать: я написал две системы координат для матриц, потому что в общем случае матрица может отправлять вектор из системы координат в другую. Это делает это более понятным.
Я вижу, что я неправильно понял часть о матрицах вращения в вашем вопросе. Я думал, что вы просите матрицу вращения, которая преобразует координаты GL в координаты COLLODA.
Это матрицы, которые преобразуют левую систему (ту, которую вы пометили «GL») в правую систему («COLLADA»):
1 0 0
0 0 1
0 1 0
чтобы преобразовать наоборот, вы бы использовали ту же матрицу.
DirectX и многие библиотеки и игровые движки (не OpenGL) работают с системой правил левой руки, и почти все математические модели и устройства, которые вы найдете, работают с правилом правой руки, это относится к математическому перекрестному произведению векторов.
Вот почему нет возможности конвертировать одну систему в другую с помощью простых вращений.
Вы должны выбрать одну систему координат для работы, попытаться использовать ту, которая будет использовать больше всего, а затем создать некоторые полезные функции для преобразования в одну систему координат в другую.
По опыту могу сказать, что кватернионы — лучший способ избавиться от этой проблемы, выбирая правильную матрицу с учетом системы судьбы рук.
Если у вас есть проблемы с вращением (и у вас это будет, если вы используете угол наклона более 90 °), найдите замок карданного подвеса, а затем используйте кватернионы, что сэкономит много времени и усилий.
Тогда посмотрите это: Эйлер в Кватернион, и измените sin (x) на -sin (x), чтобы перейти от одной системы координат к другой.
с уважением.