yunqingyi
06-28-2005, 09:36 AM
created myself:
template float Drape {
parameter float Kg {
detail varying
default 1
}
parameter float K {
detail varying
default 1
}
parameter float Size {
detail varying
default 1
}
parameter point __Pref {
detail varying
default {0 0 0}
}
parameter float result {
access output
display hidden
}
RSLFunction {
void
pxslDrape( varying float Kg, K;
varying float Size;
point __Pref;
output float result;
)
{
extern vector dPdu, dPdv;
vector over;
float P_x,P_y;
vector dPuN=normalize(dPdu);
vector dPvN=normalize(dPdv);
vector dPuN_L=normalize(Du(__Pref));
vector dPvN_L=normalize(Dv(__Pref));
vector X=normalize(dPuN+dPvN);
vector Y=normalize(dPuN-dPvN);
vector X_L=normalize(dPuN_L+dPvN_L);
vector Y_L=normalize(dPuN_L-dPvN_L);
if (dPuN.X>dPuN_L.X_L){
P_x=(Dv(__Pref).X_L)*(dPdu.X)/(dPdv.X)-(Du(__Pref).X_L);
P_y=(Dv(__Pref).X_L)*(dPdu.Y)/(dPdv.X)-(Du(__Pref).Y_L);
}else{
P_x=(Dv(__Pref).Y_L)*(dPdu.X)/(dPdv.Y)-(Du(__Pref).X_L);
P_y=(Dv(__Pref).Y_L)*(dPdu.Y)/(dPdv.Y)-(Du(__Pref).Y_L);
}
over=X_L*P_x+Y_L*P_y;
point pp = __Pref + normalize(over)*K; float noisemap = noise(pp*Size);
result = noisemap * length(over)*Kg*abs(dPuN.X-dPuN_L.X_L)/max(dPuN.X,dPuN_L.X_L); }
}
}
http://www.chinadv.com/forum/Web/UpFiles/2005/6/22/56047191.gif
http://www.chinadv.com/forum/Web/UpFiles/2005/6/25/70450362.jpg
http://www.chinadv.com/forum/Web/UpFiles/2005/6/25/15236307.jpg
template float Drape {
parameter float Kg {
detail varying
default 1
}
parameter float K {
detail varying
default 1
}
parameter float Size {
detail varying
default 1
}
parameter point __Pref {
detail varying
default {0 0 0}
}
parameter float result {
access output
display hidden
}
RSLFunction {
void
pxslDrape( varying float Kg, K;
varying float Size;
point __Pref;
output float result;
)
{
extern vector dPdu, dPdv;
vector over;
float P_x,P_y;
vector dPuN=normalize(dPdu);
vector dPvN=normalize(dPdv);
vector dPuN_L=normalize(Du(__Pref));
vector dPvN_L=normalize(Dv(__Pref));
vector X=normalize(dPuN+dPvN);
vector Y=normalize(dPuN-dPvN);
vector X_L=normalize(dPuN_L+dPvN_L);
vector Y_L=normalize(dPuN_L-dPvN_L);
if (dPuN.X>dPuN_L.X_L){
P_x=(Dv(__Pref).X_L)*(dPdu.X)/(dPdv.X)-(Du(__Pref).X_L);
P_y=(Dv(__Pref).X_L)*(dPdu.Y)/(dPdv.X)-(Du(__Pref).Y_L);
}else{
P_x=(Dv(__Pref).Y_L)*(dPdu.X)/(dPdv.Y)-(Du(__Pref).X_L);
P_y=(Dv(__Pref).Y_L)*(dPdu.Y)/(dPdv.Y)-(Du(__Pref).Y_L);
}
over=X_L*P_x+Y_L*P_y;
point pp = __Pref + normalize(over)*K; float noisemap = noise(pp*Size);
result = noisemap * length(over)*Kg*abs(dPuN.X-dPuN_L.X_L)/max(dPuN.X,dPuN_L.X_L); }
}
}
http://www.chinadv.com/forum/Web/UpFiles/2005/6/22/56047191.gif
http://www.chinadv.com/forum/Web/UpFiles/2005/6/25/70450362.jpg
http://www.chinadv.com/forum/Web/UpFiles/2005/6/25/15236307.jpg
