您的位置:首頁(yè) > 動(dòng)漫 >

當(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通過世界矩陣或父子矩陣對(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è)約束效果出來了。

需要注意的是,被約束骨骼自身的偏移值。

被約束骨骼的偏移值必須要保證是0,否則,這個(gè)偏移值會(huì)影響到骨骼的旋轉(zhuǎn)信息。

如果必須保留偏移值的話,我們需要在進(jìn)行一部操作。

分解出來的位移和縮放可以直接鏈接,子物體存在偏移值則需要求逆之后與父物體的控制量相乘,以抵消偏移值。

矩陣最直接的用法大概就這些,所有的矩陣運(yùn)算,無非就是通過節(jié)點(diǎn)對(duì)歐拉角、矩陣和四元數(shù)進(jìn)行轉(zhuǎn)化,想清楚各個(gè)節(jié)點(diǎn)的邏輯,知道節(jié)點(diǎn)的用法,提供一個(gè)比較清晰的思路,計(jì)算的問題計(jì)算機(jī)可以解決。

以小見大,通過矩陣求逆還可以實(shí)現(xiàn)雙倍位移的抵消,可以創(chuàng)建twist骨骼的抵消旋轉(zhuǎn),矩陣的計(jì)算效率非常高。

最最重要的,就是通過矩陣的鏈接效果可以完全在引擎內(nèi)實(shí)現(xiàn)。

標(biāo)簽: MATRIX WORLDMATRIX TWIST maya HTTPS

相關(guān)閱讀