Change Triangle to hold Vectors, not Points

This commit is contained in:
karl 2020-12-28 17:21:03 +01:00
parent 6cb085dcd6
commit d966beeb15

View File

@ -1,26 +1,4 @@
// Forward declarations // 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 { struct Vector {
Vector(float coordinates[3]) : c(coordinates) {} Vector(float coordinates[3]) : c(coordinates) {}
Vector(float x, float y, float z) : c(new float[3]{x, y, z}) {} Vector(float x, float y, float z) : c(new float[3]{x, y, z}) {}
@ -51,6 +29,14 @@ struct Vector {
float *c; 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 { struct Point {
Point(float coordinates[3], Triangle *triangle) Point(float coordinates[3], Triangle *triangle)
: pos(Vector(coordinates)), triangle(triangle) {} : pos(Vector(coordinates)), triangle(triangle) {}
@ -60,6 +46,18 @@ struct Point {
Triangle *triangle; 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 { struct Ray {
Ray(Vector origin, Vector direction) : origin(origin), direction(direction) {} 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 // https://en.wikipedia.org/wiki/M%C3%B6ller%E2%80%93Trumbore_intersection_algorithm
const float EPSILON = 0.0000001; const float EPSILON = 0.0000001;
Vector p1 = triangle->p1->pos; Vector p1 = triangle->p1;
Vector p2 = triangle->p2->pos; Vector p2 = triangle->p2;
Vector p3 = triangle->p3->pos; Vector p3 = triangle->p3;
Vector edge1 = p2 - p1; Vector edge1 = p2 - p1;
Vector edge2 = p3 - p1; Vector edge2 = p3 - p1;