From 4b0c9a8b157d876248989244ddb98cf4fe03469d Mon Sep 17 00:00:00 2001 From: Woohyung Choi <201421062@sce212.ajou.ac.kr> Date: Fri, 13 Dec 2019 04:50:28 +0900 Subject: [PATCH] =?UTF-8?q?Transform=20=EB=94=B0=EB=A1=9C=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LearnOpenGL/LearnOpenGL.vcxproj | 2 + LearnOpenGL/LearnOpenGL.vcxproj.filters | 6 ++ LearnOpenGL/Transform.cpp | 96 +++++++++++++++++++++++++ LearnOpenGL/Transform.h | 41 +++++++++++ 4 files changed, 145 insertions(+) create mode 100644 LearnOpenGL/Transform.cpp create mode 100644 LearnOpenGL/Transform.h diff --git a/LearnOpenGL/LearnOpenGL.vcxproj b/LearnOpenGL/LearnOpenGL.vcxproj index 9f0a07d..132c65d 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 535bccb..6ce7b36 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 0000000..f0adee3 --- /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 0000000..94db5f3 --- /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 -- GitLab