6 changed files with 90 additions and 12 deletions
@ -1,4 +0,0 @@ |
|||
#ifndef MATHDEF_H_ |
|||
#define MATHDEF_H_ |
|||
|
|||
#endif |
@ -0,0 +1,68 @@ |
|||
#include "bvh.cpp" |
|||
#include <iostream> |
|||
#include <algorithm> |
|||
|
|||
bool CurveCurveBVHIntersect(BVH_AABB_NodePtr &BoxPtr1, BVH_AABB_NodePtr &BoxPtr2, std::vector<std::pair<BVH_AABB_NodePtr, BVH_AABB_NodePtr>> &IstNodePtr) |
|||
{ |
|||
AABB box1 = BoxPtr1->bound; |
|||
AABB box2 = BoxPtr2->bound; |
|||
|
|||
auto LineIntersect = [](double x1, double x2, double x1_, double x2_) |
|||
{ |
|||
bool LIntersect = false; |
|||
if ((x2 <= x2_ && x2 >= x1_) || (x1_ <= x2 && x1_ >= x1)) |
|||
LIntersect = true; |
|||
return LIntersect; |
|||
}; |
|||
auto BoxIntersect = [&]() |
|||
{ |
|||
double x1 = box1.Bmin.x, x1_ = box2.Bmin.x; |
|||
double x2 = box1.Bmax.x, x2_ = box2.Bmax.x; |
|||
double y1 = box1.Bmin.y, y1_ = box2.Bmin.y; |
|||
double y2 = box1.Bmax.y, y2_ = box2.Bmax.y; |
|||
double z1 = box1.Bmin.z, z1_ = box2.Bmin.z; |
|||
double z2 = box1.Bmax.z, z2_ = box2.Bmax.z; |
|||
if (LineIntersect(x1, x2, x1_, x2_) && LineIntersect(y1, y2, y1_, y2_) && LineIntersect(z1, z2, z1_, z2_)) |
|||
return true; |
|||
else |
|||
false; |
|||
}; |
|||
|
|||
int biggerbox = 1; |
|||
if (glm::distance(box1.Bmax, box1.Bmin) < glm::distance(box2.Bmax, box2.Bmin)) |
|||
biggerbox = 2; |
|||
|
|||
if (BoxIntersect()) |
|||
{ |
|||
if (biggerbox == 1) |
|||
{ |
|||
if (BoxPtr1->childPtr.size() == 0) |
|||
{ |
|||
std::pair<BVH_AABB_NodePtr, BVH_AABB_NodePtr> pi = std::make_pair(BoxPtr1, BoxPtr2); |
|||
IstNodePtr.push_back(pi); |
|||
return true; |
|||
} |
|||
for (auto it : BoxPtr1->childPtr) |
|||
{ |
|||
CurveCurveBVHIntersect(it, BoxPtr2, IstNodePtr) |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
if (BoxPtr2->childPtr.size() == 0) |
|||
{ |
|||
std::pair<BVH_AABB_NodePtr, BVH_AABB_NodePtr> pi = std::make_pair(BoxPtr2, BoxPtr1); |
|||
IstNodePtr.push_back(pi); |
|||
return true; |
|||
} |
|||
for (auto it : BoxPtr2->childPtr) |
|||
{ |
|||
CurveCurveBVHIntersect(BoxPtr1, it, IstNodePtr); |
|||
} |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
return false; |
|||
} |
|||
} |
Loading…
Reference in new issue