wave.hlsl 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. cbuffer constants : register(b0) {
  2. float4x4 mvp;
  3. float seconds;
  4. float2 size;
  5. float freqX;
  6. float freqY;
  7. float ampX;
  8. float ampY;
  9. float speedX;
  10. float speedY;
  11. }
  12. struct vs_in {
  13. float2 position : POS;
  14. float2 uv : UV;
  15. float4 color : COL;
  16. };
  17. struct vs_out {
  18. float4 position : SV_POSITION;
  19. float2 uv : UV;
  20. float4 color : COL;
  21. };
  22. Texture2D tex : register(t0);
  23. SamplerState smp : register(s0);
  24. vs_out vs_main(vs_in input) {
  25. vs_out output;
  26. output.position = mul(mvp, float4(input.position, 0, 1.0f));
  27. output.uv = input.uv;
  28. output.color = input.color;
  29. return output;
  30. }
  31. float4 ps_main(vs_out input) : SV_TARGET {
  32. float pixelWidth = 1.0/size.x;
  33. float pixelHeight = 1.0/size.y;
  34. float aspect = pixelHeight/pixelWidth;
  35. float boxLeft = 0.0;
  36. float boxTop = 0.0;
  37. float2 p = input.uv;
  38. p.x += cos((input.uv.y - boxTop)*freqX/(pixelWidth*750.0) + (seconds*speedX))*ampX*pixelWidth;
  39. p.y += sin((input.uv.x - boxLeft)*freqY*aspect/(pixelHeight*750.0) + (seconds*speedY))*ampY*pixelHeight;
  40. float4 c = tex.Sample(smp, p);
  41. return c * input.color;
  42. }