骨骼拉伸之translate方式

1407 篇文章 2 订阅
62 篇文章 0 订阅

以前做拉伸都是用缩放来做的,貌似什么教程之类的都是用缩放做的,很难找到用位移做拉伸的资料,今天试了一下自己的方法,结果是成功,哈哈,特来写出学习心得和大家一起分享,如有错误的地方也请大家指正。

我们首先来说说用translate做拉伸骨骼的原理,先看下图

我们创建四节骨骼分别为joint1 joint2 joint3 joint4,上图左边的骨骼为原始状态未拉伸时候的骨骼,右边的骨骼为左边骨骼拉伸后的状态,骨骼的创建方式为XYZ,因为这种创建方式下骨骼的长度和translateX的值是相等的,骨骼的位移信息是一个相对于上一节骨骼的值,上图中 第一节骨骼的位移值为0,我们设第二节骨骼的长度即位移值为a 第三节为b 第四节为c 总长为L 拉伸后的长度分别为a' b' c' 总长度L'  拉伸前后的差值既总的拉伸长度为P,那么每节骨骼拉伸了多少呢?呵呵每节骨骼拉伸了P/3,接着就在表达式编辑器里写计算过程吧。

 不过上面的方法仅仅适用于每节骨骼的长度相等的时候才可以那么算,如果每节骨骼的长度不一样怎么办呢?没关系我们再找另外一个等量关系,再如上图,我们不难发现每节骨骼在他们的骨骼连的总长度中所占的比例是相等的,拉伸后的状态也是如此,比如原始状态下的joint2的长度a在整个骨骼链中所占的比例为a/L

那拉伸后了呢?呵呵自然是a'/L'了,这两个比值是相等的,呵呵,这是个万能等式啊,不用去考虑骨骼是不是等长,因为它同样也适合于等长的情况,好下面我们又要做数学题了,哈哈,写出并化简下列等式关系:

我们已经算出joint2拉伸后的长度值了,那joint1 joint3 joint4 呢 呵呵一样的算法啊

接着我们为曲线创建一个长度信息节点 arclen -ch 1

接着写表达式吧

joint1.translateX = curveInfo1.arcLength * 0 / 5.750;

joint2.translateX = curveInfo1.arcLength * 1.437 / 5.750;

joint3.translateX = curveInfo1.arcLength * 1.454 / 5.750;

joint4.translateX = curveInfo1.arcLength * 1.420 / 5.750;

 

自此局部拉伸基本差不多了,再要考虑的就是整体缩放的问题,要怎么做呢呵呵?考考大家。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值