蝶形细分的实现笔记

 

蝶形细分的实现笔记

Jingwenlai 2008-12-24

最近,在看一些细分方面的教程,本来想实现Loop的,后来发现CGAL中已经自行实现了Loop,Catmull-Clark,Doo-Sabin,Sqrt3的细分方法。就对照着教程看CGAL中是如何实现的,继而发现其实现非常灵活,而且可扩展性很强,利用Policy-based Design将不同的Mask实现,而后,根据细分方法是PTQ,PQQ等进行划分(主要是根据其主要操作是将面一分四还是一分三来划分)。

后来想学着实现Butterfly Scheme,就再回去翻阅了细分部分的资料,通过阅读与实现,算是对细分有了比以前更深的了解,但是对有些内容,比如细分矩阵以及利用细分矩阵分析收敛性等内容现在暂时还不理解。

现在主要实现了不包括边界点的情况,主要是三类,一类是边的两个点都是规则点(价为6)的情况,一类是边的一个点是规则点,另一个点是非规则点的情况,还有一类是边的两个点都是非规则点的情况。边界情况的实现现在暂时还没有实现。

在查找资料的过程中,发现好多资料都殊途同归,最后发现讲解得最详细地还是SIGGRAPH 2000 Course Notes的Subdivision for Modeling and Animation。其中74-75主要是讲蝶形细分的。主要使用的模板如下:

需要注意的是,在上图的模板中,并没有对中间点(暂记为q)的模板进行说明,在另一个资料中,q的值是用1-(其它点的权重之和),也就是说,所有控制点的权重加起来为1.

对于边的两点的不同价的情况,其权重的选取主要是参考下表来做

下图为tetra实现五次细分的效果

下图为Cube模型细分五次的效果

你可能感兴趣的:(蝶形细分的实现笔记)