hmm, if I instead of transforming the vertices into world space at the time of creating the geometry, keep it in local space and then let the vertex shader do the transformation, then it seems to work.
I don't understand this.
If I calculate a normal from a triangle by doing
vector0 = normalized(Vertex0 - Vertex1)
vector1 = normalized(Vertex0 - Vertex2)
N = cross(vector0, vector1)
Then why does it matter if the vertices are in local space or world space, as long as I only apply a translate, e.g. offset the x value by a given amount. The normal should still be the same - shouldn't it ?