细分曲面Catmull-Clark Subdivision算法

  随着Directx11的推出,细分曲面在游戏中得到了越来越大的关注。偶一开始觉得是一大堆复杂数学推导的东西,因为导师在中科院的博士几年就是在做细分曲面,听说一个很强的师兄三年也都是在做细分曲面。近来做了几天助教帮忙改作业才偶然看到原来细分曲面也有很简单的算法实现, 比如Catmull-Clark Subdivision算法,其可以对任意拓扑结构的多边形进行细分。下面简要介绍下。

  细分新的曲面,先求出新的曲面的顶点:

  Face point(位于原来多边形面里的新顶点)

  Edge point(在原来的边中点附近的新顶点)

  New vertex point  (对原来的顶点进行调整得到新顶点)

 

 Face point:

 給定一個面F,有顶点V1,V2,……,Vn,那么新的Face point,VF计算公式如下 

 

  Edge point:

   假设一边E的两个顶点为vw,还有相邻的两个面为F1F2(其面顶点已经算出为VF1VF2)。那么对应这个边的新顶点VE

  New Vertex point:

  给定一个顶点v。假设Q是与v相邻的多边形的face point的平均值;vn条边相邻,R是与v相邻的边的中点的平均值,那么调整后得到的新顶点位置v'为。

  得到新的顶点后,边是如何产生?

    1:每个面顶点(Face PointVF与包围它的边对应的边顶点(Edge Point)VE相连。

    2:每个顶点调整后得到的新顶点(new vertex pointv’与它相邻的边上的点(edge pointVE相连。


    细分结果示例可以看下图

 

   

 

 

 

 

你可能感兴趣的:(细分曲面Catmull-Clark Subdivision算法)