當(dāng)前速遞!我的mayaPython學(xué)習(xí)之路(十二):關(guān)于矩陣實(shí)現(xiàn)約束效果
關(guān)于矩陣,https://www.zhihu.com/question/22047061可以看看這個(gè)大佬的回答,我是數(shù)學(xué)白癡,就不逼逼了。但是這不影響我們?cè)趍aya中運(yùn)用矩陣節(jié)點(diǎn)。
骨骼中常用的三個(gè)矩陣信息,分別表示:
(資料圖片)
World Matrix:該物體相對(duì)于世界坐標(biāo)軸,它的位移、旋轉(zhuǎn)和縮放信息。
Parent Matrix:該物體的父級(jí)物體相對(duì)于世界坐標(biāo)軸,父級(jí)物體的位移、旋轉(zhuǎn)和縮放信息。
Matrix:該物體自身的位移、旋轉(zhuǎn)和縮放信息。
其中,World Matrix和Parent?Matrix是繼承了他們上一級(jí)位移的,即:物體B通過(guò)世界矩陣或父子矩陣對(duì)另外一個(gè)物體X鏈接,物體B的父級(jí)運(yùn)動(dòng)時(shí),物體X都會(huì)跟著動(dòng)。
World Matrix:
以世界坐標(biāo)軸為中心:
Parent?Matrix:
以父級(jí)物體的相對(duì)坐標(biāo)為中心:
世界坐標(biāo)軸中心還在,但是不再以它為坐標(biāo)軸原點(diǎn),而是重新以選擇物體的中心點(diǎn)為坐標(biāo)原點(diǎn),重新建立一個(gè)三維的坐標(biāo)系。這就是Parent Matrix。
Matrix:
以物體自身為原點(diǎn),重新簡(jiǎn)歷坐標(biāo)系。
一個(gè)簡(jiǎn)單的,不保持偏移的矩陣鏈接如下:
以上圖的鏈接方式,將骨骼的世界矩陣信息分解為位移、旋轉(zhuǎn)和縮放,得到如下圖所示的結(jié)果。
Test_Jnt骨骼為被鏈接的骨骼。
一個(gè)約束效果出來(lái)了。
需要注意的是,被約束骨骼自身的偏移值。
被約束骨骼的偏移值必須要保證是0,否則,這個(gè)偏移值會(huì)影響到骨骼的旋轉(zhuǎn)信息。
如果必須保留偏移值的話,我們需要在進(jìn)行一部操作。
分解出來(lái)的位移和縮放可以直接鏈接,子物體存在偏移值則需要求逆之后與父物體的控制量相乘,以抵消偏移值。
矩陣最直接的用法大概就這些,所有的矩陣運(yùn)算,無(wú)非就是通過(guò)節(jié)點(diǎn)對(duì)歐拉角、矩陣和四元數(shù)進(jìn)行轉(zhuǎn)化,想清楚各個(gè)節(jié)點(diǎn)的邏輯,知道節(jié)點(diǎn)的用法,提供一個(gè)比較清晰的思路,計(jì)算的問題計(jì)算機(jī)可以解決。
以小見大,通過(guò)矩陣求逆還可以實(shí)現(xiàn)雙倍位移的抵消,可以創(chuàng)建twist骨骼的抵消旋轉(zhuǎn),矩陣的計(jì)算效率非常高。
最最重要的,就是通過(guò)矩陣的鏈接效果可以完全在引擎內(nèi)實(shí)現(xiàn)。
標(biāo)簽: MATRIX WORLDMATRIX TWIST maya HTTPS