Advertisement
xerpi

MatricStack class

Jul 13th, 2013
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.54 KB | None | 0 0
  1. #ifndef _MATRIX_STACK_H_
  2. #define _MATRIX_STACK_H_
  3.  
  4. #include <stack>
  5. #include <glm/glm.hpp>
  6. #include <glm/gtc/matrix_transform.hpp>
  7. #include <glm/gtc/type_ptr.hpp>
  8.  
  9.  
  10. class MatrixStack
  11. {
  12. public:
  13.     MatrixStack() : current_matrix(glm::mat4(1.0f)) {}
  14.  
  15.     void Identity()
  16.     {
  17.         current_matrix = glm::mat4(1.0f);
  18.     }
  19.  
  20.     void Translate(const glm::vec3 &v)
  21.     {
  22.         current_matrix = glm::translate(current_matrix, v);
  23.     }
  24.  
  25.     void Rotate(const glm::vec3 &v, float angle)
  26.     {
  27.         current_matrix = glm::rotate(current_matrix, angle, v);
  28.     }
  29.  
  30.     void Rotate_X(float angle)
  31.     {
  32.         current_matrix = glm::rotate(current_matrix, angle, glm::vec3(1.0f, 0.0f, 0.0f));
  33.     }
  34.  
  35.     void Rotate_Y(float angle)
  36.     {
  37.         current_matrix = glm::rotate(current_matrix, angle, glm::vec3(0.0f, 1.0f, 0.0f));
  38.     }
  39.  
  40.     void Rotate_Z(float angle)
  41.     {
  42.         current_matrix = glm::rotate(current_matrix, angle, glm::vec3(0.0f, 0.0f, 1.0f));
  43.     }
  44.  
  45.     void Scale(const glm::vec3 &v)
  46.     {
  47.         current_matrix = glm::scale(current_matrix, v);
  48.     }
  49.  
  50.     const glm::mat4 &Top()
  51.     {
  52.         return current_matrix;
  53.     }
  54.  
  55.     void Push()
  56.     {
  57.         stack_matrix.push(current_matrix);
  58.     }
  59.  
  60.     void Pop()
  61.     {
  62.         current_matrix = stack_matrix.top();
  63.         stack_matrix.pop();
  64.     }
  65.  
  66.     float * const value_ptr()
  67.     {
  68.         return glm::value_ptr(current_matrix);
  69.     }
  70.  
  71. private:
  72.     glm::mat4 current_matrix;
  73.     std::stack<glm::mat4> stack_matrix;
  74. };
  75.  
  76.  
  77.  
  78. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement