aboutsummaryrefslogtreecommitdiff
path: root/src/accelerate/kdtree.h
diff options
context:
space:
mode:
authorsotech117 <michael_foiani@brown.edu>2023-12-07 16:23:20 -0500
committersotech117 <michael_foiani@brown.edu>2023-12-07 16:23:20 -0500
commitcaa765bff49d54217b75aaf0e7acf4e5392a11e4 (patch)
tree9b92914dfb88b99599e8e60e4512e9e9ea9a25db /src/accelerate/kdtree.h
parenta9274459443f1d560d7580a162deb581549980cb (diff)
upload base code
Diffstat (limited to 'src/accelerate/kdtree.h')
-rw-r--r--src/accelerate/kdtree.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/accelerate/kdtree.h b/src/accelerate/kdtree.h
new file mode 100644
index 0000000..e33aa59
--- /dev/null
+++ b/src/accelerate/kdtree.h
@@ -0,0 +1,53 @@
+#ifndef KDTREE_H
+#define KDTREE_H
+#include "utils/sceneparser.h"
+#include <queue>
+#include <vector>
+
+typedef struct {
+ glm::vec4 xmax;
+ glm::vec4 xmin;
+ glm::vec4 ymax;
+ glm::vec4 ymin;
+ glm::vec4 zmax;
+ glm::vec4 zmin;
+ glm::vec4 center;
+} BoundingRegion;
+
+typedef struct KdShape
+{
+ RenderShapeData shape;
+ BoundingRegion region;
+} KdShape;
+
+class KdTree
+{
+public:
+
+ KdTree(int pDimension, float pSplitCoord);
+
+ bool empty;
+ int dimension;
+ float splitCoord;
+ std::vector<KdShape> shapesWithinBounds;
+ void insert(KdShape shape);
+
+ KdTree *leftChild;
+ KdTree *rightChild;
+
+ // todo: make basis a matrix
+ static BoundingRegion transformBoundingRegion(BoundingRegion region, glm::mat4 transformationMatrix, glm::vec3 basis=glm::vec3(1.0f, 1.0f, 1.0f));
+};
+
+const static BoundingRegion OBJECT_BOUNDS{
+ glm::vec4(.5f, 0.f, 0.f, 1.f),
+ glm::vec4(-.5f, 0.f, 0.f, 1.f),
+ glm::vec4(0.f, .5f, 0.f, 1.f),
+ glm::vec4(0.f, -.5f, 0.f, 1.f),
+ glm::vec4(0.f, 0.f, .5f, 1.f),
+ glm::vec4(0.f, 0.f, -.5f, 1.f),
+ glm::vec4(0.f, 0.f, 0.f, 1.f)
+};
+
+
+#endif // KDTREE_H \ No newline at end of file