我用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网格,并且它们只是场景中的一个网格。
答案 0 :(得分:1)
您可以使用vertices_around_face()
返回的范围来获取一个面的所有顶点,然后对于每个顶点,您可以使用halfedges_around_target()
返回的范围来获取入射到该顶点的每个面一个半边(或者您可以使用下一个和相反的组合手动完成此操作。