Most 3D graphics books have a chapter or two on frustum culling. I don't know of any that go into a great deal of depth on it, but there are a lot that will show you how to implement culling and some brief overview on the subject.
Chapter 15 of Frank Luna's Introduction to 3D Game Programming with Direct3D 11.0 shows how to do it using DirectX 11, although the concepts used should be applicable for most 3D rendering libraries.
Michael Abrash's Graphics Programming Black Book has a bunch of information on BSP trees and the hidden surface removal in Quake, which had a pretty impressive software renderer (plus, it's free, and posted on this site).
Not a book, but Fabien Sanglard has done a writeup on the Duke Nukem 3D engine, (as well as the various Quake and Doom engines), that discusses the Portal system used for culling and hidden surface removal in that game. I would recommend reading through all of his content, just to get a sense of the hoops that some of these early FPS's had to jump through in order to render efficiently; it's pretty impressive what they were able to do without dedicated graphics hardware and modern rendering APIs.
Edited by ericrrichards22, 26 December 2013 - 07:40 PM.