works for rotation and translation, but not zoom)