Я нашел очень дешевый и грязный способ сделать это.
Таким образом, матрица в OpenGL выглядит следующим образом
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
если вы возьмете 3 вертикальных числа за вектор вращения, вы получите желаемый эффект. Например:
Если вы будете вращаться вокруг вектора (0, 4, 8), вы будете вращаться вокруг оси x.
Аналогично (1, 5, 9) будет y, (3, 6, 10) будет z.
Почему это работает? .... хорошо, когда вы берете вертикальные числа, вы сделали транспонированную копию исходной матрицы, и это дает вам некую исходную матрицу по сравнению с повернутой матрицей ..... Извините, я не математик, но это работает. Поверь мне;).
Мой пример кода на OpenGL ES:
Matrix.rotateM(Settings.anchorMatrix, 0, rX, Settings.anchorMatrix[0], Settings.anchorMatrix[4], Settings.anchorMatrix[8]);
Matrix.rotateM(Settings.anchorMatrix, 0, rY, Settings.anchorMatrix[1], Settings.anchorMatrix[5], Settings.anchorMatrix[9]);
Matrix.rotateM(Settings.anchorMatrix, 0, rZ, Settings.anchorMatrix[2], Settings.anchorMatrix[6], Settings.anchorMatrix[10]);
anchorMatrix - технически моя основная матрица, которую я создал для отслеживания треков. Android OpenGL ES не позволяет мне брать текущую матрицу из конечного автомата.