From a924b4dd302e5ab9d7379b4fb44e2de3d6dc5498 Mon Sep 17 00:00:00 2001
From: Linloir <3145078758@qq.com>
Date: Sun, 18 Dec 2022 13:55:17 +0800
Subject: [PATCH] [CORE][ADD] Ray class
---
FinalProject/FinalProject.vcxproj | 3 +++
FinalProject/FinalProject.vcxproj.filters | 9 +++++++++
FinalProject/ray.cpp | 14 ++++++++++++++
FinalProject/ray.h | 23 +++++++++++++++++++++++
4 files changed, 49 insertions(+)
create mode 100644 FinalProject/ray.cpp
create mode 100644 FinalProject/ray.h
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