What is the difference between "Generated" and "Normal" texture coordinates?
It may help to visualize it this way:
When we render a scene, for each pixel on the camera we project a ray, and if we make contact with the surface of an object, we ask &quot;What is the color that should be reported for this pixel given material properties, lighting, occlusion etc?&quot;

This is fairly simple when the material is a solid color, but what about materials that vary?
A procedural material can be thought of as a &quot;field&quot; in the physics sense, it exists and has a value in every position in your scene.  When you map this texture to an object and look at it in the viewport you are displaying the cross section of this field that coincides with the surface of your object.

The Texture Coordinate node merely defines the X,Y,Z coordinate space used to map the texture.  Object coordinates, for example, use Blender's scale setting and set the object's origin as 0,0,0.  Generated coordinates use the object's bounding box as the coordinate space over a range of 0,0,0 to 1,1,1.

Normal coordinates are a little strange.  My current understanding is that they are less based on position, and more on the rotation of each individual face (more specifically the normal direction).  Maybe someone will expand on how this may be useful for you, my knowledge is limited on this one.