在 CGAL::Surface_mesh 中找到某个图元的所有邻居
Find all neighbours of a certain primitive in a CGAL::Surface_mesh
我在 cgal 中编写了一个带有树加速的小型光线追踪器(带有 CGAL::Surface_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 网格作为我的网格,它们在场景中只有一个网格。
您可以使用 vertices_around_face()
to get all vertices of a face, then for each vertex you can use the range returned by halfedges_around_target()
返回的范围来获得与该顶点关联的每个面的一个半边(或者您可以使用下一个和对面的组合手动完成)。
我在 cgal 中编写了一个带有树加速的小型光线追踪器(带有 CGAL::Surface_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 网格作为我的网格,它们在场景中只有一个网格。
您可以使用 vertices_around_face()
to get all vertices of a face, then for each vertex you can use the range returned by halfedges_around_target()
返回的范围来获得与该顶点关联的每个面的一个半边(或者您可以使用下一个和对面的组合手动完成)。