My idea kindof depends on the process you use to decide what co-ordinate to spawn at.
Let say you just have a function that picks random locations throughout your level to spawn at.
This function can choose a random co-ordinate (at ground level),
check to see if th co-ordinate is inside the view fustrum,
and abort this co-ordinate if it IS inside the view area.
The check you can use to see if the co-ordinate is in view is this,
...
VECTOR tmp_vec; vec_set(tmp_vec, spawn_vector);
if(!vec_to_screen(tmp_vec, camera))
{
//create a zombie at vector "spawn_vector"
//it cannot be seen by the camera because of angle
}
else if(tmp_vec.z >= clip_far)
{
//create a zombie at vector "spawn_vector"
//it cannot be seen by the camera because of distance
}
else
{
//DONT create a zombie because vector "spawn_vector"
//CAN be seen by camera
}
...
This is just an idea. Untested concept and coding...