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