几何建模算法的效率和内存消耗在很大程度上取决于基础曲面网格数据结构.

选择网格数据结构需要考虑拓扑和算法方面的考虑:

拓扑要求。数据结构需要表示哪种网格? 我们可以依靠2-manifold网格,还是需要表示复杂的边和奇异的顶点?我们可以将自己限制为纯三角形网格,还是需要表示任意多边形网格?

算法要求。哪种算法将在数据结构上操作? 我们是只想渲染网格,还是需要有效地访问顶点、边和面的局部邻域? 网格是静态的,还是它的几何形状和/或连通性会随着时间的推移而改变? 我们是否需要将附加数据与网格的顶点、边和面相关联? 我们是否有特殊要求内存消耗(即数据集是否海量)?

评估数据结构需要测量各种标准,如(a)在预处理期间构建数据结构的时间,(b)回应一个具体查询的时间,(c) 执行特定操作的时间;(d)内存消耗和冗余

Face-Based Data Structures

表示表面网格的最简单方法是存储一组单独的多边形面,这些面由其顶点位置表示(所谓的面集)。 对于三角形网格的简单情况,这需要在每个面存储三个顶点位置(请参见图2.1(左))。 使用32位单精度数字表示顶点坐标,则每个三角形需要3·3·4 = 36个字节。 由于基于Euler的公式(公式(1.5)),面F的数量大约是顶点V的两倍,因此该数据结构平均消耗72个字节/顶点。 由于它不代表网格连接,因此通常称为三角形汤或多边形汤。

然而,如果没有额外的连接信息,这种数据结构需要昂贵的搜索来恢复顶点的局部邻接信息,因此对于大多数人来说不够有效 算法。 我们现在回顾了为快速遍历曲面网格而设计的几种数据结构。

包含连接性信息的三角形网格的基于面的标准数据结构包括:为每个面存储对其三个顶点的引用以及对其相邻三角形的引用。 每个顶点除了其3D位置之外,还存储了对其入射面之一的引用(请参见图2.2)。 基于此连通性信息,人们可以围绕顶点循环以枚举其单环邻域,并执行上面列出的所有其他操作。

Edge-Based Data Structures

一般多边形网格的数据结构在逻辑上是基于边的,因为连通性主要涉及网格边。

winged-edge结构如图2.3所示.. 每个边缘存储对其端点顶点、两个入射面以及左、右面内的下一个和前一个边的引用。 顶点和面存储对其入射边缘之一的引用。 总共导致内存消耗16字节/顶点 +32字节/边 +4字节/面=120字节/顶点由于方程中的欧拉公式,F≈2V和E≈3V

尽管基于边的数据结构可以表示任意多边形网格,但遍历一个环仍需要区分大小写(中心顶点是边的第一还是第二顶点?)。 最终,通过halfedge数据结构解决了此问题,如下一节所述。

Halfedge-Based Data Structure

半边数据结构[Mantyla88,Kettner99]通过将每个(非定向)边分割成两个定向半边来避免基于边的数据结构的情况差异,如图2.4所示。 该数据结构能够表示任意多边形网格,这些网格是可定向(组合)2-maniflod的子集(没有复杂的边和顶点,参见图1.6)

在半边数据结构中,每个面周围和沿每个边界以逆时针方向一致地定向半边。每个边指定一个唯一的角(一个面中的非共享顶点),因此纹理坐标或法线等属性可以存储在每个角上.

中心顶点的单环邻居可以通过从中心的出站半边开始(左)进行枚举,然后通过步进到相对的半边(中心)和下一个半边(右)重复顺时针旋转半边直到再次达到第一个半边。

此外,每个面都存储对其半边之一的引用,每个顶点存储一个输出半边。 由于半边数H的数量大约是顶点数V的六倍,因此总内存消耗为16字节/顶点+ 20字节/半边距+ 4字节/面= 144字节/顶点。不明确存储前一个和相反的半边会使内存成本降低到96个字节/顶点

绝对不能错过!计算机视觉Polygon Mesh Processing读书笔记——3相关推荐

  1. 绝对不能错过!计算机视觉Polygon Mesh Processing读书笔记——4微分几何中的曲线

    流形 3D模型必须为流形.通俗地说,如果一个网格模型中存在多个(3个或以上)面共一条边,那么它就是非流形的(non-manifold),因为这个局部区域由于自相交而无法摊开展平为一个平面了.请看如图所 ...

  2. 全球首发!计算机视觉Polygon Mesh Processing读书笔记6——微分几何中的Metric Properties

    令连续表面的参数形式为 其中x,y和z是u和v中的可微函数,Ω是参数域. 标量(u,v)是参数空间中的坐标.与曲线情况类似,表面的度量由函数x的一阶导数确定. 如图3.3所示,这两个偏导数.将向量w从 ...

  3. 全球首发!计算机视觉Polygon Mesh Processing读书笔记——5微分几何中的弧长

    Arc Length 可以将在区间[c,d]⊆[a,b]上定义的任何曲线段的长度l(c,d)计算为切向量的积分,即l(c,d)= . 因此,切向量对曲线的度量进行编码. 此弧长参数设置独立于曲线的特定 ...

  4. 【笔记】Polygon mesh processing 读书笔记(1)

    参考书籍:Polygon mesh processing,2010 大约分8篇,这是第一篇 0. 前言 3D 获取技术 计算机断层扫描(computer tomography) 核磁共振成像(MR,m ...

  5. 【笔记】Polygon mesh processing读书笔记(5)

    多边形网格处理(5) 5. 参数化(Parameterization) 5.1 通用目标 计算一个目标的参数化意味着为其附着一个坐标系统.这个坐标系统有许多可能的应用,比如纹理映射.法向映射(norm ...

  6. 【笔记】Polygon mesh processing读书笔记(2)

    多边形网格处理系列第二篇 文章目录 @[toc] 2. 网格数据结构 基于面的数据结构 基本情况 优缺点 改进的face-based数据结构 基于边的数据结构 基于半边的数据结构 基于有向边的数据结构 ...

  7. Polygon Mesh Processing读书笔记——1三角网格Triangle Meshes

    最近看论文深感基础知识的匮乏,所以补充一些图形几何方面的知识,首先是这本书的封面. 主要章节介绍 本书讨论了基于多边形网格的几何处理管道的主要组件,如下图所示. 为了本书的指导目的,主题的描述顺序与图 ...

  8. 【笔记】Polygon mesh processing 读书笔记(3)

    文章目录 3. 微分几何 曲线 弧长 曲率 表面 表面的参数化表示 度量性质 **第一基本形式** **各向异性** 表面曲率 **Euler定理** **曲率张量** **固有几何(Intrinsi ...

  9. 【笔记】Polygon mesh processing 学习笔记(7)

    多边形网格处理(7) 7. Repairing Definetion Problem statement Model repair, removing artifacts from a geometr ...

最新文章

  1. 【控制】《鲁棒控制-线性矩阵不等式处理方法》-俞立老师-第7章-保性能控制
  2. 1.12 Java空对象(null)是怎么回事?
  3. C语言再学习 -- Linux下find命令用法
  4. Using ZipLib to create a Zip File in C#
  5. Parcel是个好玩意儿
  6. linux 安装python_Linux/Mac/Windows的Rstudio安装Python模块总报错,怎么破?
  7. 163 coremail_Icoremail企业邮箱
  8. fastapi 请求体 - 多个参数 / 字段Field / 嵌套模型
  9. LeetCode 317. 离建筑物最近的距离(逆向BFS)*
  10. Java学习--内部类
  11. gc java root_C#技术漫谈之垃圾回收机制(GC)
  12. 系统架构师学习笔记-论文摘要部分的写法
  13. 昨天做的事情和今天需要做的事情
  14. 设计模式之“单例模式”
  15. 报纸、电商、PC互联网颠覆传统行业,带来新的生态,自媒体也一样
  16. 今天我来炫炫富(r11笔记第45天)
  17. 基于Jsoup的简单JAVA爬虫 人民币汇率中间价
  18. 动态规划入门及规则分析(典型)
  19. 基于PG与PostGIS搭建实时矢量瓦片服务
  20. Aspose.Words利用Word模板导出Word文档

热门文章

  1. SAP License:请教一个SD和FM基金预算集成的问题
  2. 小微风控模型汇总与企业征信报告指南
  3. 如何分析风控核心报表,指标背后代表怎样的逻辑
  4. swiper动态加载数据滑动失效,ajax执行后swiper.js的效果消失问题
  5. 给Editplus去掉.bak文件
  6. 谈话《百度搜索引擎的网页质量白皮书》
  7. 徐中约与《中国近代史》 (zz)
  8. SQL 日期格式化处理.sql
  9. Office Open XML学习(1)-创建excel文档,并向单元格中插入字符串
  10. Spring项目使用Junit4测试配置