La glDepthFunc imposta il criterio in base al quale viene utilizzato il depth buffer, ovvero il buffer dove OpenGL mantiene la profondità di ciascun pixel (non so se è corretto chiamarlo pixel, forse "frammento" sarebbe + corretto, ma non sono sicuro).
Quindi nel codice che hai postato, la stanza viene disegnata per intero (la profondità dei poligoni viene ignorata, se c'è un poligono che sta dietro a un altro, potrebbe venire disegnato davanti), mentre della pallina vengono disegnati solo i poligoni che stanno davanti e che coprono quelli che stanno dietro, perché prima di disegnare la pallina viene reimpostato il criterio per l'uso del depth buffer. Poi il programma ce l'hai tu, quindi tu sai qual'è il suo effetto grafico finale

Ciao