63 lines
1.4 KiB
C++
63 lines
1.4 KiB
C++
|
#include "MatrixStack.h"
|
||
|
|
||
|
agl::MatrixStack::MatrixStack(bool loadWithIdentity) {
|
||
|
if(loadWithIdentity)
|
||
|
loadIdentity();
|
||
|
}
|
||
|
|
||
|
void agl::MatrixStack::multTopByMatrix(glm::mat4 mat) {
|
||
|
glm::mat4 top = stack.top();
|
||
|
stack.pop();
|
||
|
stack.push(mat * top);
|
||
|
}
|
||
|
|
||
|
void agl::MatrixStack::push() {
|
||
|
stack.push(stack.top());
|
||
|
}
|
||
|
|
||
|
void agl::MatrixStack::pop() {
|
||
|
if(!stack.empty())
|
||
|
stack.pop();
|
||
|
else
|
||
|
printf("no");
|
||
|
}
|
||
|
|
||
|
void agl::MatrixStack::translate(float x, float y, float z) {
|
||
|
multTopByMatrix(glm::translate(glm::mat4(1.0), glm::vec3(x,y,z)));
|
||
|
}
|
||
|
|
||
|
void agl::MatrixStack::translate(glm::vec3 vec) {
|
||
|
multTopByMatrix(glm::translate(glm::mat4(1.0), vec));
|
||
|
}
|
||
|
|
||
|
void agl::MatrixStack::scale(float x, float y, float z) {
|
||
|
multTopByMatrix(glm::scale(glm::mat4(1.0), glm::vec3(x,y,z)));
|
||
|
}
|
||
|
|
||
|
void agl::MatrixStack::scale(glm::vec3 vec) {
|
||
|
multTopByMatrix(glm::scale(glm::mat4(1.0), vec));
|
||
|
}
|
||
|
|
||
|
void agl::MatrixStack::rotatex(float ang) {
|
||
|
multTopByMatrix(glm::rotate(glm::mat4(1.0), ang, glm::vec3(1,0,0)));
|
||
|
}
|
||
|
|
||
|
void agl::MatrixStack::rotatey(float ang) {
|
||
|
multTopByMatrix(glm::rotate(glm::mat4(1.0), ang, glm::vec3(0,1,0)));
|
||
|
}
|
||
|
|
||
|
void agl::MatrixStack::rotatez(float ang) {
|
||
|
multTopByMatrix(glm::rotate(glm::mat4(1.0), ang, glm::vec3(0,0,1)));
|
||
|
}
|
||
|
|
||
|
void agl::MatrixStack::loadIdentity() {
|
||
|
stack.push(glm::mat4(1.0));
|
||
|
}
|
||
|
|
||
|
glm::mat4 agl::MatrixStack::top() {
|
||
|
if(!stack.empty())
|
||
|
return stack.top();
|
||
|
}
|
||
|
|
||
|
agl::MatrixStack::~MatrixStack() {
|
||
|
}
|