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.

173 lines
4.1 KiB

5 years ago
  1. ///////////////////////////////////////////////////////////////////////////////////////////////////
  2. // OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)
  3. ///////////////////////////////////////////////////////////////////////////////////////////////////
  4. // Created : 2006-04-19
  5. // Updated : 2009-02-19
  6. // Licence : This source is under MIT License
  7. // File : glm/gtx/matrix_major_storage.inl
  8. ///////////////////////////////////////////////////////////////////////////////////////////////////
  9. namespace glm
  10. {
  11. template <typename T>
  12. GLM_FUNC_QUALIFIER detail::tmat2x2<T> rowMajor2
  13. (
  14. detail::tvec2<T> const & v1,
  15. detail::tvec2<T> const & v2
  16. )
  17. {
  18. detail::tmat2x2<T> Result;
  19. Result[0][0] = v1.x;
  20. Result[1][0] = v1.y;
  21. Result[0][1] = v2.x;
  22. Result[1][1] = v2.y;
  23. return Result;
  24. }
  25. template <typename T>
  26. GLM_FUNC_QUALIFIER detail::tmat2x2<T> rowMajor2(
  27. const detail::tmat2x2<T>& m)
  28. {
  29. detail::tmat2x2<T> Result;
  30. Result[0][0] = m[0][0];
  31. Result[0][1] = m[1][0];
  32. Result[1][0] = m[0][1];
  33. Result[1][1] = m[1][1];
  34. return Result;
  35. }
  36. template <typename T>
  37. GLM_FUNC_QUALIFIER detail::tmat3x3<T> rowMajor3(
  38. const detail::tvec3<T>& v1,
  39. const detail::tvec3<T>& v2,
  40. const detail::tvec3<T>& v3)
  41. {
  42. detail::tmat3x3<T> Result;
  43. Result[0][0] = v1.x;
  44. Result[1][0] = v1.y;
  45. Result[2][0] = v1.z;
  46. Result[0][1] = v2.x;
  47. Result[1][1] = v2.y;
  48. Result[2][1] = v2.z;
  49. Result[0][2] = v3.x;
  50. Result[1][2] = v3.y;
  51. Result[2][2] = v3.z;
  52. return Result;
  53. }
  54. template <typename T>
  55. GLM_FUNC_QUALIFIER detail::tmat3x3<T> rowMajor3(
  56. const detail::tmat3x3<T>& m)
  57. {
  58. detail::tmat3x3<T> Result;
  59. Result[0][0] = m[0][0];
  60. Result[0][1] = m[1][0];
  61. Result[0][2] = m[2][0];
  62. Result[1][0] = m[0][1];
  63. Result[1][1] = m[1][1];
  64. Result[1][2] = m[2][1];
  65. Result[2][0] = m[0][2];
  66. Result[2][1] = m[1][2];
  67. Result[2][2] = m[2][2];
  68. return Result;
  69. }
  70. template <typename T>
  71. GLM_FUNC_QUALIFIER detail::tmat4x4<T> rowMajor4(
  72. const detail::tvec4<T>& v1,
  73. const detail::tvec4<T>& v2,
  74. const detail::tvec4<T>& v3,
  75. const detail::tvec4<T>& v4)
  76. {
  77. detail::tmat4x4<T> Result;
  78. Result[0][0] = v1.x;
  79. Result[1][0] = v1.y;
  80. Result[2][0] = v1.z;
  81. Result[3][0] = v1.w;
  82. Result[0][1] = v2.x;
  83. Result[1][1] = v2.y;
  84. Result[2][1] = v2.z;
  85. Result[3][1] = v2.w;
  86. Result[0][2] = v3.x;
  87. Result[1][2] = v3.y;
  88. Result[2][2] = v3.z;
  89. Result[3][2] = v3.w;
  90. Result[0][3] = v4.x;
  91. Result[1][3] = v4.y;
  92. Result[2][3] = v4.z;
  93. Result[3][3] = v4.w;
  94. return Result;
  95. }
  96. template <typename T>
  97. GLM_FUNC_QUALIFIER detail::tmat4x4<T> rowMajor4(
  98. const detail::tmat4x4<T>& m)
  99. {
  100. detail::tmat4x4<T> Result;
  101. Result[0][0] = m[0][0];
  102. Result[0][1] = m[1][0];
  103. Result[0][2] = m[2][0];
  104. Result[0][3] = m[3][0];
  105. Result[1][0] = m[0][1];
  106. Result[1][1] = m[1][1];
  107. Result[1][2] = m[2][1];
  108. Result[1][3] = m[3][1];
  109. Result[2][0] = m[0][2];
  110. Result[2][1] = m[1][2];
  111. Result[2][2] = m[2][2];
  112. Result[2][3] = m[3][2];
  113. Result[3][0] = m[0][3];
  114. Result[3][1] = m[1][3];
  115. Result[3][2] = m[2][3];
  116. Result[3][3] = m[3][3];
  117. return Result;
  118. }
  119. template <typename T>
  120. GLM_FUNC_QUALIFIER detail::tmat2x2<T> colMajor2(
  121. const detail::tvec2<T>& v1,
  122. const detail::tvec2<T>& v2)
  123. {
  124. return detail::tmat2x2<T>(v1, v2);
  125. }
  126. template <typename T>
  127. GLM_FUNC_QUALIFIER detail::tmat2x2<T> colMajor2(
  128. const detail::tmat2x2<T>& m)
  129. {
  130. return detail::tmat2x2<T>(m);
  131. }
  132. template <typename T>
  133. GLM_FUNC_QUALIFIER detail::tmat3x3<T> colMajor3(
  134. const detail::tvec3<T>& v1,
  135. const detail::tvec3<T>& v2,
  136. const detail::tvec3<T>& v3)
  137. {
  138. return detail::tmat3x3<T>(v1, v2, v3);
  139. }
  140. template <typename T>
  141. GLM_FUNC_QUALIFIER detail::tmat3x3<T> colMajor3(
  142. const detail::tmat3x3<T>& m)
  143. {
  144. return detail::tmat3x3<T>(m);
  145. }
  146. template <typename T>
  147. GLM_FUNC_QUALIFIER detail::tmat4x4<T> colMajor4(
  148. const detail::tvec4<T>& v1,
  149. const detail::tvec4<T>& v2,
  150. const detail::tvec4<T>& v3,
  151. const detail::tvec4<T>& v4)
  152. {
  153. return detail::tmat4x4<T>(v1, v2, v3, v4);
  154. }
  155. template <typename T>
  156. GLM_FUNC_QUALIFIER detail::tmat4x4<T> colMajor4(
  157. const detail::tmat4x4<T>& m)
  158. {
  159. return detail::tmat4x4<T>(m);
  160. }
  161. }//namespace glm