Here I am assuming that our mesh is made of triangles and every vertex has position, normal and color attribute. There is a point light source in the scene.
Light direction interpolates poorly along the boundaries of the triangle, and this becomes most visible in cases of huge triangle surfaces and near point light sources. Therefore we interpolate position instead of light direction, and calculate light direction in fragment shader.
By the same argument however, normals should also interpolate poorly if the normals varied greatly. However we still interpolate normal across the fragments of the triangle. Why is that?
I have been referring to Chapter 10 of Learning Modern 3D Graphics Programming book:
https://paroj.github.io/gltut/Ill.../Tut10%20Fragment%20Lighting.html.