c++ - 重建三角形网格中的所有边

标签 c++ graphics hash dictionary mesh

我有一个包含数百万个三角形的三角形网格。目前在我的数据结构中只存储了三角形和顶点。我想重建所有边缘并将它们存储在数据容器中。想法可能是这样的:遍历所有的三角形,得到它的每两个顶点,并在它们之间创建一条边。问题是共享边可能创建了两次。所以为了克服这个问题,我需要一个数据容器EdgeContainer存储边,它应该有一个功能来检查这条边是否已经被创建。所以它就像一个有多个键的 map ,但根据我的问题,这个 map 应该还具有以下功能:

  1. EdgeContainer(v1, v2)应返回与 EdgeContainer(v2, v1) 相同的结果, 其中v1v2是指向两个顶点的指针。
  2. EdgeContainer应该有类似 EdgeContainer::Remove(v1) 的功能, 这将删除所有与顶点 v1 相关的边.
  3. 实现应尽可能高效。

是否有任何现有的库可以处理这个问题?

最佳答案

首先我建议你看一下的概念 半边http://www.flipcode.com/archives/The_Half-Edge_Data_Structure.shtml meshes 它在 CGAL 和 OpenMesh 中使用,你应该知道你将要使用它们中的任何一个的概念。 我自己推荐 OpenMesh http://openmesh.org/Documentation/OpenMesh-2.0-Documentation/tutorial_01.html它是免费和开源的,您可以轻松地从一组顶点和索引创建网格,并且在创建网格后您可以轻松地遍历所有边。

关于c++ - 重建三角形网格中的所有边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22204673/

相关文章:

c++ - Qt 应用程序在运行时找不到共享库

javascript - 如何使用javascript刷新网页?

c# - GetHashCode() 为相同的对象值返回不同的值

c++ - 海湾合作委员会 4.1.2 : error: integer constant is too large for ‘long’ type

c++ - Visual Studio 回退错误 - 编程 C++

c++ - DirectoryIterator 可能存在的错误

c++ - 透视投影中的 3D 场景平移 (OpenGL)

具有发散调色板的 R 热图

vb.net - 如何在 vb.net 中使用 TextRenderer DrawText 换行长字

r - 如何完全消除 R 中的边距