Skip to content
Snippets Groups Projects
Select Git revision
  • 4b0c9a8b157d876248989244ddb98cf4fe03469d
  • master default protected
2 results

Transform.cpp

Blame
  • Transform.cpp 1.91 KiB
    #include "Transform.h"
    
    Transform::Transform()
    {
    	translate = glm::vec3(0.0f, 0.0f, 0.0f);
    	rotate = glm::vec3(0.0f, 0.0f, 0.0f);
    	scale = glm::vec3(1.0f, 1.0f, 1.0f);
    
    	update_directional_vector();
    }
    
    glm::vec3 Transform::get_translate()
    {
    	return translate;
    }
    glm::vec3 Transform::get_rotate()
    {
    	return rotate;
    }
    glm::vec3 Transform::get_scale()
    {
    	return scale;
    }
    void Transform::set_translate(glm::vec3 _translate)
    {
    	translate = _translate;
    
    	update_directional_vector();
    }
    void Transform::set_rotate(glm::vec3 _rotate)
    {
    	rotate = _rotate;
    
    	update_directional_vector();
    }
    void Transform::set_scale(glm::vec3 _scale)
    {
    	scale = _scale;
    
    	update_directional_vector();
    }
    
    glm::mat4 Transform::get_model_matrix()
    {
    	glm::mat4 model = glm::mat4(1.0f);
    	model = glm::translate(model, translate);
    
    	model = glm::rotate(model, glm::radians(rotate.x), glm::vec3(1.0f, 0.0f, 0.0f));
    	model = glm::rotate(model, glm::radians(rotate.y), glm::vec3(0.0f, 1.0f, 0.0f));
    	model = glm::rotate(model, glm::radians(rotate.z), glm::vec3(0.0f, 0.0f, 1.0f));
    
    	model = glm::scale(model, scale);
    
    	return model;
    }
    
    void Transform::update_directional_vector()
    {
    	glm::vec3 _front;
    	_front.x = cos(glm::radians(rotate.y)) * cos(glm::radians(rotate.x));
    	_front.y = sin(glm::radians(rotate.x));
    	_front.z = sin(glm::radians(rotate.y)) * cos(glm::radians(rotate.x));
    
    	front = glm::normalize(_front);
    	right = glm::normalize(glm::cross(front, glm::vec3(0.0f, 1.0f, 0.0f)));
    	up = glm::normalize(glm::cross(right, front));
    }
    
    glm::vec3 Transform::get_front()
    {