Те значения вращения, которые вы получаете от гироскопа, должны рассматриваться не как отдельные вращения вокруг разных осей, а как дифференциал вращения по времени. Ваша проблема имеет форму, в которой вы хотите найти матрицу дифференциального вращения dR, для которой дифференциальные компоненты можно умножить в произвольном порядке, чтобы получить эту матрицу
dR = dR_x * dR_y * dR_z
= dR_y * dR_x * dR_z
= dR_y * dR_z * dR_x
= dR_z * dR_x * dR_y
= dR_z * dR_y * dR_x
Самый простой способ сделать это - вычислить каждую из этих перестановок, взять их среднюю матрицу, равную dR ', и применить ортонормировку.
Тогда просто используйте эту матрицу. Забудьте о glRotate, он вам не нужен, и он все равно был удален из более поздних версий OpenGL.