also use viewport width/height for frustum computation for consistency.
(has to be equal to imageSize to get the principalPoint right anyway)
fixed whitespace