generated from karl/cpp-template
Also, the Ray got an unimplemented `intersects_triangle` method, so the kdtree intersection function should be complete.
57 lines
1.3 KiB
C
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;
|
|
}
|
|
}; |