基于点约束的曲面变形算法的一点心得

来源:互联网 发布:linux sensor驱动 编辑:程序博客网 时间:2024/06/04 15:29

最近研究三维曲面的变形算法

主要参考“基于点约束的交互式曲面自由变形技术”这篇文章

理论上和二维图像的变形是一样的,只是扩展到了三维

几点心得记录如下:

1、目前不知道obj三维模型的坐标值是如何得到的,都是非常小的小数,有正有负。你说归一化了吧,还有大于1的值。

这就导致上面文章中提到的参数大小对变形的影响。文章中设置h=1,我采用的是CANDIDE-3标准模型,h设置为1时,变形及其严重,设置为0.1还可以。同样的,σ1是影响变形范围,设置大了,影响的点就多,比如眼角变形,σ1设置大了,头发上的点都会影响到。

只有知道三维模型的坐标是如何得到的,根据此,才能定死参数的值(2014-3-19)

2、上面文章中,指出求P点在Pc点切平面的投影点P*,如果|P*-Pc|>σ1/2的话,则点坐标不变。

     σ1决定了Pc点切平面的圆形变形区域的大小。模型上所有点都可以投影到这个切平面,σ1设置大了,当然影响到的点就多。

       需要注意空间中切平面的位置。切平面是垂直于Pc'和Pc两点连线的平面,所以切平面的位置和角度是与Pc'的坐标相关的。Pc'坐标不一样,切平面也不一样。P点到切平面投影点P*的坐标也不一样,P*到Pc距离也不一样。所以,如果将模型点的z坐标置为0(相当于拍扁成为2维图像坐标),会出现距离Pc点很远的点也会变形的效果。这就是因为很远点与Pc点的连线与切平面的角度很小的缘故,导致P*点与Pc的距离<σ1/2。要解决这个问题,还需要设置一个空间距离参数阈值,模型上点与Pc的空间距离小于这个阈值的,才会进行变形。或者变形只对某些子模块的点变形,比如Pc是眼睛上的点,需要变形的点只是眼睛这一模块上的点。

3、上面文章中,变形曲线的图是错误的!

文章里,为了保证变形区域边缘处保持不变,加入了一个由σ1和σ2确定的常量。但这么做,却保证不了Pc点变形不到Pc'点。处理Pc点的变形时,变形函数前一项为exp(0)=1,如果没加入常量的话,可以保证Pc变形后就是Pc',加入后反而不是Pc'了。

这么做,有些和我做的二维图像的瘦脸功能类似。不能保证当前点变形到指定点,但可以保证边缘平滑。

4、MD,越研究越发现上面这破文章纯粹是骗人的!!!!

0 0
原创粉丝点击