在CGAL :: Surface_mesh中查找特定图元的所有邻居

时间:2019-05-16 00:00:20

标签: c++ cgal raytracing

我用cgal编写了一个带有树加速功能的小型raytracer(带有CGAL :: Surface_mesh Mesh)。我想找到一个热门原语的所有邻居。

Ray_intersection hit = tree.first_intersection(rays[y][x]);

if(hit)
{
    const Point& point =  boost::get<Point>(hit->first);
    const Primitive_id& primitive_id = boost::get<Primitive_id>(hit->second);
    //i need the neighbours of the hit primitive
}

我该怎么办?我找到了此文档,但它似乎仅适用于点而不是基元:

https://doc.cgal.org/latest/Spatial_searching/index.html

并且搜索其欧氏距离而不是将其连接在一起。

有没有类似的东西

std::vector<Primitive_id&> ids = getNeighoursOfPrimive(primitive_id);

就像我说的那样,我正在为我的网格使用CGAL :: Surface_mesh网格,并且它们只是场景中的一个网格。

1 个答案:

答案 0 :(得分:1)

您可以使用vertices_around_face()返回的范围来获取一个面的所有顶点,然后对于每个顶点,您可以使用halfedges_around_target()返回的范围来获取入射到该顶点的每个面一个半边(或者您可以使用下一个和相反的组合手动完成此操作。