强大而灵活的三维数据结构

时间:2009-02-27 15:07:27

标签: opengl data-structures 3d

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

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

定义

  • 一张脸的邻居:与这张脸分享优势的脸
  • 顶点的邻居:共享该顶点的边缘另一端的顶点
  • adjecent edge:与此边缘共享端点相同顶点的边

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

例如,考虑使用此伪代码来访问此类相关实体:

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

5 个答案:

答案 0 :(得分:2)

我会看一下计算几何算法库CGAL。您可以直接使用某些内容,或者至少获得一些好主意。半边听起来像个好主意;在我看来,你应该尽可能强制统一缠绕。然而,听起来你对此并不感兴趣。

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

答案 1 :(得分:1)

我建议你也看看OpenMesh。它在C ++模板方面也很重,就像CGAL一样。

答案 2 :(得分:0)

如果你不想被限制在歧管表面,那么现在就是翼刃。如果“关于关系的数据”确实是你的首要任务,那么我猜你运气不好。

答案 3 :(得分:0)

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

答案 4 :(得分:-2)

  

不是推荐的结构,而是专业人员用于计算任务的3D库,可以构建。

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

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