Collection of DPF-based plugins for packaging
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.

127 lines
3.5KB

  1. /// @ref gtx_transform2
  2. /// @file glm/gtx/transform2.inl
  3. namespace glm
  4. {
  5. template<typename T, qualifier Q>
  6. GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX2D(mat<3, 3, T, Q> const& m, T s)
  7. {
  8. mat<3, 3, T, Q> r(1);
  9. r[1][0] = s;
  10. return m * r;
  11. }
  12. template<typename T, qualifier Q>
  13. GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY2D(mat<3, 3, T, Q> const& m, T s)
  14. {
  15. mat<3, 3, T, Q> r(1);
  16. r[0][1] = s;
  17. return m * r;
  18. }
  19. template<typename T, qualifier Q>
  20. GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearX3D(mat<4, 4, T, Q> const& m, T s, T t)
  21. {
  22. mat<4, 4, T, Q> r(1);
  23. r[0][1] = s;
  24. r[0][2] = t;
  25. return m * r;
  26. }
  27. template<typename T, qualifier Q>
  28. GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearY3D(mat<4, 4, T, Q> const& m, T s, T t)
  29. {
  30. mat<4, 4, T, Q> r(1);
  31. r[1][0] = s;
  32. r[1][2] = t;
  33. return m * r;
  34. }
  35. template<typename T, qualifier Q>
  36. GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearZ3D(mat<4, 4, T, Q> const& m, T s, T t)
  37. {
  38. mat<4, 4, T, Q> r(1);
  39. r[2][0] = s;
  40. r[2][1] = t;
  41. return m * r;
  42. }
  43. template<typename T, qualifier Q>
  44. GLM_FUNC_QUALIFIER mat<3, 3, T, Q> reflect2D(mat<3, 3, T, Q> const& m, vec<3, T, Q> const& normal)
  45. {
  46. mat<3, 3, T, Q> r(static_cast<T>(1));
  47. r[0][0] = static_cast<T>(1) - static_cast<T>(2) * normal.x * normal.x;
  48. r[0][1] = -static_cast<T>(2) * normal.x * normal.y;
  49. r[1][0] = -static_cast<T>(2) * normal.x * normal.y;
  50. r[1][1] = static_cast<T>(1) - static_cast<T>(2) * normal.y * normal.y;
  51. return m * r;
  52. }
  53. template<typename T, qualifier Q>
  54. GLM_FUNC_QUALIFIER mat<4, 4, T, Q> reflect3D(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& normal)
  55. {
  56. mat<4, 4, T, Q> r(static_cast<T>(1));
  57. r[0][0] = static_cast<T>(1) - static_cast<T>(2) * normal.x * normal.x;
  58. r[0][1] = -static_cast<T>(2) * normal.x * normal.y;
  59. r[0][2] = -static_cast<T>(2) * normal.x * normal.z;
  60. r[1][0] = -static_cast<T>(2) * normal.x * normal.y;
  61. r[1][1] = static_cast<T>(1) - static_cast<T>(2) * normal.y * normal.y;
  62. r[1][2] = -static_cast<T>(2) * normal.y * normal.z;
  63. r[2][0] = -static_cast<T>(2) * normal.x * normal.z;
  64. r[2][1] = -static_cast<T>(2) * normal.y * normal.z;
  65. r[2][2] = static_cast<T>(1) - static_cast<T>(2) * normal.z * normal.z;
  66. return m * r;
  67. }
  68. template<typename T, qualifier Q>
  69. GLM_FUNC_QUALIFIER mat<3, 3, T, Q> proj2D(
  70. const mat<3, 3, T, Q>& m,
  71. const vec<3, T, Q>& normal)
  72. {
  73. mat<3, 3, T, Q> r(static_cast<T>(1));
  74. r[0][0] = static_cast<T>(1) - normal.x * normal.x;
  75. r[0][1] = - normal.x * normal.y;
  76. r[1][0] = - normal.x * normal.y;
  77. r[1][1] = static_cast<T>(1) - normal.y * normal.y;
  78. return m * r;
  79. }
  80. template<typename T, qualifier Q>
  81. GLM_FUNC_QUALIFIER mat<4, 4, T, Q> proj3D(
  82. const mat<4, 4, T, Q>& m,
  83. const vec<3, T, Q>& normal)
  84. {
  85. mat<4, 4, T, Q> r(static_cast<T>(1));
  86. r[0][0] = static_cast<T>(1) - normal.x * normal.x;
  87. r[0][1] = - normal.x * normal.y;
  88. r[0][2] = - normal.x * normal.z;
  89. r[1][0] = - normal.x * normal.y;
  90. r[1][1] = static_cast<T>(1) - normal.y * normal.y;
  91. r[1][2] = - normal.y * normal.z;
  92. r[2][0] = - normal.x * normal.z;
  93. r[2][1] = - normal.y * normal.z;
  94. r[2][2] = static_cast<T>(1) - normal.z * normal.z;
  95. return m * r;
  96. }
  97. template<typename T, qualifier Q>
  98. GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scaleBias(T scale, T bias)
  99. {
  100. mat<4, 4, T, Q> result;
  101. result[3] = vec<4, T, Q>(vec<3, T, Q>(bias), static_cast<T>(1));
  102. result[0][0] = scale;
  103. result[1][1] = scale;
  104. result[2][2] = scale;
  105. return result;
  106. }
  107. template<typename T, qualifier Q>
  108. GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scaleBias(mat<4, 4, T, Q> const& m, T scale, T bias)
  109. {
  110. return m * scaleBias(scale, bias);
  111. }
  112. }//namespace glm