На самом деле очень важно, в каком порядке вы применяете свои вращения.
Порядок, который вы хотите, зависит от того, что вы хотите, чтобы выполнялись ротации. Например, если вы моделируете самолет, вы можете сначала выполнить крен (вращение вдоль длинной оси тела), затем шаг (вращение вдоль другой горизонтальной оси), а затем направление (вращение вдоль вертикальной оси). ). Это произошло бы потому, что, если вы сделали заголовок первым, плоскость больше не была бы ориентирована вдоль других осей. Кроме того, вам нужно разобраться с вашими соглашениями: какие из этих осей соответствуют X, Y и Z?
Как правило, вы хотите выбрать определенный порядок вращения только для определенных приложений. Нет особого смысла определять универсальный объект "XYZrotation"; как правило, у вас будут общие преобразования (т. е. матрицы, которые могут представлять собой любую последовательность вращений, переводов и т. д.) и различные способы их получения (например, rotX, rotY, translate, scale ...), а также возможность применять их в определенном порядке (путем умножения матриц).
Если вы хотите что-то, что может представлять только вращения, и ничего больше, вы можете рассмотреть кватернионы (как предполагает Ананд). Однако вам все еще нужно решить, в каком порядке выполнять ваши повороты, и, опять же, на самом деле не имеет смысла устанавливать для этого необходимый порядок.