Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef _MATRIX_STACK_H_
- #define _MATRIX_STACK_H_
- #include <stack>
- #include <glm/glm.hpp>
- #include <glm/gtc/matrix_transform.hpp>
- #include <glm/gtc/type_ptr.hpp>
- class MatrixStack
- {
- public:
- MatrixStack() : current_matrix(glm::mat4(1.0f)) {}
- void Identity()
- {
- current_matrix = glm::mat4(1.0f);
- }
- void Translate(const glm::vec3 &v)
- {
- current_matrix = glm::translate(current_matrix, v);
- }
- void Rotate(const glm::vec3 &v, float angle)
- {
- current_matrix = glm::rotate(current_matrix, angle, v);
- }
- void Rotate_X(float angle)
- {
- current_matrix = glm::rotate(current_matrix, angle, glm::vec3(1.0f, 0.0f, 0.0f));
- }
- void Rotate_Y(float angle)
- {
- current_matrix = glm::rotate(current_matrix, angle, glm::vec3(0.0f, 1.0f, 0.0f));
- }
- void Rotate_Z(float angle)
- {
- current_matrix = glm::rotate(current_matrix, angle, glm::vec3(0.0f, 0.0f, 1.0f));
- }
- void Scale(const glm::vec3 &v)
- {
- current_matrix = glm::scale(current_matrix, v);
- }
- const glm::mat4 &Top()
- {
- return current_matrix;
- }
- void Push()
- {
- stack_matrix.push(current_matrix);
- }
- void Pop()
- {
- current_matrix = stack_matrix.top();
- stack_matrix.pop();
- }
- float * const value_ptr()
- {
- return glm::value_ptr(current_matrix);
- }
- private:
- glm::mat4 current_matrix;
- std::stack<glm::mat4> stack_matrix;
- };
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement