【问题标题】:robust and flexible 3d data structure健壮灵活的 3D 数据结构
【发布时间】:2010-10-10 08:32:56
【问题描述】:

我正在寻找一个概念来存储(在 3 维欧几里得空间中)面、边和顶点,这样

  • 信息(关于关系)不重复
  • 对相邻面/边/顶点的查询速度很快
  • 网格不限于同一绕组的连接面

定义

  • 面的邻居:与该面共享边的面
  • 顶点的邻居:位于共享该顶点的边的另一端的顶点
  • 相邻边:与该边共享端点相同顶点的边

我已经考虑过半边数据结构,但只有当所有连接的面都具有相同的绕组时,对它的查询才真正起作用。

例如,考虑这个伪代码来访问这些相关实体:

face.neighbors #the neighboring faces
face.edges #the edges shared by this face (in the right winding order)
face.verts #the vertex of that face (in the right winding order)
edge.v1, edge.v2 #the two vertex making up an edge
vertex.edges #the edges this vertex shares
vertex.neighbors # the neighbors of this vertex along each shared edge

【问题讨论】:

    标签: opengl data-structures 3d


    【解决方案1】:

    我会看看CGAL,计算几何算法库。您也许可以直接使用某些东西,或者至少获得一些好主意。半边听起来是个好主意。在我看来,你应该尽可能地强制均匀缠绕。不过,听起来您对此并不感兴趣。

    一个想法可能是在面部的数据结构中保留一对(每个绕组一个元素);这可能会给您足够的灵活性,以在其上实现某种类似半边的数据结构,并且效率很高。

    【讨论】:

    • 我不想将查询与缠绕联系起来,因为在其他人脸的汤中人脸可能是故意“反转”的,但仍然希望共享顶点并可以查询。
    • 如果您选择的语言是 C++,并且您不会因大量使用模板而感到害怕,我建议您至少看看 CGAL。否则它可能不是最好的选择。它非常 C++。
    • 我在寻找一个特定的库而不是寻找一个一般概念。
    【解决方案2】:

    与其说是推荐的结构,不如说是专业人士用于计算任务的 3D 库。

    NVIDIA Research 的研究科学家 Michael Garland 发布了他用于 3D 模型和网格计算任务的图形库。

    • libgfx
    • qslim 一个基于 libgfx 的网格简化应用(我个人使用过,并将 qvis 移植到 MacOSX)

    【讨论】:

    • libgfx 不是数据结构(文档中没有提到网格或数据结构 anywhere
    • 好的,很抱歉,我想看看专业人士正在使用什么可能会很好......或者也许建立在......
    【解决方案3】:

    如果您不想局限于多种表面,那么这些天就是翼缘。如果“关系数据”真的是你的首要任务,那我猜你运气不好。

    【讨论】:

      【解决方案4】:

      我找到了一个关于 3d 网格数据结构的摘要。 http://wscg.zcu.cz/wscg2006/Papers_2006/Short/E17-full.pdf

      【讨论】:

        【解决方案5】:

        我建议你也看看OpenMesh。它在 C++ 模板方面也很重,比如 CGAL。

        【讨论】:

          猜你喜欢
          • 2011-06-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-03
          • 2013-03-16
          相关资源
          最近更新 更多