In wave.cpp you are simply assigning slopes obtained from equation 20 to Normals array.
normalField[index] = normalize(vec3( sign * out_slope_x[index][0], -1, sign * out_slope_z[index][0]));
The values obtained in equation 20, are then to be used in equation 36 to obtain normal.
Don't you think your implementation is wrong?
In wave.cpp you are simply assigning slopes obtained from equation 20 to Normals array.
normalField[index] = normalize(vec3( sign * out_slope_x[index][0], -1, sign * out_slope_z[index][0]));
The values obtained in equation 20, are then to be used in equation 36 to obtain normal. Don't you think your implementation is wrong?