三维模型的表述方式
- 边界表述法——多面体表述法
将物体表面表述成一组封闭物体空间的多边形,其中最常用的是三角形和四边形。 其中三角形表示物体的表面也叫做三角剖分。三角剖分具有以下特性:
- 稳定性强(在进行渲染的时候,三角形投影永远是个三角形,而四面体就不一定,会存在两个顶点重叠的情况)
- 有助于恢复模型的表面细节
- 要求点云稠密且分布均匀
最常用的三维模型表述方式——三角网格
当你使用meshlab导入的时候,如果其为非流形的,你就需要通过一些手段将其变为流形的
存储面片顶点索引使用顺时针方向存储,这个很重要。如果你是逆时针存储就存的其实是面片的背面。当有光照的时候就可能有亮暗之分。
- 这个存储方法的缺点是没有领域的信息。所以为了解决这个问题就有了半边数据结构
- 关于半边数据结构,其最大特点是半边,每个边分为两个半边,每个半边都是一个有向边,方向相反。如果一个边被两个面片共用(正则边),则每个面片都能各自拥有一个半边。如果一个边仅被一个面片占有(边界边),则这个面片仅拥有该边的其中一个半边,另一个半边为闲置状态。
- 该方法局部操作速度快但是只能处理流形模型
- 顶点
- 其需要保存以此顶点为源点的半边(随机选取一条)
- 半边
- 边(存储任意一条半边存储即可)
- 面(任意一条和此面相邻的半边)
- Mesh的存储信息
- 要存储四个表:顶点列表 / 边列表 / 半边列表 / 面列表
- 因为这是一个平面,知道平面三个顶点的坐标我们就可以知道法向量。知道中心顶点周围一圈的法向量,就可以通过三角面片的面积进行加权来求出中间点的法向量。
- 实际使用逻辑计算三维网格的时候只需3个基础顶点坐标即可实现一个三角面网格,而顶点法向量严格意义上来说是此三角面的面法线。在三维实时渲染过程中这个面法线通常在定义一个面的朝向和实时光照计算中起到了重要的作用。
德劳内三角剖分(Delaunay Triangulation)
- 其在二维或2.5维空间进行。
- 点集P的德劳内三角剖分满足在P内任意一个点都不在P内任意一个三角面片的外接圆内(空圆特性)
- 德劳内三角剖分最大化三角面片内三角形的最小角
- 德劳内三角剖分中所有的三角形都满足空圆特性。
- 一个满足德劳内三角剖分的四边形,你交换一下对角线可能就不满足德劳内三角剖分了(此时翻转一下边就满足了)
- 德劳内三角剖分的第二大特性就是:最大化最小角
- 一种增量的德劳内三角剖分算法
- 三维上的德劳内三角剖分(四面体剖分)+ MRF优化得到三维网格
基于隐函数的三维模型重建
- 我们想得到一些高精度并且对噪声具有鲁棒性的一些算法的时候,就不考虑德劳内剖分方法了。而是使用基于隐函数的三维模型重建。
- 重建流程:空间划分(均匀划分/非均匀划分) -> 构造符号距离场(全局/局部) ->生成表面(Marching Cube算法)
- 空间划分
- Grid空间均匀划分的计算量很大。Qctree非均匀划分