Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

65 рядки
1.3 KiB

  1. [vert.glsl]
  2. #version 120
  3. attribute vec2 in_Position;
  4. varying vec4 pass_Position;
  5. void main(void)
  6. {
  7. pass_Position = vec4(0.5 * in_Position + 0.5, 0.0, 1.0);
  8. gl_Position = vec4(in_Position, 0.5, 1.0);
  9. }
  10. [frag.glsl]
  11. #version 120
  12. uniform sampler2D u_Texture;
  13. varying vec4 pass_Position;
  14. float rand(in vec2 p, in float v)
  15. {
  16. return fract(v * sin(dot(p, vec2(1298.9837, 7823.33145))));
  17. }
  18. void main(void)
  19. {
  20. vec2 t = pass_Position.xy;
  21. vec4 c0 = texture2D(u_Texture, t);
  22. float f = rand(pass_Position.xy, 12345.67);
  23. if (t.y > c0.x)
  24. {
  25. /* Sky */
  26. float val = min(t.y * 2.0, 1.0);
  27. if (f > 0.999)
  28. gl_FragColor = vec4(1.0);
  29. else
  30. gl_FragColor = vec4(0.4, t.y, val, 1.0);
  31. }
  32. else if (t.y > c0.x - 0.03)
  33. {
  34. /* Grass */
  35. if (f > 0.99)
  36. gl_FragColor = vec4(0.4, 0.7, 0.3, 1.0);
  37. else if (f > 0.9)
  38. gl_FragColor = vec4(0.3, 0.6, 0.2, 1.0);
  39. else
  40. gl_FragColor = vec4(0.2, 0.5, 0.1, 1.0);
  41. }
  42. else
  43. {
  44. /* Earth */
  45. if (f > 0.99)
  46. gl_FragColor = vec4(0.7, 0.4, 0.3, 1.0);
  47. else if (f > 0.9)
  48. gl_FragColor = vec4(0.6, 0.3, 0.2, 1.0);
  49. else
  50. gl_FragColor = vec4(0.5, 0.2, 0.1, 1.0);
  51. }
  52. }