本文整理自西安交通大学软件学院祝继华老师的计算机图形学课件,请勿转载
文章目录
三角网格的概念
三角网格描述
- 顶点几何信息:
- n个顶点 V = ( v 1 , v 2 , … , v n ) V=(v_1,v_2,…,v_n) V=(v1,v2,…,vn)。
- 三角网络拓扑连接的信息
- 一维的边:对应顶点的二元组,如 ( v 1 , v 2 ) (v_1,v_2) (v1,v2);
- 二维的面:对应顶点的有序三元组(逆时针),如 ( v 1 , v 2 , v 3 ) (v_1,v_2,v_3) (v1,v2,v3)。
- 附加属性:
- 与某顶点、边或面关联的法向、纹理坐标等信息。
三角网格模型的存储
- 可通过不同的方法获得:
- 三维扫描仪,采用特定方法生成三角网格模型;
- 三维动画和造型软件。
- 文件格式:
- 文本:易于阅读和理解;(OBJ和PLY文件格式)
- 二进制:具有较高的编码效率。
三角网格的半边表示
- 精确的表示三角网格:
- 只需存储顶点和每个面所包含的顶点。
- 对网格拓扑进行检索和遍历:
- 按顺时针顺序遍历包含某顶点的所有面。
- 原始的存储结构:需要遍历整个模型;
- 改进的存储结构:增加少量的存储量,提供一系列访问的便利,例如三角网格的半边表示结构。
双向链接表
把一条无向的边拆分成两条有向的“半边”,规定半边的方向总是沿着逆时针方向
- 半边e和半边Opposite(e)对应同一条边;
- 除顶点、边和面外,存储额外信息
存储的信息
- 顶点的几何信息,即空间坐标(v);
- 一条从该顶点出发的半边(e):
- 该半边的源顶点Origin(e)
- 该半边在同一三角形中的下一半边Next(e)
- 与该半边同属一条边的对边Opposite(e)
- 该半边所属面IncFace(e)
此存储结构便于各种网格上的遍历操作
- 获得半边e的上一半边: Prev(e)= Next(Next(e))。
- 半边e指向的顶点:Target(e)= Origin(Next(e))。
网格处理概述
从应用目标出发,网格处理包括
- 简化:用较少面片表示几何,提高绘制效率;
- 细分:以原始网格为基础,按一定规则生成包含更多面片的几何;
- 重剖:为了获得更规则的网格模型,可能具有更少或更多的面片
网格简化
减少已有网格的面片数量,仍能表达原三维模型的过程
层次细节网格简化技术
Level of Detail(LOD)
- 基本不影响画面视觉效果的条件下,逐次简化景物的表面细节来减少场景的几何复杂性,提高绘制算法的效率;
- 实质:降低显示三维场景模型的复杂度,损失一定的图形质量,达到实时绘制目的
基本原理
对原始多面体模型,建立不同逼近程度的几何模型:
- 每个模型均保留一定层次的细节;
- 近处观察物体,静止或运动较慢物体,采用精细的模型;
- 远处观察物体,运动较快的物体,采用较粗糙的模型;
建立原始网格模型的不同层次细节的模型
- 顶点删除:删除一个顶点,对相邻三角形形成的空洞作三角剖分,保持网格的拓扑一致性
- 边压缩:把一条边压缩为顶点,与该边相邻两个三角形退化,两个顶点融合为一个新的顶点
- 面片收缩:把面片收缩为顶点,本身极其相邻三个三角形都退化,三个顶点收缩为一个新顶点
网格细分
通过按一定规则给网格增加顶点和面片数量,让网格模型变得更加光滑。
- Loop细分法;
- 3 \sqrt 3 3细分法;
- Butterfly细分
Loop细分法
- 最早的基于三角网络的细分法;
- 步骤:
- 增加顶点:调增网格的拓扑结构;
- 顶点位置调整:平滑网格的粗糙程度。
- 生成两类顶点,E-顶点和V-顶点
模型细分的一些示例图
特征敏感网格重剖
在网格简化后的模型中,三角形形状的规则性难以有较好的保证
三角网格模型的规则性指标:
- 网格中顶点的度数尽可能接近于6;
- 每个三角面的顶角尽可能的接近于60度;
- 构成网格的各边的边长尽可能相近
网格重剖:生成较规则的网格模型,并尽可能与原网格在几何上相近
特征敏感度量
特阵区域:具有至少一个较大主曲率的区域
- 对于几何模型的外观及表达尤为重要;
- 特征区域曲面上单位法向发生变化:尖锐特征,平滑特征,平坦区域
特阵敏感度量:通过改变度量,为与特阵相关的网格处理提供一种统一的解决方案
- 欧氏度量;
- 马氏距离。