changed initial t0/t1

This commit is contained in:
arvid schröder 2022-12-08 13:27:23 +01:00
parent 2983d06bea
commit bab7493071

View file

@ -94,7 +94,12 @@ int FastScene::countNodeIntersections(const Ray &ray) const {
} }
bool FastScene::findIntersection(Ray &ray) const { bool FastScene::findIntersection(Ray &ray) const {
return root->findIntersection(ray, 0, ray.length); Vector3d distMin = (this->absoluteMinimum - ray.origin) / ray.direction;
Vector3d distMax = (this->absoluteMaximum - ray.origin) / ray.direction;
float t0 = std::min(distMin.x, std::min(distMin.y, distMin.z));
float t1 = std::max(distMax.x, std::max(distMax.y, distMax.z));
if (t0 > t1) std::swap(t0, t1);
return root->findIntersection(ray, t0, t1);
} }
bool FastScene::findOcclusion(Ray &ray) const { bool FastScene::findOcclusion(Ray &ray) const {
@ -109,7 +114,7 @@ void FastScene::buildTree(int maximumDepth, int minimumNumberOfPrimitives) {
// Determine the bounding box of the kD-Tree // Determine the bounding box of the kD-Tree
Vector3d maximumBounds = { this->absoluteMaximum = {
std::max_element(this->primitives().begin(), std::max_element(this->primitives().begin(),
this->primitives().end(), this->primitives().end(),
[](const auto &prim1, const auto &prim2) { [](const auto &prim1, const auto &prim2) {
@ -126,7 +131,7 @@ void FastScene::buildTree(int maximumDepth, int minimumNumberOfPrimitives) {
return prim1->maximumBounds(2) < prim2->maximumBounds(2); return prim1->maximumBounds(2) < prim2->maximumBounds(2);
})->get()->maximumBounds(2) })->get()->maximumBounds(2)
}; };
Vector3d minimumBounds = { this->absoluteMinimum = {
std::min_element(this->primitives().begin(), std::min_element(this->primitives().begin(),
this->primitives().end(), this->primitives().end(),
[](const auto &prim1, const auto &prim2) { [](const auto &prim1, const auto &prim2) {
@ -143,7 +148,7 @@ void FastScene::buildTree(int maximumDepth, int minimumNumberOfPrimitives) {
return prim1->minimumBounds(2) < prim2->minimumBounds(2); return prim1->minimumBounds(2) < prim2->minimumBounds(2);
})->get()->minimumBounds(2) })->get()->minimumBounds(2)
}; };
this->root = build(minimumBounds, maximumBounds, this->primitives(), 0); this->root = build(this->absoluteMinimum, this->absoluteMaximum, this->primitives(), 0);
// Recursively build the kD-Tree // Recursively build the kD-Tree
} }