implement viewport functionality

create a viewport and additional rendering functions as needed