Ambient light

If we specify GL_SPOT_CUTOFF and spot location on an ambilent light, we’ll see the light directly going through the object.

How can we explain this phenomenon?

I’m not real sure that I understand what you mean, but I think it sounds like you are expecting OpenGL to create shadows for you?

If that’s the case, it won’t. Every face is lit w/o taking any other face into account. If you want shadows, you have to do them yourself. And there’s a variety of different ways that they can be done.