[Houdini] vex: lookat

lookat函数
lookat函数里的from和to是两个位置。从form点建立指向to点的一个矢量,或者说看的方向,函数计算-z方向或者说{0,0,-1}旋转到这个矢量需要的角度。
假设用铅笔始终指向一个人,铅笔笔尖的方向确定了,但是铅笔自身竖直方向仍然可以旋转,roll参数控制这个旋转值,或者用up指定一个方向,这个方向在计算后始终朝上。

示例,猪头始终看向运动的小球。

1 猪头的初始面向-z方向,因为lookat计算把-z旋转到目标方向需要的角度。
2 目标方向是猪头中心指向小球的一个矢量。
3 如果手动用transform节点旋转猪头面向小球,肯定要把pivot设定在猪头的中心再旋转。问题在于lookat求出的是一个matrix3,3乘3的矩阵。我们来看4乘4矩阵如何构建, maketransform(int trs, int xyz, vector t, vector r, vector s, vector p, vector pr),它能够把pivot translate和pivot rotate包含进去,但是3乘3的矩阵不能,它只包含旋转和缩放,相当于transform节点的pivot只能是默认值,直接用P应用这个矩阵的话,旋转中心不在猪头中心,而在原点{0,0,0}。v@P -= pos_geo把猪头移动到了原点,猪头中心在{0,0,0},然后再应用旋转,这时猪头围绕着中心旋转,再用v@P += pos_geo把旋转后的猪头移动到原来的位置。