Ну блин. Сейчас буду вспоминать линейную алгебру. Пишу экспромтом и тема не моя совсем, так что могу гнать, сразу предупреждаю.
Поворот вокруг данной оси координат -- это поворот в плоскости других двух осей. Например, поворот вокруг оси Oz -- это как будто мы взяли горизонтальный стол, на котором стоит ваша сцена, и повернули его вокруг своей вертикальной оси. Дети, катающиеся до опупения на карусели, совершают поворот вокруг оси Oz.
Поворот вокруг координатной оси задаётся так называемой матрицей поворота. Эта матрица имеет следующий вид: строка и столбец, соответствующие оси, вокруг которой поворачиваем, содержат 1 на пересечении и 0 в прочих местах, а остальные четыре клетки содержат (слева направо, сверху вниз) cos phi, -sin phi, sin phi, cos phi, где phi -- угол поворота: специально для вас нарисованная
картинка по ссылке.
Чтобы повернуть нечто (например, вектор (x, y, z), нарисованный из начала координат) вокруг данной оси, необходимо умножить его на данную матрицу поворота. Если у вас вектор-столбец, то он умножается на матрицу справа: v' = Tv.
Это было про поворот вокруг координатной оси. Если нужно сгруппировать несколько поворотов, перемножьте соответствующие матрицы. Помните, что в общем случае произведение матриц некоммутативно!
Осталось придумать, как свести поворот вокруг произвольной прямой, проходящей через начало координат, к повороту вокруг координатной оси.
Вернёмся к аналогии со столом, на котором стоит ваша сцена. Пусть у вас через центр стола проведена прямая, вокруг которой вам нужно поворачивать ваше нечто. Сначала наклоните стол так, чтобы эта прямая оказалась в плоскости Oxz (это вы сделали поворот вокруг оси Ox), а затем поверните сцену вокруг оси Oy так, чтобы эта прямая стала вертикальной (совпала с осью Oz). Затем радостно делайте необходимый вам поворот уже вокруг оси Oz, а потом верните взад то, что вы сначала наповорачивали (откатите два первых поворота, т.е. поверните на отрицательный угол).
Так понятнее?