No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 

143 líneas
3.9 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 noise3d(vec3 p1, vec3 p2, vec3 p3, vec3 p4)
  12. {
  13. vec3 q = vec3(12.3453, -54.3353432, 34.3490432);
  14. vec4 s = vec4(dot(p1, q), dot(p2, q), dot(p3, q), dot(p4, q));
  15. return fract(sin(54.343909 + s) * 8433.235443);
  16. }
  17. float perlin3d(vec3 p)
  18. {
  19. mat3 r = mat3(0.36, 0.48, -0.8, -0.8, 0.60, 0.0, 0.48, 0.64, 0.60);
  20. p = r * p;
  21. vec3 a = floor(p);
  22. vec3 d = p - a;
  23. d = d * d * (3.0 - 2.0 * d);
  24. vec4 o1 = noise3d(a,
  25. a + vec3(0.0, 1.0, 0.0),
  26. a + vec3(0.0, 0.0, 1.0),
  27. a + vec3(0.0, 1.0, 1.0));
  28. vec4 o2 = noise3d(a + vec3(1.0, 0.0, 0.0),
  29. a + vec3(1.0, 1.0, 0.0),
  30. a + vec3(1.0, 0.0, 1.0),
  31. a + vec3(1.0, 1.0, 1.0));
  32. vec4 o3 = o2 * d.x + o1 * (1.0 - d.x);
  33. vec2 o4 = o3.yw * d.y + o3.xz * (1.0 - d.y);
  34. return o4.y * d.z + o4.x * (1.0 - d.z);
  35. }
  36. void main(void)
  37. {
  38. vec2 xy = gl_FragCoord.xy * 2.0;
  39. xy.y -= u_Time * 400.0;
  40. float z = u_Time * 2.0;
  41. float p = perlin3d(vec3(xy / 80.0, z + 1.5)) / 2.0
  42. + perlin3d(vec3(xy / 40.0, z + 0.3)) / 4.0
  43. + perlin3d(vec3(xy / 20.0, z + 3.3)) / 8.0
  44. + perlin3d(vec3(xy / 10.0, z + 2.0)) / 16.0;
  45. /* Scroll by adding [-.5,.5] */
  46. p -= gl_FragCoord.y / 720.0 - 0.5;
  47. p = max(p, 0.0);
  48. p = min(p, 1.0);
  49. float q = p * p * (3.0 - 2.0 * p);
  50. float r = q * q * (3.0 - 2.0 * q);
  51. gl_FragColor = vec4(min(q * 2.0, 1.0),
  52. max(r * 1.5 - 0.5, 0.0),
  53. max(q * 8.0 - 7.3, 0.0),
  54. 1.0);
  55. }
  56. -- HLSL.Vert --
  57. void main(float2 in_Position : POSITION,
  58. uniform float2 u_WinSize,
  59. out float4 out_Position : POSITION,
  60. out float2 pass_Position : TEXCOORD0)
  61. {
  62. //pass_Position = in_Position * u_WinSize;
  63. pass_Position = in_Position * float2(1280.0, 720.0);
  64. out_Position = float4(in_Position, 0.0, 1.0);
  65. }
  66. -- HLSL.Frag --
  67. float4 noise3d(float3 p1, float3 p2, float3 p3, float3 p4)
  68. {
  69. float3 q = float3(12.3453, -54.3353432, 34.3490432);
  70. float4 s = float4(dot(p1, q), dot(p2, q), dot(p3, q), dot(p4, q));
  71. return frac(sin(54.343909 + s) * 8433.235443);
  72. }
  73. float perlin3d(float3 p)
  74. {
  75. float3x3 r = float3x3(0.36, 0.48, -0.8, -0.8, 0.60, 0.0, 0.48, 0.64, 0.60);
  76. p = mul(r, p);
  77. float3 a = floor(p);
  78. float3 d = p - a;
  79. d = d * d * (3.0 - 2.0 * d);
  80. float4 o1 = noise3d(a,
  81. a + float3(0.0, 1.0, 0.0),
  82. a + float3(0.0, 0.0, 1.0),
  83. a + float3(0.0, 1.0, 1.0));
  84. float4 o2 = noise3d(a + float3(1.0, 0.0, 0.0),
  85. a + float3(1.0, 1.0, 0.0),
  86. a + float3(1.0, 0.0, 1.0),
  87. a + float3(1.0, 1.0, 1.0));
  88. float4 o3 = o2 * d.x + o1 * (1.0 - d.x);
  89. float2 o4 = o3.yw * d.y + o3.xz * (1.0 - d.y);
  90. return o4.y * d.z + o4.x * (1.0 - d.z);
  91. }
  92. void main(in float2 pass_Position : TEXCOORD0,
  93. uniform float u_Time,
  94. out float4 out_FragColor : COLOR)
  95. {
  96. float2 xy = pass_Position;
  97. xy.y -= u_Time * 400.0;
  98. float z = u_Time * 2.0;
  99. float p = perlin3d(float3(xy / 80.0, z + 1.5)) / 2.0
  100. + perlin3d(float3(xy / 40.0, z + 0.3)) / 4.0
  101. + perlin3d(float3(xy / 20.0, z + 3.3)) / 8.0
  102. + perlin3d(float3(xy / 10.0, z + 2.0)) / 16.0;
  103. /* Scroll by adding [-.5,.5] */
  104. p -= pass_Position.y / 1440.0;
  105. p = max(p, 0.0);
  106. p = min(p, 1.0);
  107. float q = p * p * (3.0 - 2.0 * p);
  108. float r = q * q * (3.0 - 2.0 * q);
  109. out_FragColor = float4(min(q * 2.0, 1.0),
  110. max(r * 1.5 - 0.5, 0.0),
  111. max(q * 8.0 - 7.3, 0.0),
  112. 1.0);
  113. }