From d966beeb1565e7bf82344b256094d2fac5c765e7 Mon Sep 17 00:00:00 2001 From: karl Date: Mon, 28 Dec 2020 17:21:03 +0100 Subject: [PATCH] Change Triangle to hold Vectors, not Points --- geometry.h | 48 +++++++++++++++++++++++------------------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/geometry.h b/geometry.h index 03a0c61..35ac533 100644 --- a/geometry.h +++ b/geometry.h @@ -1,26 +1,4 @@ // Forward declarations -struct Point; - -struct Node { - Node(int axis, Point *point, Node *left, Node *right) - : axis(axis), point(point), left(left), right(right) {} - - int axis; - - Point *point; - - Node *left; - Node *right; -}; - -struct Triangle { - Triangle(Point *p1, Point *p2, Point *p3) : p1(p1), p2(p2), p3(p3) {} - - Point *p1; - Point *p2; - Point *p3; -}; - struct Vector { Vector(float coordinates[3]) : c(coordinates) {} Vector(float x, float y, float z) : c(new float[3]{x, y, z}) {} @@ -51,6 +29,14 @@ struct Vector { float *c; }; +struct Triangle { + Triangle(Vector p1, Vector p2, Vector p3) : p1(p1), p2(p2), p3(p3) {} + + Vector p1; + Vector p2; + Vector p3; +}; + struct Point { Point(float coordinates[3], Triangle *triangle) : pos(Vector(coordinates)), triangle(triangle) {} @@ -60,6 +46,18 @@ struct Point { Triangle *triangle; }; +struct Node { + Node(int axis, Point *point, Node *left, Node *right) + : axis(axis), point(point), left(left), right(right) {} + + int axis; + + Point *point; + + Node *left; + Node *right; +}; + struct Ray { Ray(Vector origin, Vector direction) : origin(origin), direction(direction) {} @@ -72,9 +70,9 @@ struct Ray { // https://en.wikipedia.org/wiki/M%C3%B6ller%E2%80%93Trumbore_intersection_algorithm const float EPSILON = 0.0000001; - Vector p1 = triangle->p1->pos; - Vector p2 = triangle->p2->pos; - Vector p3 = triangle->p3->pos; + Vector p1 = triangle->p1; + Vector p2 = triangle->p2; + Vector p3 = triangle->p3; Vector edge1 = p2 - p1; Vector edge2 = p3 - p1;