Я переосмыслил это ... поверните вектор (1, 0, 0), локальную ось x в глобальную рамку. Поставьте точку с глобальным вектором y и возьмите его arcCos. Так как я не заботился о том, чтобы объект был перевернут, я взял
acos(abs(rotateVector(myQuat, vector(1, 0, 0)), upVector))