I am sorry but I have been unable to follow your explanation of what you are doing... Anyway, let's see if I can help.
Regardless of where and when you do your lighting what matters is that all the elements involve are in the same space. In your case you want eye space, so let's do it that way
- Get the light in eye space: (viewMat) * (worldMat) * lightPos <-- do it in the host program, since this doesn't change for each primitive
- Get the vertex normal in eye space: traspose( inverse( mat3(viewMat) * mat3(worldMat) ) ) * normal <-- do it in the vertex program, since this changes per-vertex
- Compute the lighting using whatever lighting model you want <-- do this in the fragment, if you want accurate per-pixel lighting.
Now: if you are totally sure that you are not using non-uniform scaling anywhere, you can transform your vertex normal with just mat3(viewMat) * mat3(worldMat) * normal.
By the way, of course the vector from the eye to the vertex is -position in eye space. Just don't forget to normalize it (and the others!) when computing your lighting in case you need it (highly likely).
EDIT: Info about the transformation of normals -> http://www.lighthouse3d.com/tutorials/glsl-tutorial/the-normal-matrix/
Edited by Javier Meseguer de Paz, 20 March 2014 - 10:04 AM.
“We should forget about small efficiencies, say about 97% of the time; premature optimization is the root of all evil” - Donald E. Knuth, Structured Programming with go to Statements
"First you learn the value of abstraction, then you learn the cost of abstraction, then you're ready to engineer" - Ken Beck, Twitter