LightcubePolar.frag 1019 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #ifdef GL_ES
  2. precision mediump float;
  3. #endif
  4. uniform sampler2D polarMap;
  5. uniform sampler2D diffuse;
  6. uniform vec4 entityColor;
  7. varying vec3 varNormal;
  8. varying vec3 worldNormal;
  9. varying vec2 texCoordVar;
  10. uniform float lightFactor;
  11. const float PI = 3.14159265359;
  12. vec2 sphere_map(vec3 n) {
  13. return vec2(atan(n.z,n.x)/(2.0 * PI), acos(-n.y) / (PI));
  14. }
  15. vec3 hash3( float n )
  16. {
  17. return fract(sin(vec3(n,n+1.0,n+2.0))*vec3(43758.5453123,22578.1459123,19642.3490423));
  18. }
  19. void main()
  20. {
  21. vec3 col = vec3(0.0);
  22. for( int i=0; i<32; i++ )
  23. {
  24. vec3 rr = normalize(-1.0 + 2.0*hash3(float(i)*123.5463));
  25. rr = normalize( worldNormal +7.0*rr );
  26. rr = rr * sign(dot(worldNormal,rr));
  27. vec2 vN = sphere_map(rr);
  28. col += pow( texture2D( polarMap, vN).xyz, vec3(1.0) ) * dot(rr,worldNormal);
  29. }
  30. col = col / 32.0 * lightFactor;
  31. vec4 texColor = texture2D(diffuse, texCoordVar);
  32. vec4 color = mix(entityColor,texColor, texColor.a);
  33. color.xyz = color.xyz * col;
  34. color.a = 1.0;
  35. gl_FragColor = color;
  36. }