diff --git a/FinalProject/FinalProject.vcxproj b/FinalProject/FinalProject.vcxproj index e72bef0..610a83d 100644 --- a/FinalProject/FinalProject.vcxproj +++ b/FinalProject/FinalProject.vcxproj @@ -119,6 +119,7 @@ + @@ -140,6 +141,7 @@ + @@ -154,6 +156,7 @@ + diff --git a/FinalProject/FinalProject.vcxproj.filters b/FinalProject/FinalProject.vcxproj.filters index 345923c..902aa83 100644 --- a/FinalProject/FinalProject.vcxproj.filters +++ b/FinalProject/FinalProject.vcxproj.filters @@ -171,6 +171,9 @@ Source Files\OpenGL Abstractions + + Source Files\OpenGL Abstractions + @@ -218,6 +221,12 @@ Header Files\OpenGL Abstractions + + Header Files\OpenGL Abstractions + + + Header Files\OpenGL Abstractions + diff --git a/FinalProject/ray.cpp b/FinalProject/ray.cpp new file mode 100644 index 0000000..ffef4ad --- /dev/null +++ b/FinalProject/ray.cpp @@ -0,0 +1,14 @@ +#include "ray.h" + +Ray Ray::toLocalSpace(glm::mat4 modelMatrix) { + // The model matrix is the matrix that transforms local space to world space + // Therefore the inverse of the model matrix transforms world space to local space + glm::mat4 inversedModelMatrix = glm::inverse(modelMatrix); + + // Transform the origin and direction of the ray to local space + glm::vec4 localOrigin = inversedModelMatrix * glm::vec4(_origin, 1.0f); + glm::vec4 localDirection = inversedModelMatrix * glm::vec4(_direction, 0.0f); + + // Return the new ray + return Ray(glm::vec3(localOrigin), glm::vec3(localDirection)); +} \ No newline at end of file diff --git a/FinalProject/ray.h b/FinalProject/ray.h new file mode 100644 index 0000000..a0c2ab7 --- /dev/null +++ b/FinalProject/ray.h @@ -0,0 +1,23 @@ +#pragma once + +#include + +class Ray { +private: + glm::vec3 _origin; + glm::vec3 _direction; + +public: + Ray() {} + Ray(glm::vec3 origin, glm::vec3 direction) : _origin(origin), _direction(direction) {} + +public: + inline glm::vec3 origin() const { return _origin; } + inline glm::vec3 direction() const { return _direction; } + + inline void setOrigin(glm::vec3 origin) { _origin = origin; } + inline void setDirection(glm::vec3 direction) { _direction = direction; } + +public: + Ray toLocalSpace(glm::mat4 modelMatrix); +}; \ No newline at end of file