曲面构造-蒙皮曲面

蒙面Skinning就是将一簇截面曲线融合在一起生成曲面的过程,截面曲线可以是三维曲线。截面曲线的参数方向为u方向,融合的方向是v方向。蒙面Skinned Surface只是放样(lofting)的新叫法,后者可以追溯到数十年之前计算机尚未诞生的时代。从那时到现在它一直在造船、汽车、和航空工业中被广泛地应用。其中最早的包含放样程序的计算机系统是由英国航空公司的A. Ball开发的CONSURF飞机设计系统。此系统基于有理三次曲线。FilipT. Ball描述了一种对任意参数截面曲线进行放样的方法。
基于B样条曲线,蒙面的构造过程如下。假设所有的截面曲线定义在相同的节点矢量U上,并具有共同的次数degree。如果这些假设不成立,则通过升次和合并节点矢量的方式来满足假设条件。《The NURBS Book》中给出蒙面的过程图示:

通过对截面曲线进行相容性处理(升阶及节点细化)使截面曲线的次数及节点矢量相同,升阶的时候会重新计算曲线新的控制顶点。使截面曲线相容会使u方向的控制顶点个数增加。尽管蒙面算法原理简单,但要实现一个健壮且易用的蒙皮功能却不容易。另外交互设计蒙皮曲面是一个非常烦琐的迭代过程。曲面形状难以控制。它依赖于截面曲线的数量、形状和位置。设计过程一般是:先从较少数量的截面曲面开始生成蒙皮曲面,用平面去截所得曲面以获得另外的截面曲线,修改新的截面曲线以得到更理想的形状,再重新蒙皮,如此反复迭代。最后得到的曲面仍可能存在不想要的自相交和扭曲。尽管存在这些困难,蒙皮法仍不失为一种强大的并得到广泛应用的曲面设计技术。
OpenCASCADE中蒙皮算法使用类GeomFill_Generator,如图所示为类的注释及相关接口函数:

从类的注释可以看出,使用蒙皮算法要求所有的截面曲线有相同的次数,节点矢量及相同的控制顶点数量。类的使用也很简单,通过函数AddCurve()来设置截面曲线,通过函数Perform()生成蒙皮曲面。其中节点相容处理在基类GeomFill_ProfilerPerform()函数中。

通过遍历所有的截面曲线,得到次数的最大值,将所有曲线使用函数IncreaseDegree()统一升阶到最大次数。并通过合并节点矢量,使所有截面曲线节点矢量相同。除了对普通的截面曲线蒙皮,还可以对闭合的截面曲线进行蒙皮,如下图所示为对圆和椭圆进行蒙皮:

综上所述,对于只有两个截面曲线的蒙皮可以得到直纹面,即直纹面是蒙皮的一个特例。蒙皮只能插值一个方向上的曲线,若有两个方向上的截面曲线,则需要使用CoonsGordon曲面,当然蒙皮是它们的基础。

 
 
 
 

© 版权声明
THE END
喜欢就支持一下吧
点赞1.6W+ 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容