The subject of linear perspective came up on another thread, in the context of the isometric, axonometric and dimetric representations of objects in model plans. I thought this might be of interest to some people, but I don't want to hijack that thread, so I'll post it here:
These are sections from a manual I wrote in 2003 and last updated in 2007:
3DLDF User and Reference Manual (The Perspective Projection)
3DLDF User and Reference Manual (Perspective Functions)
They explain and illustrate the difference between doing a perspective drawing using vanishing points, as one would do by hand, and the way 3D graphics programs do it, using matrix multiplication.
The manual is very out-of-date and shows how you would use the latter method in C++, using 3DLDF as a software library. Since 2009, 3DLDF has an interpreter, which makes this unnecessary. However, in this context it doesn't matter.