FFD(Free-Form Deformation)自由变形

FFD(Free-Form Deformation)自由变形

                     

FFD(Free-Form <wbr>Deformation)自由变形

图1

一、简介

       FFD首先是由Brigham Young University的Sederberg和Parry提出来。FFD的变形操作不是直接作用于物体,而是作用于所嵌入的变形空间,如果变形空间被改变了,则嵌入其中的物体自然也随之改变。

二、算法步骤

   FFD算法主要有两个步骤:

   将物体模型嵌入一个框架中(如图1,物体被嵌入了一个由3x3x3控制点组成的框架中)。当控制点位置改变时,改框架将会将模型“拉扯”,从而实现变形。

   1、构造一个局部坐标系STU,然后计算模型每个顶点坐标所对应的局部坐标(s,t,u)。不管控制点世界坐标如何变化,局部坐标(s,t,u)都是固定不变的。

   2、移动控制点,利用模型顶点局部坐标(s,t,u)、控制点世界坐标和Bernstein多项式重新计算模型每个顶点的世界坐标。

三、具体实现


                   

FFD(Free-Form <wbr>Deformation)自由变形

图2

     1、怎么构建模型局部坐标系STU?

          如图2所示,沿着物体模型的OBB盒的三条边构建局部坐标系。

     2、怎么将模型顶点坐标变换到STU坐标系?也就是说,怎么计算模型每个顶点坐标所对应的局部坐标(s,t,u)?

           FFD(Free-Form <wbr>Deformation)自由变形

3、怎么通过新的控制点坐标重新计算模型顶点的位置?


           FFD(Free-Form <wbr>Deformation)自由变形

四、FFD算法的局限性

   1、不能用于圆角和过渡面的构造

   2、在进行局部FFD变换时,物体的变形区与非变形区的交是平面边界曲线。想要构造任意边界曲线的变形将非常困难。

   3、计算量大。对于三维FFD,算法总共有三层嵌套循环,其时间复杂度是o(n^3)。

   4、网格调整比较麻烦。为获得合适的物体形状,需要仔细地选择、移动很多控制点。

五、重新计算法线

当物体模型的顶点位置改变之后,需要重新计算模型的顶点法线。通常做法是,通过加权平均共享该顶点的三角面的面法线。

六、结果

 2x2x2控制点对物体进行变形

FFD(Free-Form <wbr>Deformation)自由变形

 图3

 3x3x3控制点对物体进行变形

FFD(Free-Form <wbr>Deformation)自由变形 

  图4

七、总结

        FFD自由变形虽然有不少缺点,但是还是有它的用途,例如刚体打击变形、赛车碰撞车体变形等等。

        除了用在刚体变形上,还可用于柔体,比如器官,如果直接在器官模型的三角面边上建立弹簧质点模型,不仅是弹簧数目巨大,变形效果还不好。这个时候,我们可以选择将弹簧质点模型建立到FFD控制点框架上。

U3D源码链接:

http://pan.baidu.com/s/1jHMiraQ

https://github.com/LittleAprilFool/FFD

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值