kdtree/geometry.h
karl 97f8265014 Move geometry structs to own file
Also, the Ray got an unimplemented `intersects_triangle` method, so the kdtree intersection function should be complete.
2020-12-28 16:34:51 +01:00

57 lines
1.3 KiB
C

// 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 Point {
Point(float coordinates[3], Triangle *triangle)
: coordinates(coordinates), triangle(triangle) {}
Point operator+(const Point &other) const {
return Point(new float[3]{coordinates[0] + other.coordinates[0],
coordinates[1] + other.coordinates[1],
coordinates[2] + other.coordinates[2]},
nullptr);
}
Point operator*(float scalar) const {
return Point(
new float[3]{coordinates[0] * scalar, coordinates[1] * scalar, coordinates[2] * scalar},
nullptr);
}
float *coordinates;
Triangle *triangle;
};
struct Ray {
Ray(float origin[3], float direction[3]) : origin(origin), direction(direction) {}
float *origin;
float *direction;
bool intersects_triangle(Triangle *triangle) {
// TODO
return false;
}
};