1 曲面细分

1.1 Loop细分

Loop细分一般有两步操作:

1. 把三角形数量增多。

        将一个三角形的每条边的中点相连,把原三角形分割成四个三角形

曲面细分(loop曲面细分,catmull曲面细分)(计算机图形学学习笔记)-编程知识网
2. 改变三角形顶点的位置,让模型看上去更光滑。

        根据旧顶点和新顶点的不同采用两种方法分分配权重,计算新旧顶点的位置。

        2.1对于新顶点

曲面细分(loop曲面细分,catmull曲面细分)(计算机图形学学习笔记)-编程知识网

         2.2对于旧顶点

曲面细分(loop曲面细分,catmull曲面细分)(计算机图形学学习笔记)-编程知识网

3. 结果展示

曲面细分(loop曲面细分,catmull曲面细分)(计算机图形学学习笔记)-编程知识网

 

1.2 Catmull-Clark细分(General Mesh)

        Loop细分只能解决三角形网格的细分问题,对于一般的情况可以采用Catmull-Clark细分。

基本概念:

奇异点(Extraordinary vertex):度数不为4的点。

曲面细分(loop曲面细分,catmull曲面细分)(计算机图形学学习笔记)-编程知识网

 

1.2.1 Catmull-Clark细分算法

1.增加网格数

        取每条边的中点和每个方块的中点相连将区域划分为多个四边形

曲面细分(loop曲面细分,catmull曲面细分)(计算机图形学学习笔记)-编程知识网

         划分后可以发现奇异点增多一倍,但是非四边形区域已经没有了,(再次分割可以发现奇异点还是4个,可以发现规律,每次分割奇异点增多的个数就是非四边形的个数,所以当非不存在非四边形的时候,不论分割多少次奇异点都不会增加

 

2.调整顶点
        对于新旧点的位置更新规则如下:

曲面细分(loop曲面细分,catmull曲面细分)(计算机图形学学习笔记)-编程知识网

 3. 结果展示

曲面细分(loop曲面细分,catmull曲面细分)(计算机图形学学习笔记)-编程知识网

2. 曲面简化

目标:尽量减少三角形的数量并保留整体的形状。作用可类似于mipmap,对场景中不同距离的物体使用不同数量的三角形建模,来减少计算机的运算量。(几何的层次结构不好做)

曲面细分(loop曲面细分,catmull曲面细分)(计算机图形学学习笔记)-编程知识网

3.边坍缩(Collapsing An Edge)

曲面细分(loop曲面细分,catmull曲面细分)(计算机图形学学习笔记)-编程知识网
4.二次误差度量(Quadric Error Metrics)

它用来表示曲面简化带来的误差的大小。用局部顶点做平均效果是不好的。
二次误差:新的点应该与它相关联的面的距离的平方和最小。

 曲面细分(loop曲面细分,catmull曲面细分)(计算机图形学学习笔记)-编程知识网

 

 

2.2 通过二次误差来进行边坍缩
假设坍缩每一条边,然后分别得到它们的二次误差。 做为各自的分数。
每次都坍缩分数最小的边,然后更新被影响的边的二次误差。(使用堆或优先队列)
通过局部最优解求取全局最优解可 使用贪心算法计算。

曲面细分(loop曲面细分,catmull曲面细分)(计算机图形学学习笔记)-编程知识网