title: GLSL - Calculate Surface Normal
body: <p>I have a simple vertex shader, written in GLSL, and I was wondering if someone could aid me in calculating the normals for the surface. I am 'upgrading' a flat surface, so the current light model looks... weird. Here is my current code:</p>
  
  <pre><code>varying vec4 oColor;
  varying vec3 oEyeNormal;
  varying vec4 oEyePosition;
  
  uniform float Amplitude;     // Amplitude of sine wave
  uniform float Phase;         // Phase of sine wave
  uniform float Frequency;     // Frequency of sine wave
  
  varying float sinValue;
  
  void main()
  {
      vec4 thisPos = gl_Vertex;
  
      thisPos.z = sin( ( thisPos.x + Phase ) * Frequency) * Amplitude;
  
      // Transform normal and position to eye space (for fragment shader)
      oEyeNormal    = normalize( vec3( gl_NormalMatrix * gl_Normal ) );
      oEyePosition  = gl_ModelViewMatrix * thisPos;       
  
      // Transform vertex to clip space for fragment shader
      gl_Position   = gl_ModelViewProjectionMatrix * thisPos;
  
      sinValue = thisPos.z;
  }
  </code></pre>
  
  <p>Does anyone have any ideas?</p>