Catmull-Clark曲面细分算法。

Catmull-Clark算法流程:

该算法是迭代进行的,每个迭代步骤相同

迭代初始给定graph(V,E), 迭代之后的记为graph(V',E') ,再之后graph(V'',E'')....

迭代次数可根据需要自由决定。

我们只分析其中一个迭代环节的算法

也就是从graph(V,E) 计算到 graph(V',E')

首先对于 graph(V,E)中的每个f, 计算点 p(f)

(1)

之后对graph(V,E)中的每个边e,计算

然后,对graph(V,E)中的每个边e,计算:

其中p(f)在 (1)中已经计算过了。

之后,再计算:

至此,告一段落,我们得到了一组新的点 {p(f)}和{r(e)}

将这些点加入集合 V,的到新的集合 V', 

同时 ,对任意 f属于graph(V,E) ,将 

加入E , 并把 

从 E中全部删除,再把 

加入 E,得到E'

至此,我们得到了graph(V',E')

此时我们还需要做最后一步处理

对任意点v属于V'且属于V ,计算

其中 

是可调参数,通常令 

并在V'中把新的v_c更新为v的坐标

至此,我们得到了从图 graph(V,E)到graph(V',E')的转换, 

这既是Catmull-Clark算法的实现。