예제 #1
0
void rOctree<T>::QueryItemsWithRay(const ray_type& r , result_type& result) {
    result.clear();

    if (! m_root || !rIntersection::RayIntersectsAlignedBox(r , m_root->m_volume))
        return;

    AddNodeItemsToResultSet( m_root,result);
    QueryItemsWithRayRec(r , result, m_root);
}
예제 #2
0
void rOctree<T>::QueryItemsWithBox(const box_type& b , result_type& result) {
    result.clear();

    if (! m_root || ! m_root->m_volume.IntersectsBox(b))
        return;

    AddNodeItemsToResultSet( m_root,result);
    QueryItemsWithBoxRec(b , result , m_root);
}
예제 #3
0
void rOctree<T>::QueryItemsWithSphere(const sphere_type& s, result_type& result) {
    result.clear();

    if (! m_root || ! rIntersection::AlignedBoxIntersectsSphere(m_root->m_volume , s))
        return;

    AddNodeItemsToResultSet( m_root,result);
    QueryItemsWithSpehereRec(s , result , m_root);
}
예제 #4
0
void rOctree<T>::QueryItemsWithPoint(const point_type& p , result_type& result) {
    result.clear();

    if (! m_root || ! m_root->m_volume.ContainsPoint(p))
        return;

    AddNodeItemsToResultSet( m_root,result);
    QueryItemsWithPointRec(p , result, m_root);
}