use quaternions for rotation