以前看D3D的時(shí)候,就發(fā)現(xiàn)骨骼動(dòng)畫(huà)是個(gè)有點(diǎn)難以掌握的東西。
但是也可以說(shuō),骨骼動(dòng)畫(huà)是3D齊次空間變換的集大成者,掌握了骨骼動(dòng)畫(huà),差不多3D空間變換你也就掌握了。
其他所有的層級(jí)變換,基本上都不會(huì)脫離骨骼動(dòng)畫(huà)需要你了解的東西。
網(wǎng)上骨骼動(dòng)畫(huà)的demo多如牛毛,我空間想象能力不行,看過(guò)無(wú)數(shù)資料都不大明白骨骼怎么轉(zhuǎn),皮膚怎么蒙。況且那些基于DX、基于GL的代碼都長(zhǎng)的不行,難看的明白。
前兩天vczh搞了個(gè)C#的弱智版的2D物理Engine,我今天就搞個(gè)C#和GDIPlus的低能版骨骼變換。雖然是2D的,但是原理和實(shí)現(xiàn)基本和3D的完全一樣。希望這已經(jīng)簡(jiǎn)單到不能再簡(jiǎn)單的代碼能幫助大家搞明白骨骼動(dòng)畫(huà)是咋回事。
代碼框架上都有注釋了,矩陣使用的是Sharp3D的數(shù)學(xué)庫(kù),已經(jīng)在包中了。不過(guò)也就用了矩陣乘法和矩陣-矢量乘法,還有一些矢量加減法。
源代碼在此下載。
2樓的回帖給了一個(gè)地址,是關(guān)于骨骼運(yùn)動(dòng)變換的數(shù)學(xué)推理和理論解釋?zhuān)€討論了左右手系的問(wèn)題。理論上有問(wèn)題的親們可以參照此篇文章。
截圖:

骨骼的初始狀態(tài)

變換后的骨骼

加了一圈子頂點(diǎn),這個(gè)雖然是2D的,但也是貨真價(jià)實(shí)的蒙皮哈。