Advertisement
Guest User

Untitled

a guest
Jun 10th, 2014
374
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.20 KB | None | 0 0
  1. /*****************************************************************/
  2. / PIXEL SHADER DISTORSION /
  3. / modified from Ludosz /
  4. /*****************************************************************/
  5. uniform sampler2D bgl_RenderedTexture;
  6.  
  7. const vec4 kappa = vec4(1.0,1.7,0.7,15.0);
  8.  
  9. const float screen_width = 1920.0;
  10. const float screen_height = 1080.0;
  11.  
  12. const float scaleFactor = 0.65;
  13.  
  14. const vec2 leftCenter = vec2(0.25, 0.5);
  15. const vec2 rightCenter = vec2(0.75, 0.5);
  16.  
  17. //INTERESSANT !!!
  18. const float separation = -0.064;
  19.  
  20. // Scales input texture coordinates for distortion.
  21. vec2 hmdWarp(vec2 LensCenter, vec2 texCoord, vec2 Scale, vec2 ScaleIn) {
  22. vec2 theta = (texCoord - LensCenter) * ScaleIn;
  23. float rSq = theta.x * theta.x + theta.y * theta.y;
  24. vec2 rvector = theta * (kappa.x + kappa.y * rSq + kappa.z * rSq * rSq + kappa.w * rSq * rSq * rSq);
  25. vec2 tc = LensCenter + Scale * rvector;
  26. return tc;
  27. }
  28.  
  29. bool validate(vec2 tc, int left_eye) {
  30. //keep within bounds of texture
  31. if ((left_eye == 1 && (tc.x < 0.0 || tc.x > 0.5)) ||
  32. (left_eye == 0 && (tc.x < 0.5 || tc.x > 1.0)) ||
  33. tc.y < 0.0 || tc.y > 1.0) {
  34. return false;
  35. }
  36. return true;
  37. }
  38.  
  39.  
  40. void main() {
  41. vec2 screen = vec2(screen_width, screen_height);
  42.  
  43. float as = float(screen.x / 2.0) / float(screen.y);
  44. vec2 Scale = vec2(0.5, as);
  45. vec2 ScaleIn = vec2(2.0 * scaleFactor, 1.0 / as * scaleFactor);
  46.  
  47. vec2 texCoord = (gl_TexCoord[0].st);
  48. vec2 texCoordSeparated = texCoord;
  49.  
  50. vec2 tc = vec2(0);
  51. vec4 color = vec4(0);
  52.  
  53. if (texCoord.x < 0.5) {
  54. texCoordSeparated.x += separation;
  55. tc = hmdWarp(leftCenter, texCoordSeparated, Scale, ScaleIn );
  56. color = texture2D(bgl_RenderedTexture, tc);
  57. if (!validate(tc, 1))
  58. color = vec4(0);
  59. } else {
  60. texCoordSeparated.x -= separation;
  61. tc = hmdWarp(rightCenter, texCoordSeparated, Scale, ScaleIn);
  62. color = texture2D(bgl_RenderedTexture, tc);
  63. if (!validate(tc, 0))
  64. color = vec4(0);
  65.  
  66. }
  67. gl_FragColor = color;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement