You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

153 lines
3.5 KiB

  1. -- GLSL.Vert --
  2. #version 120
  3. attribute vec2 in_Position;
  4. void main(void)
  5. {
  6. gl_Position = vec4(in_Position, 0.0, 1.0);
  7. }
  8. -- GLSL.Frag --
  9. #version 120
  10. uniform float u_Time;
  11. vec4 mod289(vec4 x)
  12. {
  13. return x - floor(x * (1.0 / 289.0)) * 289.0;
  14. }
  15. vec4 perm(vec4 x)
  16. {
  17. return mod289(((x * 34.0) + 1.0) * x);
  18. }
  19. float noise3d(vec3 p)
  20. {
  21. mat3 r = mat3(0.36, 0.48, -0.8, -0.8, 0.60, 0.0, 0.48, 0.64, 0.60);
  22. p = r * p;
  23. vec3 a = floor(p);
  24. vec3 d = p - a;
  25. d = d * d * (3.0 - 2.0 * d);
  26. vec4 b = a.xxyy + vec4(0.0, 1.0, 0.0, 1.0);
  27. vec4 k1 = perm(b.xyxy);
  28. vec4 k2 = perm(k1.xyxy + b.zzww);
  29. vec4 c = k2 + a.zzzz;
  30. vec4 k3 = perm(c);
  31. vec4 k4 = perm(c + 1.0);
  32. vec4 o1 = fract(k3 * (1.0 / 41.0));
  33. vec4 o2 = fract(k4 * (1.0 / 41.0));
  34. vec4 o3 = o2 * d.z + o1 * (1.0 - d.z);
  35. vec2 o4 = o3.yw * d.x + o3.xz * (1.0 - d.x);
  36. return o4.y * d.y + o4.x * (1.0 - d.y);
  37. }
  38. void main(void)
  39. {
  40. vec2 xy = gl_FragCoord.xy * 2.0;
  41. xy.y -= u_Time * 400.0;
  42. float z = u_Time * 2.0;
  43. float p = noise3d(vec3(xy / 80.0, z)) / 2.0
  44. + noise3d(vec3(xy / 40.0, z)) / 4.0
  45. + noise3d(vec3(xy / 20.0, z)) / 8.0
  46. + noise3d(vec3(xy / 10.0, z)) / 16.0;
  47. /* Scroll by adding [-.5,.5] */
  48. p -= gl_FragCoord.y / 720.0 - 0.5;
  49. p = max(p, 0.0);
  50. p = min(p, 1.0);
  51. float q = p * p * (3.0 - 2.0 * p);
  52. float r = q * q * (3.0 - 2.0 * q);
  53. gl_FragColor = vec4(min(q * 2.0, 1.0),
  54. max(r * 1.5 - 0.5, 0.0),
  55. max(q * 8.0 - 7.3, 0.0),
  56. 1.0);
  57. }
  58. -- HLSL.Vert --
  59. void main(float2 in_Position : POSITION,
  60. uniform float2 u_WinSize,
  61. out float4 out_Position : POSITION,
  62. out float2 pass_Position : TEXCOORD0)
  63. {
  64. //pass_Position = in_Position * u_WinSize;
  65. pass_Position = in_Position * float2(1280.0, 720.0);
  66. out_Position = float4(in_Position, 0.0, 1.0);
  67. }
  68. -- HLSL.Frag --
  69. float4 mod289(float4 x)
  70. {
  71. return x - floor(x * (1.0 / 289.0)) * 289.0;
  72. }
  73. float4 perm(float4 x)
  74. {
  75. return mod289(((x * 34.0) + 1.0) * x);
  76. }
  77. float noise3d(float3 p)
  78. {
  79. float3x3 r = float3x3(0.36, 0.48, -0.8, -0.8, 0.60, 0.0, 0.48, 0.64, 0.60);
  80. p = mul(r, p);
  81. float3 a = floor(p);
  82. float3 d = p - a;
  83. d = d * d * (3.0 - 2.0 * d);
  84. float4 b = a.xxyy + float4(0.0, 1.0, 0.0, 1.0);
  85. float4 k1 = perm(b.xyxy);
  86. float4 k2 = perm(k1.xyxy + b.zzww);
  87. float4 c = k2 + a.zzzz;
  88. float4 k3 = perm(c);
  89. float4 k4 = perm(c + 1.0);
  90. float4 o1 = frac(k3 * (1.0 / 41.0));
  91. float4 o2 = frac(k4 * (1.0 / 41.0));
  92. float4 o3 = o2 * d.z + o1 * (1.0 - d.z);
  93. float2 o4 = o3.yw * d.x + o3.xz * (1.0 - d.x);
  94. return o4.y * d.y + o4.x * (1.0 - d.y);
  95. }
  96. void main(in float2 pass_Position : TEXCOORD0,
  97. uniform float u_Time,
  98. out float4 out_FragColor : COLOR)
  99. {
  100. float2 xy = pass_Position;
  101. xy.y -= u_Time * 400.0;
  102. float z = u_Time * 2.0;
  103. float p = noise3d(float3(xy / 80.0, z)) / 2.0
  104. + noise3d(float3(xy / 40.0, z)) / 4.0
  105. + noise3d(float3(xy / 20.0, z)) / 8.0
  106. + noise3d(float3(xy / 10.0, z)) / 16.0;
  107. /* Scroll by adding [-.5,.5] */
  108. p -= pass_Position.y / 1440.0;
  109. p = max(p, 0.0);
  110. p = min(p, 1.0);
  111. float q = p * p * (3.0 - 2.0 * p);
  112. float r = q * q * (3.0 - 2.0 * q);
  113. out_FragColor = float4(min(q * 2.0, 1.0),
  114. max(r * 1.5 - 0.5, 0.0),
  115. max(q * 8.0 - 7.3, 0.0),
  116. 1.0);
  117. }