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,
Code:
...
   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...


"There is no fate but what WE make." - CEO Cyberdyne Systems Corp.
A8.30.5 Commercial