Хорошо, надеюсь, я смогу объяснить это всесторонне ... прости меня, если я тебя сильно запутаю ...
Я использую старый раздражающий движок, который применяет матрицу вращения к объекту, используя только локальное пространство.
У меня есть текстовый инструмент, который позволяет пользователям (не программистам) создавать объекты и вращать их (изменения не применяются в реальном времени).
Вращения будут нормальными, если вращаться только на 1 ось, но, конечно, они станут неуклюжими, если указать вращение вокруг 2 осей (например, вращение вокруг ВВЕРХ и ВПРАВО), поскольку вращение вокруг ВВ применяется с использованием локальной UP, а не глобальный (т. Е. Мировой) UP.
Например, скажем, у нас есть камера (0,0,0), смотрящая на широкую сторону плоскости (0, -5,0). Пользователь инструмента хочет повернуть эту плоскость примерно на 45 градусов вправо по X (ВПРАВО) и на 45 градусов вверх. Что ж, у меня нет возможности позволить им просто указать 2 значения поворота и получить желаемое вращение относительно глобального UP ... они обязаны методом проб и ошибок указать вращение относительно FORWARD (в данном случае Y) в чтобы держать объект в вертикальном положении.
Что мне интересно, так это: как я могу преобразовать вращения вокруг 2 осей в вращения вокруг 3 осей, предполагая, что вращения вокруг UP являются глобальным UP, и при этом все еще достигают вращения, которое будет представлять пользователь.