diff --git a/LearnOpenGL/LearnOpenGL.vcxproj b/LearnOpenGL/LearnOpenGL.vcxproj index 9f0a07d16f4a679664c9659b08ec712d7c18fa24..132c65d2db104a015d4274d26e605a1709dc6fe7 100644 --- a/LearnOpenGL/LearnOpenGL.vcxproj +++ b/LearnOpenGL/LearnOpenGL.vcxproj @@ -127,6 +127,7 @@ <ClCompile Include="ResourceLoader.cpp" /> <ClCompile Include="OpenGLWrapper.cpp" /> <ClCompile Include="Source.cpp" /> + <ClCompile Include="Transform.cpp" /> </ItemGroup> <ItemGroup> <ClInclude Include="Camera.h" /> @@ -135,6 +136,7 @@ <ClInclude Include="ResourceLoader.h" /> <ClInclude Include="OpenGLWrapper.h" /> <ClInclude Include="ShaderType.h" /> + <ClInclude Include="Transform.h" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> diff --git a/LearnOpenGL/LearnOpenGL.vcxproj.filters b/LearnOpenGL/LearnOpenGL.vcxproj.filters index 535bccb84d589b059ba72fb1dc686450751ff88e..6ce7b3628dafb3e50cccf2004f73706bde59b2a1 100644 --- a/LearnOpenGL/LearnOpenGL.vcxproj.filters +++ b/LearnOpenGL/LearnOpenGL.vcxproj.filters @@ -30,6 +30,9 @@ <ClCompile Include="FileSystem.cpp"> <Filter>Source Files</Filter> </ClCompile> + <ClCompile Include="Transform.cpp"> + <Filter>Source Files</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="ShaderType.h"> @@ -50,5 +53,8 @@ <ClInclude Include="FileSystem.h"> <Filter>Header Files</Filter> </ClInclude> + <ClInclude Include="Transform.h"> + <Filter>Header Files</Filter> + </ClInclude> </ItemGroup> </Project> \ No newline at end of file diff --git a/LearnOpenGL/Transform.cpp b/LearnOpenGL/Transform.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f0adee3f5e8d1cd7dff4da4c6f071b78f3e4ed31 --- /dev/null +++ b/LearnOpenGL/Transform.cpp @@ -0,0 +1,96 @@ +#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() +{ + return front; +} + +glm::vec3 Transform::get_up() +{ + return up; +} + +glm::vec3 Transform::get_right() +{ + return right; +} + +void Transform::move(glm::vec3 _delta) +{ + translate += _delta; + + update_directional_vector(); +} + +void Transform::move(glm::vec3 _direction, glm::vec1 _velocity) +{ + translate += glm::vec3(_velocity *_direction.x, _velocity *_direction.y, _velocity *_direction.z); + + update_directional_vector(); +} \ No newline at end of file diff --git a/LearnOpenGL/Transform.h b/LearnOpenGL/Transform.h new file mode 100644 index 0000000000000000000000000000000000000000..94db5f387e1d033481bd194b222da5bd96bbf43a --- /dev/null +++ b/LearnOpenGL/Transform.h @@ -0,0 +1,41 @@ +#ifndef TRANSFORM_H +#define TRANSFORM_H + +#include <glm/glm.hpp> +#include <glm/gtc/matrix_transform.hpp> +#include <glm/gtc/type_ptr.hpp> + +class Transform +{ +private: + glm::vec3 translate; + glm::vec3 rotate; + glm::vec3 scale; + + glm::vec3 front; + glm::vec3 up; + glm::vec3 right; + + void update_directional_vector(); + +public: + Transform(); + + glm::vec3 get_translate(); + glm::vec3 get_rotate(); + glm::vec3 get_scale(); + void set_translate(glm::vec3 _translate); + void set_rotate(glm::vec3 _rotate); + void set_scale(glm::vec3 _scale); + + glm::vec3 get_front(); + glm::vec3 get_up(); + glm::vec3 get_right(); + + glm::mat4 get_model_matrix(); + + void move(glm::vec3 _delta); + void move(glm::vec3 _direction, glm::vec1 _velocity); +}; + +#endif \ No newline at end of file