How do I set up a transformation matrix which mimics a looking-straight-down-perspective projection?

I need control over the (x,y) point directly underneath the camera, the camera elevation, and the lens length, but the camera-target direction is always -UnitZ and the camera-up vector is always UnitY. I need points on the z=0 plane to remain unmolested, points with z>0 to move away from the projected camera point and points with z<0 to move towards it.

I know how to do this with a simple linear scale using the z-coordinate as a factor, but I also need to transform the normals of the shapes because I need to work out whether edges are hidden or silhouette.