本文整理汇总了C++中Plane3D::intersects方法的典型用法代码示例。如果您正苦于以下问题:C++ Plane3D::intersects方法的具体用法?C++ Plane3D::intersects怎么用?C++ Plane3D::intersects使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Plane3D
的用法示例。
在下文中一共展示了Plane3D::intersects方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getAABB
bool Triangle3D::intersects(const AABB3D& bb) const
{
//trival accept: contains any point
if(bb.contains(a)||bb.contains(b)||bb.contains(c)) return true;
//trivial reject: bboxes don't intersect
AABB3D tribb;
getAABB(tribb);
if(!bb.intersects(tribb)) return false;
//check for other splitting planes
Plane3D p;
getPlane(p);
if(!p.intersects(bb)) return false;
//check planes orthogonal to edge of tri and edge of bb
ClosedInterval bbInt,triInt;
Vector3 edge;
p.offset = Zero;
//x dir
edge.set(1,0,0);
p.normal.setCross(b-a,edge);
p.intersects(bb,bbInt.a,bbInt.b);
PlaneExtents(*this,p,triInt.a,triInt.b);
if(!bbInt.intersects(triInt)) return false;
p.normal.setCross(c-b,edge);
p.intersects(bb,bbInt.a,bbInt.b);
PlaneExtents(*this,p,triInt.a,triInt.b);
if(!bbInt.intersects(triInt)) return false;
p.normal.setCross(a-c,edge);
p.intersects(bb,bbInt.a,bbInt.b);
PlaneExtents(*this,p,triInt.a,triInt.b);
if(!bbInt.intersects(triInt)) return false;
//y dir
edge.set(0,1,0);
p.normal.setCross(b-a,edge);
p.intersects(bb,bbInt.a,bbInt.b);
PlaneExtents(*this,p,triInt.a,triInt.b);
if(!bbInt.intersects(triInt)) return false;
p.normal.setCross(c-b,edge);
p.intersects(bb,bbInt.a,bbInt.b);
PlaneExtents(*this,p,triInt.a,triInt.b);
if(!bbInt.intersects(triInt)) return false;
p.normal.setCross(a-c,edge);
p.intersects(bb,bbInt.a,bbInt.b);
PlaneExtents(*this,p,triInt.a,triInt.b);
if(!bbInt.intersects(triInt)) return false;
//z dir
edge.set(0,0,1);
p.normal.setCross(b-a,edge);
p.intersects(bb,bbInt.a,bbInt.b);
PlaneExtents(*this,p,triInt.a,triInt.b);
if(!bbInt.intersects(triInt)) return false;
p.normal.setCross(c-b,edge);
p.intersects(bb,bbInt.a,bbInt.b);
PlaneExtents(*this,p,triInt.a,triInt.b);
if(!bbInt.intersects(triInt)) return false;
p.normal.setCross(a-c,edge);
p.intersects(bb,bbInt.a,bbInt.b);
PlaneExtents(*this,p,triInt.a,triInt.b);
if(!bbInt.intersects(triInt)) return false;
return true;
}