common.glsl 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. // #define PI 3.14159265359
  2. float saturate(float x) {
  3. return clamp(x, 0.0, 1.0);
  4. }
  5. vec2 saturate2(vec2 x) {
  6. return clamp(x, vec2(0.0), vec2(1.0));
  7. }
  8. vec3 saturate3(vec3 x) {
  9. return clamp(x, vec3(0.0), vec3(1.0));
  10. }
  11. float linearstep(float minValue, float maxValue, float v) {
  12. return clamp((v - minValue) / (maxValue - minValue), 0.0, 1.0);
  13. }
  14. float inverseLerp(float minValue, float maxValue, float v) {
  15. return (v - minValue) / (maxValue - minValue);
  16. }
  17. float inverseLerpSat(float minValue, float maxValue, float v) {
  18. return saturate((v - minValue) / (maxValue - minValue));
  19. }
  20. float remap(float v, float inMin, float inMax, float outMin, float outMax) {
  21. float t = inverseLerp(inMin, inMax, v);
  22. return mix(outMin, outMax, t);
  23. }
  24. vec3 LINEAR_TO_GAMMA(vec3 value) {
  25. vec3 colour = pow(value, vec3(1.0 / 2.2));
  26. return colour;
  27. }
  28. vec3 GAMMA_TO_LINEAR(vec3 value) {
  29. vec3 colour = pow(value, vec3(2.2));
  30. return colour;
  31. }
  32. float easeOut(float x, float t) {
  33. return 1.0 - pow(1.0 - x, t);
  34. }
  35. float easeIn(float x, float t) {
  36. return pow(x, t);
  37. }
  38. mat2 rotate2D(float angle) {
  39. float s = sin(angle);
  40. float c = cos(angle);
  41. return mat2(c, -s, s, c);
  42. }
  43. mat3 rotateX(float theta) {
  44. float c = cos(theta);
  45. float s = sin(theta);
  46. return mat3(
  47. vec3(1, 0, 0),
  48. vec3(0, c, -s),
  49. vec3(0, s, c)
  50. );
  51. }
  52. // Rotation matrix around the Y axis.
  53. mat3 rotateY(float theta) {
  54. float c = cos(theta);
  55. float s = sin(theta);
  56. return mat3(
  57. vec3(c, 0, s),
  58. vec3(0, 1, 0),
  59. vec3(-s, 0, c)
  60. );
  61. }
  62. // Rotation matrix around the Z axis.
  63. mat3 rotateZ(float theta) {
  64. float c = cos(theta);
  65. float s = sin(theta);
  66. return mat3(
  67. vec3(c, -s, 0),
  68. vec3(s, c, 0),
  69. vec3(0, 0, 1)
  70. );
  71. }
  72. mat3 rotateAxis(vec3 axis, float angle) {
  73. axis = normalize(axis);
  74. float s = sin(angle);
  75. float c = cos(angle);
  76. float oc = 1.0 - c;
  77. return mat3(
  78. oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s,
  79. oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s,
  80. oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c
  81. );
  82. }