add AbstractCamera to do view transform
TODO add model transform
TODO implement subclass of AbstractCamera to do parallel projection and perspective projection
add mouse interactivity to change the camera position