Это как раз последовательный поворот по трём осям, последовательное преобразование по трём матрицам, это мы умеем

:

Код:
//цитата исходника __etc
y = o.y0*Math.cos(angleZ)+o.x0*Math.sin(angleZ);
x = o.x0*Math.cos(angleZ)-o.y0*Math.sin(angleZ);
// y rotate
z = o.z0*Math.cos(angleY)-x*Math.sin(angleY);
x = x*Math.cos(angleY)+o.z0*Math.sin(angleY);
// x rotate
oy = y;
y = y*Math.cos(angleX)-z*Math.sin(angleX);
z = oy*Math.sin(angleX)+z*Math.cos(angleX);
Было бы прекрасно разложить любой произвольный поворот на три последовательных, применив к ним код аналогичный твоему.