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 方便控制


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM