Wrangle-Template

Gas Field Wrangle

Camera Cull

vector ndc = toNDC(chs("cam"),@P);
if(ndc[0]<-chf("horizonL") || ndc[0]>1+chf("horizonR") || ndc[1]<-chf("verticalB") || ndc[1]>1+chf("verticalT") || ndc[2]>0){
    removepoint(0,@ptnum);
}

Bend Function

////function f_rot////
matrix3 f_rot(float r_val; vector axis){
    matrix3 identMat3 = ident();
    rotate(identMat3, r_val ,normalize(set(axis)));
    return identMat3;
}
////function f_trans////
matrix f_trans(vector position){
    matrix tMat = ident();
    translate(tMat, position);
    return tMat;
}
/////function f_bend//////
matrix f_bend(vector P, pivot, dir, axis; float dist, angle){
    matrix bendM  = ident();
    float bPi = 3.1415926535;
    bendM *= invert( f_trans( pivot ));
    float dot = dot(normalize(dir),P*bendM);
    matrix horizonDir = bendM * invert( f_trans( normalize(dir) * dot));
    float bendArea = fit(dot,0,dist,0,1);
    if(bendArea < 1){
        bendM = horizonDir;
    }else{
        bendM *= invert( f_trans(normalize(dir) * dist));
    }
    
    float angAmount = angle * min(dot,dist)/dist;
    float axisOffset = (dist/bPi)/(angle/180);
    vector axisPos = normalize(cross(axis,dir)) * axisOffset;
    matrix3 rot = f_rot(angAmount/180 * bPi,normalize(axis) );
    if(bendArea > 0 && angle != 0){
        bendM = bendM * invert(f_trans(axisPos)) * matrix(rot) * f_trans(axisPos) * f_trans(pivot);
    }else{
        bendM = ident();
    }
    return bendM;
}