34 using namespace Opcode;
39 #define SET_CONTACT(prim_index, flag) \
42 mTouchedPrimitives->Add(prim_index);
45 #define PLANES_PRIM(prim_index, flag) \
47 mIMesh->GetTriangle(mVP, prim_index); \
49 if(PlanesTriOverlap(clip_mask)) \
51 SET_CONTACT(prim_index, flag) \
107 if(!
Setup(&model))
return false;
110 if(
InitQuery(cache, planes, nb_planes, worldm))
return true;
112 udword PlaneMask = (1<<nb_planes)-1;
126 else _Collide(Tree->GetNodes(), PlaneMask);
134 else _Collide(Tree->GetNodes(), PlaneMask);
149 else _Collide(Tree->GetNodes(), PlaneMask);
157 else _Collide(Tree->GetNodes(), PlaneMask);
260 #define TEST_CLIP_MASK \
266 mFlags |= OPC_CONTACT; \
281 if(!
PlanesAABBOverlap(node->mAABB.mCenter, node->mAABB.mExtents, OutClipMask, clip_mask))
return;
292 _Collide(node->GetPos(), OutClipMask);
296 _Collide(node->GetNeg(), OutClipMask);
310 if(!
PlanesAABBOverlap(node->mAABB.mCenter, node->mAABB.mExtents, OutClipMask, clip_mask))
return;
355 _Collide(node->GetPos(), OutClipMask);
359 _Collide(node->GetNeg(), OutClipMask);
407 if(!
PlanesAABBOverlap(node->mAABB.mCenter, node->mAABB.mExtents, OutClipMask, clip_mask))
return;
413 else _Collide(node->GetPos(), OutClipMask);
418 else _Collide(node->GetNeg(), OutClipMask);
431 if(!
PlanesAABBOverlap(node->mAABB.mCenter, node->mAABB.mExtents, OutClipMask, clip_mask))
return;
466 else _Collide(node->GetPos(), OutClipMask);
471 else _Collide(node->GetNeg(), OutClipMask);
533 if(!
Setup(&model))
return false;
536 if(
InitQuery(cache, planes, nb_planes, worldm))
return true;
554 mTouchedBoxes.Reset();
557 udword PlaneMask = (1<<nb_planes)-1;
615 const udword* Touched = mTouchedBoxes.GetEntries();
635 udword TriangleIndex = *T++;
646 udword TriangleIndex = BaseIndex++;