use quaternion for rotation