欢迎光临散文网 会员登陆 & 注册

[Houdini] 矩阵和四元数

2022-04-18 01:26 作者:pandahgt  | 我要投稿

矩阵和四元数应该是学习Houdini过程中涉及到最难理解的数学概念了,不过幸运的是,我们并不需要理解这些数学概念,因为他们在Houdini中仅仅是用来表示图形的变换(旋转,缩放,位移),因为有vex函数的存在,我们也不需要做任何的计算。

先看一下sop里用transform节点对物体进行变换。位移,旋转,缩放,斜切需要4乘3等于12个数据位置,因为变换顺序也影响结果,再加上变换顺序,需要13个数据,也就是说这13个数据就可以表示一个物体的变换。不过这种最容易理解的变换操作有一个问题,Gimbal lock。

Transform

Gimbal Lock,万向锁,指的是用这种方式旋转,在某些情况下,会出现失去一些灵活性,所以一般软件内部计算物体变换用的是矩阵或者四元数。

矩阵是一个3乘3或者4乘4的数字阵列。3乘3的数据阵列有9个数据位置,可以表示物体的旋转和缩放,4乘4的阵列有16个数据位置,它还能表示物体的位移。四元数,由4个数字组成,只能表示物体的旋转。

在sop里变换一个物体,我们用transform节点,想要对另一个物体做同样的变换,只要复制这个节点连到另一个物体,在vex里,矩阵或者四元数相当于这个transform节点,是一个变换数据的载体。应用矩阵包含的变换,只要源数据和这个矩阵相乘,应用四元数包含的旋转,对矢量旋转,可以用qrotate函数,四元数之间旋转,可以用qmutiply函数。

下面是一些常见的vex函数

创建矩阵

创建矩阵

旋转矩阵


旋转矩阵

创建四元数

创建四元数

对矢量应用四元数旋转

对矢量应用四元数旋转

矩阵转换成欧拉角(transform节点的形式)

矩阵转换成欧拉角

欧拉角转换成四元数

欧拉角转换成四元数

四元数转换成矩阵

四元数转换成矩阵

四元数转换成欧拉角

四元数转换成欧拉角


计算两个向量的角度差

计算两个向量的角度差

计算线性插值

计算线性插值

lerp函数计算出的向量插值,slerp四元数计算出的向量插值,slerp矩阵计算出的向量插值,结果互相之间都不一样。lerp出的插值和其他两个向量在同一平面。slerp出的插值画出一条弧线,不一定和其他两个向量在同一平面,但是很平滑。

[Houdini] 矩阵和四元数的评论 (共 条)

分享到微博请遵守国家法律