引入大场景

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)三角带

猜你喜欢

转载自blog.csdn.net/m0_37934678/article/details/83024309