[Houdini] vex: lookat

lookat函數(shù)
lookat函數(shù)里的from和to是兩個(gè)位置。從form點(diǎn)建立指向to點(diǎn)的一個(gè)矢量,或者說(shuō)看的方向,函數(shù)計(jì)算-z方向或者說(shuō){0,0,-1}旋轉(zhuǎn)到這個(gè)矢量需要的角度。
假設(shè)用鉛筆始終指向一個(gè)人,鉛筆筆尖的方向確定了,但是鉛筆自身豎直方向仍然可以旋轉(zhuǎn),roll參數(shù)控制這個(gè)旋轉(zhuǎn)值,或者用up指定一個(gè)方向,這個(gè)方向在計(jì)算后始終朝上。

示例,豬頭始終看向運(yùn)動(dòng)的小球。

1 豬頭的初始面向-z方向,因?yàn)閘ookat計(jì)算把-z旋轉(zhuǎn)到目標(biāo)方向需要的角度。
2 目標(biāo)方向是豬頭中心指向小球的一個(gè)矢量。
3 如果手動(dòng)用transform節(jié)點(diǎn)旋轉(zhuǎn)豬頭面向小球,肯定要把pivot設(shè)定在豬頭的中心再旋轉(zhuǎn)。問(wèn)題在于lookat求出的是一個(gè)matrix3,3乘3的矩陣。我們來(lái)看4乘4矩陣如何構(gòu)建,?maketransform(int?trs,?int?xyz,?vector?t,?vector?r,?vector?s,?vector?p,?vector?pr),它能夠把pivot translate和pivot rotate包含進(jìn)去,但是3乘3的矩陣不能,它只包含旋轉(zhuǎn)和縮放,相當(dāng)于transform節(jié)點(diǎn)的pivot只能是默認(rèn)值,直接用P應(yīng)用這個(gè)矩陣的話,旋轉(zhuǎn)中心不在豬頭中心,而在原點(diǎn){0,0,0}。v@P -= pos_geo把豬頭移動(dòng)到了原點(diǎn),豬頭中心在{0,0,0},然后再應(yīng)用旋轉(zhuǎn),這時(shí)豬頭圍繞著中心旋轉(zhuǎn),再用v@P += pos_geo把旋轉(zhuǎn)后的豬頭移動(dòng)到原來(lái)的位置。