[Houdini] 矩陣和四元數(shù)
矩陣和四元數(shù)應(yīng)該是學(xué)習(xí)Houdini過程中涉及到最難理解的數(shù)學(xué)概念了,不過幸運的是,我們并不需要理解這些數(shù)學(xué)概念,因為他們在Houdini中僅僅是用來表示圖形的變換(旋轉(zhuǎn),縮放,位移),因為有vex函數(shù)的存在,我們也不需要做任何的計算。
先看一下sop里用transform節(jié)點對物體進行變換。位移,旋轉(zhuǎn),縮放,斜切需要4乘3等于12個數(shù)據(jù)位置,因為變換順序也影響結(jié)果,再加上變換順序,需要13個數(shù)據(jù),也就是說這13個數(shù)據(jù)就可以表示一個物體的變換。不過這種最容易理解的變換操作有一個問題,Gimbal lock。

Gimbal Lock,萬向鎖,指的是用這種方式旋轉(zhuǎn),在某些情況下,會出現(xiàn)失去一些靈活性,所以一般軟件內(nèi)部計算物體變換用的是矩陣或者四元數(shù)。
矩陣是一個3乘3或者4乘4的數(shù)字陣列。3乘3的數(shù)據(jù)陣列有9個數(shù)據(jù)位置,可以表示物體的旋轉(zhuǎn)和縮放,4乘4的陣列有16個數(shù)據(jù)位置,它還能表示物體的位移。四元數(shù),由4個數(shù)字組成,只能表示物體的旋轉(zhuǎn)。
在sop里變換一個物體,我們用transform節(jié)點,想要對另一個物體做同樣的變換,只要復(fù)制這個節(jié)點連到另一個物體,在vex里,矩陣或者四元數(shù)相當(dāng)于這個transform節(jié)點,是一個變換數(shù)據(jù)的載體。應(yīng)用矩陣包含的變換,只要源數(shù)據(jù)和這個矩陣相乘,應(yīng)用四元數(shù)包含的旋轉(zhuǎn),對矢量旋轉(zhuǎn),可以用qrotate函數(shù),四元數(shù)之間旋轉(zhuǎn),可以用qmutiply函數(shù)。
下面是一些常見的vex函數(shù)
創(chuàng)建矩陣

旋轉(zhuǎn)矩陣

創(chuàng)建四元數(shù)

對矢量應(yīng)用四元數(shù)旋轉(zhuǎn)

矩陣轉(zhuǎn)換成歐拉角(transform節(jié)點的形式)

歐拉角轉(zhuǎn)換成四元數(shù)

四元數(shù)轉(zhuǎn)換成矩陣

四元數(shù)轉(zhuǎn)換成歐拉角

計算兩個向量的角度差

計算線性插值

lerp函數(shù)計算出的向量插值,slerp四元數(shù)計算出的向量插值,slerp矩陣計算出的向量插值,結(jié)果互相之間都不一樣。lerp出的插值和其他兩個向量在同一平面。slerp出的插值畫出一條弧線,不一定和其他兩個向量在同一平面,但是很平滑。