Open Source Tomb Raider Engine
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

Matrix.h 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. /*!
  2. * \file include/math/Matrix.h
  3. * \brief 3D Matrix
  4. *
  5. * \author Mongoose
  6. */
  7. #ifndef _MATH_MATRIX_H_
  8. #define _MATH_MATRIX_H_
  9. #include "math/math.h"
  10. #include "math/Quaternion.h"
  11. #include "math/Vector3d.h"
  12. /*!
  13. * \brief 3D Matrix
  14. *
  15. * Multidim map for row order encoding
  16. *
  17. * ///////////////////////////////////////////////
  18. * // 0,0 - 0; 0,1 - 1; 0,2 - 2; 0,3 - 3 //
  19. * // 1,0 - 4; 1,1 - 5; 1,2 - 6; 1,3 - 7 //
  20. * // 2,0 - 8; 2,1 - 9; 2,2 - 10; 2,3 - 11 //
  21. * // 3,0 - 12; 3,1 - 13; 3,2 - 14; 3,3 - 15 //
  22. * ///////////////////////////////////////////////
  23. *
  24. * Multidim map for column order encoding
  25. *
  26. * ///////////////////////////////////////////////
  27. * // 0,0 - 0; 0,1 - 4; 0,2 - 8; 0,3 - 12 //
  28. * // 1,0 - 1; 1,1 - 5; 1,2 - 9; 1,3 - 13 //
  29. * // 2,0 - 2; 2,1 - 6; 2,2 - 10; 2,3 - 14 //
  30. * // 3,0 - 3; 3,1 - 7; 3,2 - 11; 3,3 - 15 //
  31. * ///////////////////////////////////////////////
  32. */
  33. class Matrix {
  34. public:
  35. /*!
  36. * \brief Constructs an object of Matrix
  37. */
  38. Matrix();
  39. /*!
  40. * \brief Constructs an object of Matrix
  41. * \param mat Matrix as data source
  42. */
  43. Matrix(float mat[16]);
  44. /*!
  45. * \brief Constructs an object of Matrix
  46. * \param q Converts and assigns the Quaternion to the Matrix
  47. */
  48. Matrix(Quaternion &q);
  49. /*!
  50. * \brief Returns this matrix copy
  51. * \param mat target
  52. */
  53. void getMatrix(float mat[16]);
  54. /*!
  55. * \brief Returns this matrix transposed
  56. * \param mat target
  57. */
  58. void getTransposeMatrix(float mat[16]);
  59. /*!
  60. * \brief Returns this matrix inverted
  61. * \param mat target
  62. */
  63. bool getInvert(float mat[16]);
  64. /*!
  65. * \brief Multiplies two matrices
  66. * \param a first matrix
  67. * \param b second matrix
  68. * \returns resultant matrix
  69. */
  70. static Matrix multiply(const Matrix &a, const Matrix &b);
  71. /*!
  72. * \brief Multiplies v vector and this matrix
  73. * \param v vector
  74. * \param result where the result will be stored, may be same as v
  75. */
  76. void multiply4v(float v[4], float result[4]);
  77. /*!
  78. * \brief Multiplies v vector and this matrix
  79. * \param v vector
  80. * \param result where the result will be stored, may be same as v
  81. */
  82. void multiply3v(float v[3], float result[3]);
  83. /*!
  84. * \brief Prints matrix values to stdout
  85. */
  86. void print();
  87. /*!
  88. * \brief Is this matrix the identity matrix?
  89. * \returns true if it is identity, false otherwise
  90. */
  91. bool isIdentity();
  92. /*!
  93. * \brief Multiplies a and this matrix
  94. * \param a matrix to multiply with
  95. * \returns resultant matrix
  96. */
  97. Matrix operator *(const Matrix &a);
  98. /*!
  99. * \brief Multiply vector by this matrix
  100. * \param v Vector to multiply with
  101. * \returns resultant vector (mult)
  102. */
  103. Vector3d operator *(Vector3d v);
  104. /*!
  105. * \brief Sets to identity matrix
  106. */
  107. void setIdentity();
  108. /*!
  109. * \brief S et the matrix
  110. * \fixme dangerous, scary, boo!
  111. * \param mat new matrix
  112. */
  113. void setMatrix(float mat[16]);
  114. /*!
  115. * \brief Rotate object in 3D space
  116. * \param x x rotation in radians
  117. * \param y y rotation in radians
  118. * \param z z rotation in radians
  119. */
  120. void rotate(float x, float y, float z);
  121. /*!
  122. * \brief Rotate object in 3D space
  123. * \param xyz rotation in radians
  124. */
  125. void rotate(const float *xyz);
  126. /*!
  127. * \brief Scale object in 3D space
  128. * \param x x scaling
  129. * \param y y scaling
  130. * \param z z scaling
  131. */
  132. void scale(float x, float y, float z);
  133. /*!
  134. * \brief Scale object in 3D space
  135. * \param xyz scaling factors
  136. */
  137. void scale(const float *xyz);
  138. /*!
  139. * \brief Translate (move) object in 3D space
  140. * \param x x translation
  141. * \param y y translation
  142. * \param z z translation
  143. */
  144. void translate(float x, float y, float z);
  145. /*!
  146. * \brief Translate (move) object in 3D space
  147. * \param xyz translations
  148. */
  149. void translate(const float *xyz);
  150. /*!
  151. * \brief Transpose this matrix
  152. */
  153. void transpose();
  154. float mMatrix[16]; //!< Data model, moved public for faster external renderer feedback use
  155. private:
  156. /*!
  157. * \brief Copys value from source to dest
  158. * \param source source
  159. * \param dest destination
  160. */
  161. static void copy(float source[16], float dest[16]);
  162. /*!
  163. * \brief Multiplies matrices a and b. Neither a or b is also the result.
  164. * \param a first matrix
  165. * \param b second matrix
  166. * \param result wil be set to resultant matrix value
  167. */
  168. static void multiply(const float a[16], const float b[16], float result[16]);
  169. };
  170. #endif