transformations respond to viewport changes