const float bumpHeight = 0.2;

uniform sampler2D normalSampler;
uniform samplerCube envSampler;

varying vec2 texCoord;
varying vec3 worldEyeVec;
varying vec3 worldNormal;
varying vec3 worldTangent;
varying vec3 worldBinorm;

void main() {
  vec2 bump = (texture2D(normalSampler, texCoord.xy).xy * 2.0 - 1.0) * bumpHeight;
  vec3 normal = normalize(worldNormal);
  vec3 tangent = normalize(worldTangent);
  vec3 binormal = normalize(worldBinorm);
  vec3 nb = normal + bump.x * tangent + bump.y * binormal;
  nb = normalize(nb);
  vec3 worldEye = normalize(worldEyeVec);
  vec3 lookup = reflect(worldEye, nb);
  vec4 color = textureCube(envSampler, lookup);
  gl_FragColor = color;
}