diff options
author | David Doan <daviddoan@Davids-MacBook-Pro-70.local> | 2023-12-08 11:21:57 -0500 |
---|---|---|
committer | David Doan <daviddoan@Davids-MacBook-Pro-70.local> | 2023-12-08 11:21:57 -0500 |
commit | 3bab9b0ef626b3e2686194c12ce9f667ca5270f2 (patch) | |
tree | f6350bfd21fe8856f362d3f8ded6cc55d0fe5a51 /src | |
parent | f594307273b6ab269ed4eea8dcc831b27cd25108 (diff) | |
parent | 8ea227c515c802219fff8522c6ecc65dbbcc24b7 (diff) |
Merge branch 'main' of https://github.com/NicholasBottone/the-all-americans-in-cs1230
merge
Diffstat (limited to 'src')
-rw-r--r-- | src/4dvecops/vectoroperations.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/4dvecops/vectoroperations.cpp b/src/4dvecops/vectoroperations.cpp new file mode 100644 index 0000000..d41dad3 --- /dev/null +++ b/src/4dvecops/vectoroperations.cpp @@ -0,0 +1,30 @@ +#include "raytracer/raytracer.h" + +// vector operations on 4d vectors, +// reference: https://hollasch.github.io/ray4/Four-Space_Visualization_of_4D_Objects.html#chapter5 + +glm::vec4 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 dot4( + glm::vec4 u, + glm::vec4 v) { + return {u[0] * v[0], u[1] * v[1], u[2] * v[2], u[3] * v[3]}; +}
\ No newline at end of file |