https://blog.csdn.net/datase/article/details/72704584
1.数据结构方面
1.1原有的数据结构
1.1.1stl三角片:顶点列出的顺序非常重要(有关正面、反面),采用顺时针方向列出
(1)顶点类class vertex
包含(xyz)坐标信息
(2)边类 class edge
包含两个点信息
(简单索引的问题是邻接信息没有显式表达,所以必须从三角形列表中搜索。为了更加高效地实现某些操作还可以进行一些改进:维护一个边列表,每个边由两个端点定义,同时维护一个共享该边的三角形列表。这样,三角形可视为三条边而非三个点的列表,也就是说它是边列表而不是点列表的索引。该思想的一个扩展称作"winged edge"模型,对每一顶点,存储使用该点的边的索引。
)
(2)三角形类struct Triangle
包含三条edge
1.1.2 删除冗余
原本两三角形由6个点进行表示,建立拓扑关系合并顶点后仅需4个。使用class vertex中的info指针实现,如果顶点相同,即为冗余,删除。
1.1.3网格简化
采用顶点删除法以及基于二次误差测度的算法(QEM)实现
顶点删除:对一些对曲面影响不大的顶点进行删除
QEM:
1.2针对渲染的特殊表达(提高效率,看是否可行)
大多数图形卡并不直接支持索引三角网,渲染三角形时,一般是将三个顶点同时提交。这样,共享顶点会多次提交,三角形用到一次就提交一次。因为内存和图形硬件间的数据传输是瓶颈,所以许多API和硬件支持特殊的三角网格式以减少传输量。基本思想是排序点和面,使得现存中已有的三角形不需要再次传输。
从最高灵活性到最低灵活性,我们讨论三种方案:顶点缓存,三角带,三角扇。
(1)顶点缓存
与其说顶点缓存是一种特殊的存储格式,不如说是API和硬件之间的一种存储策略,用以发挥连续三角形顶点一致性的特点。图形处理器缓存一小部分(如,16个)最近使用的顶点,当API要发送顶点时,首先探测缓存内是否已存在。当然,这要求API了解图形卡缓存的大小和替换机制。若缓存内没有该顶点,则发生脱靶,API发送顶点并更新缓存;若缓存内有该顶点,就命中,API通知图形卡"使用缓存内位置x的顶点"。
(2)三角带