骨骼拉伸之translate方式

2021-06-17 21:47:30 字數 1252 閱讀 7091

以前做拉伸都是用縮放來做的,貌似什麼教程之類的都是用縮放做的,很難找到用位移做拉伸的資料,今天試了一下自己的方法,結果是成功,哈哈,特來寫出學習心得和大家一起分享,如有錯誤的地方也請大家指正。

我們首先來說說用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;

自此區域性拉伸基本差不多了,再要考慮的就是整體縮放的問題,要怎麼做呢呵呵?考考大家。

Android動畫之translate 位移動畫

translate動畫是非常好理解,就是定義乙個開始的位置和乙個結束位置,定義移動時間,然後就能自動產生移動動畫。android的translate移動方向有 橫向 x 豎向 y 左右滑動使用了橫向移動效果,對於豎向 y 的位置如下 定義乙個向上退出的動畫 從位置2 移動位置3 和從下面進入 從位置...

Android動畫之translate 位移動畫

translate動畫是非常好理解,就是定義乙個開始的位置和乙個結束位置,定義移動時間,然後就能自動產生移動動畫。android的translate移動方向有 橫向 x 豎向 y 左右滑動使用了橫向移動效果,對於豎向 y 的位置如下 定義乙個向上退出的動畫 從位置2 移動位置3 和從下面進入 從位置...

IOS拉伸之底蓋設定

1.選定拉伸 uiimageview fieldimage uiimageviewalloc initwithframe cgrectmake 37,48 35,240,32 fieldimage.userinteractionenabled yes fieldimage.contentstretc...