如何从网格中删除面及其顶点列表
How to remove list of faces and it's vertices from a mesh
我正在尝试从网格中删除面列表及其各自的顶点(如果它们不再被引用(,但到目前为止,我只能成功删除面列表。这个想法是,对于删除的每个索引,所有大于删除的索引的索引都应减少 1。
网格仅由顶点列表和索引列表(以及可选的三角形列表(表示。
目前,仅删除三角形的代码是这样做的:
private IMesh DeleteTriangles(IMesh input, IEnumerable<int> indices_to_delete)
{
var triangles_to_delete = new HashSet<int>(indices_to_delete);
_triangles_to_keep = _mesh.Triangles.Where((t, count) =>
!triangles_to_delete.Contains(t.A) &&
!triangles_to_delete.Contains(t.B) &&
!triangles_to_delete.Contains(t.C)).ToList();
// return new mesh
}
我最后想出的解决方案:
public IMesh DeleteVertices(IMesh mesh, IImmutableList<int> indices_to_remove)
{
var indices_to_remove_set = new HashSet<int>(indices_to_remove);
var new_vertices = new List<Vector>();
var map = new int[mesh.Vertices.Count];
for (var i = 0; i < mesh.Vertices.Count; i++)
{
if (indices_to_remove_set.Contains(i))
{
map[i] = -1;
}
else
{
new_vertices.Add(mesh.Vertices[i]);
map[i] = new_vertices.Count - 1;
}
}
var new_triangle_list = from triangle in mesh.Triangles
where map[triangle.A] != -1 &&
map[triangle.B] != -1 &&
map[triangle.C] != -1
select new IndexTriangle(
map[triangle.A],
map[triangle.B],
map[triangle.C]);
//build new mesh...
}
相关文章:
- 如何循环打印顶点结构
- Pybind11:将元组列表从Python传递到C++
- 从链接列表c++中删除一个项目
- 如何从网格中删除面及其顶点列表
- 如何仅使用邻接列表在无向图中找到存在的周期(顶点也没有)?
- 通过相邻顶点列表添加和减去图形中的边
- 是否可以在邻接列表中删除提升图中的顶点?
- 如何在C++中将边列表转换为邻接矩阵,其中包含连接到顶点的边数而不是一条边?
- 在线性时间内使用邻接列表创建对顶点
- 使用C 中的邻接列表在图中添加顶点
- 从TRI列表到TRI带的高度图的DirectX顶点
- 包含相邻顶点列表的自定义顶点类型[图形]:不完整类型错误
- 似乎无法使用<VERTEX>迭代器在 for 循环中打印列表顶点?C++
- 使用邻接列表将顶点添加到图形
- 视觉 我正在使用C++用于一些基本图形。我想知道如何读取顶点、索引和面以及如何在数组列表中使用面?
- 图形、顶点、STL 列表:为什么列表是空的
- C++:图形 ADT 应该有一个顶点列表和一个边列表,或者只是带有指向其他顶点的指针的顶点
- 如何从boost图列表容器中查看顶点/边
- 如何用集合顶点列表创建boost子图
- 当顶点列表为set时,write_graphviz不起作用