Houdini vex 学习笔记(三)

好久没有更新博客了,一直没时间。现在在加拿大Montreal,时间又充裕起来,玩玩,学学,Happy Life~~~~~

// 速度反射

比如做飞镖打耙的效果,有的飞镖直接中靶插在上面,但也有可能有部分因为角度的原因被靶子反射的回来

 

1  @v = @vprevious;  
2  @hitangle = dot(normalize(@v),normalize(@hitnml));
3   if (@hitangle < ch("angle_threshold")) {
4         i@dobounce = 1;
5         @v = reflect(@v, @hitnml) * ch("scale_bounce_velocity");

@hitnml 是碰撞点的法线

 // 模型 Smooth 

模型Smooth其实用vex实现不难,这段代码实现的是比较简单的Smooth效果,在一个案例中看到,觉得代码很简洁,可移植性很强,就贴这里,以备后用~

 

1 int npts[] = neighbours(0, @ptnum);
2 vector avg = @P;
3 foreach (int npt; npts)
4 {
5     vector npos = point(0, 'P', npt);
6     avg += npos;
7 }
8 avg /= len(npts)+1;
9 @P = avg;

  // Quaternion 的旋转

很少在vex中利用Quaternion 来旋转物体,感觉quaternion毕竟没有3x3矩阵来的直观,今天看到了一个范例,还蛮有意思

1 //Rotate vector
2 vector4 rot = quaternion(angle,v@spin);  // create quaternion
3 pos = qrotate(rot,pos);    //rotate

angle是float型弧度,spin是旋转轴(绕那个轴旋转)

 // Bend Curve

法线和点的序号如下左图,

 

 旋转后的曲线右图 ( 旋转曲线的主要目的是利用wiredeform旋转模型)

//array to hold positions because 
//wrangle does not update attributes 
//well in recursive loops
vector positions[];
//Fill pos array
for (int i = 0; i < @numpt; i++){
    vector pos = point(0,"P",i);
    append(positions,pos); 
}
//Do recursive rotate for each point
for (int i = 1; i < @numpt; i++){    
    float angle = point(0,"angle",i);
    angle *= ch("multiplier");
    //Rotate root position 
    vector root = positions[i-1];
    vector N = point(0,"N",i-1);  
    //Rotate every point above the root
    for (int k = i; k < @numpt; k++){    
        //Next position 
        vector pos = positions[k];           
        //Move to origin
        pos -= root;  
        //Rotate vector
        vector4 rot = quaternion(-angle,N);
        pos = qrotate(rot,pos); 
        //Return Position
        pos += root; 
        //Update Position
        positions[k] = pos;       
    }
}
//Set positions from array
for (int i = 0; i < @numpt; i++){
    vector pos = positions[i];   
    setpointattrib(0,"P",i,pos); 
}

 angle角度是一个渐变 ,根据@ptnum 逐渐增大 ,还可以加个Ramp 方便控制

转载于:https://www.cnblogs.com/peng-vfx/p/8443394.html

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值