aboutsummaryrefslogtreecommitdiff
path: root/src/4dvecops
diff options
context:
space:
mode:
authorsotech117 <michael_foiani@brown.edu>2023-12-08 15:03:20 -0500
committersotech117 <michael_foiani@brown.edu>2023-12-08 15:03:24 -0500
commit480c22ce9b50caad259e254d0127e99294b4c6ab (patch)
tree2edd19cfbf756aef0f9b2f1060ca458a5c27cd4f /src/4dvecops
parent3c39ba9ce8710332c87e713d0881fcc7a510b8f2 (diff)
rename src directory for vec4ops
Diffstat (limited to 'src/4dvecops')
-rw-r--r--src/4dvecops/rotations4d.cpp74
-rw-r--r--src/4dvecops/transform4d.cpp18
-rw-r--r--src/4dvecops/vec4ops.cpp64
-rw-r--r--src/4dvecops/vec4ops.h37
4 files changed, 0 insertions, 193 deletions
diff --git a/src/4dvecops/rotations4d.cpp b/src/4dvecops/rotations4d.cpp
deleted file mode 100644
index 4943c7f..0000000
--- a/src/4dvecops/rotations4d.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-#include "raytracer/raytracer.h"
-#include "4dvecops/vec4ops.h"
-
-glm::mat4 Vec4Ops::getRotationMatrix4XY(
- float angleRadians) {
- glm::mat4 result;
- result[0][0] = cos(angleRadians);
- result[0][1] = -sin(angleRadians);
- result[1][0] = sin(angleRadians);
- result[1][1] = cos(angleRadians);
- result[2][2] = 1;
- result[3][3] = 1;
- return result;
-}
-
-glm::mat4 Vec4Ops::getRotationMatrix4YZ(
- float angleRadians) {
- glm::mat4 result;
- result[1][1] = cos(angleRadians);
- result[1][2] = -sin(angleRadians);
- result[2][1] = sin(angleRadians);
- result[2][2] = cos(angleRadians);
- result[0][0] = 1;
- result[3][3] = 1;
- return result;
-}
-
-glm::mat4 Vec4Ops::getRotationMatrix4ZX(
- float angleRadians) {
- glm::mat4 result;
- result[2][2] = cos(angleRadians);
- result[2][0] = -sin(angleRadians);
- result[0][2] = sin(angleRadians);
- result[0][0] = cos(angleRadians);
- result[1][1] = 1;
- result[3][3] = 1;
- return result;
-}
-
-glm::mat4 Vec4Ops::getRotationMatrix4XW(
- float angleRadians) {
- glm::mat4 result;
- result[0][0] = cos(angleRadians);
- result[0][3] = -sin(angleRadians);
- result[3][0] = sin(angleRadians);
- result[3][3] = cos(angleRadians);
- result[1][1] = 1;
- result[2][2] = 1;
- return result;
-}
-
-glm::mat4 Vec4Ops::getRotationMatrix4YW(
- float angleRadians) {
- glm::mat4 result;
- result[1][1] = cos(angleRadians);
- result[1][3] = -sin(angleRadians);
- result[3][1] = sin(angleRadians);
- result[3][3] = cos(angleRadians);
- result[0][0] = 1;
- result[2][2] = 1;
- return result;
-}
-
-glm::mat4 Vec4Ops::getRotationMatrix4ZW(
- float angleRadians) {
- glm::mat4 result;
- result[2][2] = cos(angleRadians);
- result[2][3] = -sin(angleRadians);
- result[3][2] = sin(angleRadians);
- result[3][3] = cos(angleRadians);
- result[0][0] = 1;
- result[1][1] = 1;
- return result;
-} \ No newline at end of file
diff --git a/src/4dvecops/transform4d.cpp b/src/4dvecops/transform4d.cpp
deleted file mode 100644
index 5cc51f3..0000000
--- a/src/4dvecops/transform4d.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "vec4ops.h"
-
-// this is used to transform a 4d point by a 4d matrix and its associated translation
-// this is motivated by the fact that glm does not support 5d matrices, so we cannot define a mat5 to encapsulate both the rotation and translation in one matrix
-// therefore, we break the 5d transformation into a 4d rotation and a 4d translation
-glm::vec4 Vec4Ops::transformPoint4(glm::vec4 point4, glm::mat4 transformDirectionMatrix, glm::vec4 translationPointVector) {
- // do the translation then direction
- point4 = transformDirectionMatrix * point4;
- point4 += translationPointVector;
- return point4;
-}
-
-glm::vec4 Vec4Ops::inverseTransformPoint4(glm::vec4 point4, glm::mat4 inverseTransformDirectionMatrix, glm::vec4 inverseTranslationPointVector) {
- // do the direction then translation
- point4 += inverseTranslationPointVector;
- point4 = inverseTranslationPointVector * point4;
- return point4;
-} \ No newline at end of file
diff --git a/src/4dvecops/vec4ops.cpp b/src/4dvecops/vec4ops.cpp
deleted file mode 100644
index 80cebaf..0000000
--- a/src/4dvecops/vec4ops.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-#include <stdexcept>
-#include "vec4ops.h"
-
-// vector operations on 4d vectors,
-// reference: https://hollasch.github.io/ray4/Four-Space_Visualization_of_4D_Objects.html#chapter5
-
-glm::vec4 Vec4Ops::cross4(
- glm::vec4 u,
- glm::vec4 v,
- glm::vec4 w) {
- float a = (v[0] * w[1]) - (v[1] * w[0]);
- float b = (v[0] * w[2]) - (v[2] * w[0]);
- float c = (v[0] * w[3]) - (v[3] * w[0]);
- float d = (v[1] * w[2]) - (v[2] * w[1]);
- float e = (v[1] * w[3]) - (v[3] * w[1]);
- float f = (v[2] * w[3]) - (v[3] * w[2]);
-
- glm::vec4 result;
- result[0] = (u[1] * f) - (u[2] * e) + (u[3] * d);
- result[1] = -(u[0] * f) + (u[2] * c) - (u[3] * b);
- result[2] = (u[0] * e) - (u[1] * c) + (u[3] * a);
- result[3] = -(u[0] * d) + (u[1] * b) - (u[2] * a);
-
- return result;
-}
-
-glm::vec4 Vec4Ops::dot4(
- glm::vec4 u,
- glm::vec4 v) {
- return {u[0] * v[0], u[1] * v[1], u[2] * v[2], u[3] * v[3]};
-}
-
-glm::mat4 Vec4Ops::getViewMatrix4(
- glm::vec4 fromPoint,
- glm::vec4 toPoint,
- glm::vec4 upVector,
- glm::vec4 lookVector) {
-
- // calculate e3 basis vector, the transformation col of view matrix
- if (glm::distance(fromPoint, toPoint) < 0.0001f) {
- throw std::runtime_error("fromPoint and toPoint are the same");
- }
- glm::vec4 e3 = glm::normalize(fromPoint - toPoint);
-
- // calculate e2 basis vector, from the combinatory cross of up and over with e3
- glm::vec4 e2 = cross4(upVector, lookVector, e3);
- e2 = glm::normalize(e2);
- if (glm::distance(e2, glm::vec4{0, 0, 0, 0}) < 0.0001f) {
- throw std::runtime_error("invalid up vector");
- }
-
- // calculate e1 basis vector, from the cross of only the over vector
- glm::vec4 e1 = cross4(lookVector, e3, e2);
- e1 = glm::normalize(e1);
- if (glm::distance(e1, glm::vec4{0, 0, 0, 0}) < 0.0001f) {
- throw std::runtime_error("invalid over vector");
- }
-
- // calculate e0 basis vector, the 4d orthogonal vector to the other 3 bases
- glm::vec4 e0 = cross4(e3, e2, e1);
- e0 = glm::normalize(e0);
-
- return {e2, e1, e0, e3};
-} \ No newline at end of file
diff --git a/src/4dvecops/vec4ops.h b/src/4dvecops/vec4ops.h
deleted file mode 100644
index d1c3ac8..0000000
--- a/src/4dvecops/vec4ops.h
+++ /dev/null
@@ -1,37 +0,0 @@
-//
-// Created by Michael Foiani on 12/8/23.
-//
-
-#ifndef PROJECTS_RAY_VEC4OPS_H
-#define PROJECTS_RAY_VEC4OPS_H
-
-#include <glm/glm.hpp>
-
-class Vec4Ops {
-public:
-
- static glm::mat4 getRotationMatrix4XY(float angleRadians);
-
- static glm::mat4 getRotationMatrix4YZ(float angleRadians);
-
- static glm::mat4 getRotationMatrix4ZX(float angleRadians);
-
- static glm::mat4 getRotationMatrix4XW(float angleRadians);
-
- static glm::mat4 getRotationMatrix4YW(float angleRadians);
-
- static glm::mat4 getRotationMatrix4ZW(float angleRadians);
-
- static glm::vec4 transformPoint4(glm::vec4 point4, glm::mat4 transformDirectionMatrix, glm::vec4 translationPointVector);
-
- static glm::vec4 inverseTransformPoint4(glm::vec4 point4, glm::mat4 inverseTransformDirectionMatrix,
- glm::vec4 inverseTranslationPointVector);
-
- static glm::vec4 cross4(glm::vec4 u, glm::vec4 v, glm::vec4 w);
-
- static glm::vec4 dot4(glm::vec4 u, glm::vec4 v);
-
- static glm::mat4 getViewMatrix4(glm::vec4 fromPoint, glm::vec4 toPoint, glm::vec4 upVector, glm::vec4 lookVector);
-};
-
-#endif //PROJECTS_RAY_VEC4OPS_H