#define KTdiffuse(P1,P2,d) \ d=P1.P2; \ d=clamp(d,0,1); \ #define KTspecular(P1,P2,P3,r,e) \ H=normalize(normalize(-P1)+normalize(P2)); \ e=H.P3; \ e=clamp(e,0,1); \ e=1-acos(e)/(PI/2); \ /* e=pow(s,1.5);*/ \ e=pow(e,1/r); \ #define change_vector(P1,P2) \ if(normalize(P1).normalize(P2)>0) { \ P1=-P1; \ } \ P1=normalize(P1); \ #define tranform_to_objectspace_bezier44(P00,P10,P20,P30,P01,P11,P21,P31,P02,P12,P22,P32,P03,P13,P23,P33) \ Bz00O=vector(xcomp(P00),ycomp(P00),zcomp(P00)); \ Bz10O=vector(xcomp(P10),ycomp(P10),zcomp(P10)); \ Bz20O=vector(xcomp(P20),ycomp(P20),zcomp(P20)); \ Bz30O=vector(xcomp(P30),ycomp(P30),zcomp(P30)); \ Bz01O=vector(xcomp(P01),ycomp(P01),zcomp(P01)); \ Bz11O=vector(xcomp(P11),ycomp(P11),zcomp(P11)); \ Bz21O=vector(xcomp(P21),ycomp(P21),zcomp(P21)); \ Bz31O=vector(xcomp(P31),ycomp(P31),zcomp(P31)); \ Bz02O=vector(xcomp(P02),ycomp(P02),zcomp(P02)); \ Bz12O=vector(xcomp(P12),ycomp(P12),zcomp(P12)); \ Bz22O=vector(xcomp(P22),ycomp(P22),zcomp(P22)); \ Bz32O=vector(xcomp(P32),ycomp(P32),zcomp(P32)); \ Bz03O=vector(xcomp(P03),ycomp(P03),zcomp(P03)); \ Bz13O=vector(xcomp(P13),ycomp(P13),zcomp(P13)); \ Bz23O=vector(xcomp(P23),ycomp(P23),zcomp(P23)); \ Bz33O=vector(xcomp(P33),ycomp(P33),zcomp(P33)); \ \ Bz00O=vtransform("current","object",Bz00O); \ Bz10O=vtransform("current","object",Bz10O); \ Bz20O=vtransform("current","object",Bz20O); \ Bz30O=vtransform("current","object",Bz30O); \ Bz01O=vtransform("current","object",Bz01O); \ Bz11O=vtransform("current","object",Bz11O); \ Bz21O=vtransform("current","object",Bz21O); \ Bz31O=vtransform("current","object",Bz31O); \ Bz02O=vtransform("current","object",Bz02O); \ Bz12O=vtransform("current","object",Bz12O); \ Bz22O=vtransform("current","object",Bz22O); \ Bz32O=vtransform("current","object",Bz32O); \ Bz03O=vtransform("current","object",Bz03O); \ Bz13O=vtransform("current","object",Bz13O); \ Bz23O=vtransform("current","object",Bz23O); \ Bz33O=vtransform("current","object",Bz33O); \ #define get_transform_point(P1,P2,a,b) \ dummyP=-P2+P1; \ /* dummyP=P1-P2;*/ \ transformPz=sin(b)*xcomp(dummyP)+sin(a)*cos(b)*ycomp(dummyP)+cos(b)*cos(a)*zcomp(dummyP); \ transformPx=cos(b)*xcomp(dummyP)-sin(b)*sin(a)*ycomp(dummyP)-sin(b)*cos(a)*zcomp(dummyP); \ transformPy=cos(a)*ycomp(dummyP)-sin(a)*zcomp(dummyP); \ #define get_minmax(a,b,e,f,g,h) \ e=min(e,a); \ f=max(f,a); \ g=min(g,b); \ h=max(h,b); \ #define transform_to_P56space(P1,P2,P3,P4,P5,P6) \ spaceV=vector(0,0,1); \ Pyz=normalize(vector(0,ycomp(P6),zcomp(P6))); \ /* spaceV=vector "current" (0,0,1); \ Pyz=normalize(vector "current" (0,ycomp(P6),zcomp(P6)));*/ \ /* spaceV=point(0,0,1); \ Pyz=normalize(point(0,ycomp(P6),zcomp(P6)));*/ \ rotate_x=spaceV.Pyz; \ rotate_x=acos(rotate_x); \ j_rotate=(normalize(Pyz^spaceV)).(vector(1,0,0)); \ /* j_rotate=(normalize(Pyz^spaceV)).(vector "current" (1,0,0));*/ \ /* j_rotate=(normalize(Pyz^spaceV)).(point(1,0,0));*/ \ if (j_rotate<0) { \ rotate_x=-rotate_x; \ } \ rotate_y=P6.Pyz; \ rotate_y=acos(rotate_y); \ j_rotate=normalize(P6-Pyz).vector(1,0,0); \ /* j_rotate=normalize(P6-Pyz).vector "current" (1,0,0);*/ \ /* j_rotate=normalize(P6-Pyz).point(1,0,0);*/ \ if (j_rotate<0) { \ rotate_y=-rotate_y; \ } \ \ get_transform_point(P1,P5,rotate_x,rotate_y); \ /* if (transformPz>=0) {*/ \ if (transformPz>ZERO) { \ fore_judge+=1; \ } \ get_minmax(transformPx,transformPy,box_x_min,box_x_max,box_y_min,box_y_max); \ \ get_transform_point(P2,P5,rotate_x,rotate_y); \ /* if (transformPz>=0) {*/ \ if (transformPz>ZERO) { \ fore_judge+=1; \ } \ get_minmax(transformPx,transformPy,box_x_min,box_x_max,box_y_min,box_y_max); \ \ get_transform_point(P3,P5,rotate_x,rotate_y); \ /* if (transformPz>=0) {*/ \ if (transformPz>ZERO) { \ fore_judge+=1; \ } \ get_minmax(transformPx,transformPy,box_x_min,box_x_max,box_y_min,box_y_max); \ \ get_transform_point(P4,P5,rotate_x,rotate_y); \ /* if (transformPz>=0) {*/ \ if (transformPz>ZERO) { \ fore_judge+=1; \ } \ get_minmax(transformPx,transformPy,box_x_min,box_x_max,box_y_min,box_y_max); \ #define transform_to_P1718space(P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18) \ spaceV=vector(0,0,1); \ Pyz=normalize(vector(0,ycomp(P18),zcomp(P18))); \ /* spaceV=vector "current" (0,0,1); \ Pyz=normalize(vector "current" (0,ycomp(P18),zcomp(P18)));*/ \ /* spaceV=point(0,0,1); \ Pyz=normalize(point(0,ycomp(P18),zcomp(P18)));*/ \ rotate_x=spaceV.Pyz; \ rotate_x=acos(rotate_x); \ j_rotate=(normalize(Pyz^spaceV)).(vector(1,0,0)); \ /* j_rotate=(normalize(Pyz^spaceV)).(vector "current" (1,0,0));*/ \ /* j_rotate=(normalize(Pyz^spaceV)).(point(1,0,0));*/ \ if (j_rotate<0) { \ rotate_x=-rotate_x; \ } \ rotate_y=P18.Pyz; \ rotate_y=acos(rotate_y); \ j_rotate=normalize(P18-Pyz).vector(1,0,0); \ /* j_rotate=normalize(P18-Pyz).vector "current" (1,0,0);*/ \ /* j_rotate=normalize(P18-Pyz).point(1,0,0);*/ \ if (j_rotate<0) { \ rotate_y=-rotate_y; \ } \ \ get_transform_point(P1,P17,rotate_x,rotate_y); \ /* if (transformPz>=0) {*/ \ if (transformPz>ZERO) { \ fore_judge+=1; \ } \ get_minmax(transformPx,transformPy,box_x_min,box_x_max,box_y_min,box_y_max); \ \ get_transform_point(P2,P17,rotate_x,rotate_y); \ /* if (transformPz>=0) {*/ \ if (transformPz>ZERO) { \ fore_judge+=1; \ } \ get_minmax(transformPx,transformPy,box_x_min,box_x_max,box_y_min,box_y_max); \ \ get_transform_point(P3,P17,rotate_x,rotate_y); \ /* if (transformPz>=0) {*/ \ if (transformPz>ZERO) { \ fore_judge+=1; \ } \ get_minmax(transformPx,transformPy,box_x_min,box_x_max,box_y_min,box_y_max); \ \ get_transform_point(P4,P17,rotate_x,rotate_y); \ /* if (transformPz>=0) {*/ \ if (transformPz>ZERO) { \ fore_judge+=1; \ } \ get_minmax(transformPx,transformPy,box_x_min,box_x_max,box_y_min,box_y_max); \ \ get_transform_point(P5,P17,rotate_x,rotate_y); \ /* if (transformPz>=0) {*/ \ if (transformPz>ZERO) { \ fore_judge+=1; \ } \ get_minmax(transformPx,transformPy,box_x_min,box_x_max,box_y_min,box_y_max); \ \ get_transform_point(P6,P17,rotate_x,rotate_y); \ /* if (transformPz>=0) {*/ \ if (transformPz>ZERO) { \ fore_judge+=1; \ } \ get_minmax(transformPx,transformPy,box_x_min,box_x_max,box_y_min,box_y_max); \ \ get_transform_point(P7,P17,rotate_x,rotate_y); \ /* if (transformPz>=0) {*/ \ if (transformPz>ZERO) { \ fore_judge+=1; \ } \ get_minmax(transformPx,transformPy,box_x_min,box_x_max,box_y_min,box_y_max); \ \ get_transform_point(P8,P17,rotate_x,rotate_y); \ /* if (transformPz>=0) {*/ \ if (transformPz>ZERO) { \ fore_judge+=1; \ } \ get_minmax(transformPx,transformPy,box_x_min,box_x_max,box_y_min,box_y_max); \ \ get_transform_point(P9,P17,rotate_x,rotate_y); \ /* if (transformPz>=0) {*/ \ if (transformPz>ZERO) { \ fore_judge+=1; \ } \ get_minmax(transformPx,transformPy,box_x_min,box_x_max,box_y_min,box_y_max); \ \ get_transform_point(P10,P17,rotate_x,rotate_y); \ /* if (transformPz>=0) {*/ \ if (transformPz>ZERO) { \ fore_judge+=1; \ } \ get_minmax(transformPx,transformPy,box_x_min,box_x_max,box_y_min,box_y_max); \ \ get_transform_point(P11,P17,rotate_x,rotate_y); \ /* if (transformPz>=0) {*/ \ if (transformPz>ZERO) { \ fore_judge+=1; \ } \ get_minmax(transformPx,transformPy,box_x_min,box_x_max,box_y_min,box_y_max); \ \ get_transform_point(P12,P17,rotate_x,rotate_y); \ /* if (transformPz>=0) {*/ \ if (transformPz>ZERO) { \ fore_judge+=1; \ } \ get_minmax(transformPx,transformPy,box_x_min,box_x_max,box_y_min,box_y_max); \ \ get_transform_point(P13,P17,rotate_x,rotate_y); \ /* if (transformPz>=0) {*/ \ if (transformPz>ZERO) { \ fore_judge+=1; \ } \ get_minmax(transformPx,transformPy,box_x_min,box_x_max,box_y_min,box_y_max); \ \ get_transform_point(P14,P17,rotate_x,rotate_y); \ /* if (transformPz>=0) {*/ \ if (transformPz>ZERO) { \ fore_judge+=1; \ } \ get_minmax(transformPx,transformPy,box_x_min,box_x_max,box_y_min,box_y_max); \ \ get_transform_point(P15,P17,rotate_x,rotate_y); \ /* if (transformPz>=0) {*/ \ if (transformPz>ZERO) { \ fore_judge+=1; \ } \ get_minmax(transformPx,transformPy,box_x_min,box_x_max,box_y_min,box_y_max); \ \ get_transform_point(P16,P17,rotate_x,rotate_y); \ /* if (transformPz>=0) {*/ \ if (transformPz>ZERO) { \ fore_judge+=1; \ } \ get_minmax(transformPx,transformPy,box_x_min,box_x_max,box_y_min,box_y_max); \ #define judge_square_inout(a,b,c,d,e) \ if ((a*b<=0)&&(c*d<=0)) { \ e=1; \ } \ #define judge_trace4(P1,P2,P3,P4,P5,P6) \ fore_judge=0; \ box_x_min=1000000000; \ box_x_max=-1000000000; \ box_y_min=1000000000; \ box_y_max=-1000000000; \ transform_to_P56space(P1,P2,P3,P4,P5,P6); \ \ trace_judge=0; \ if (fore_judge>0) { \ judge_square_inout(box_x_min,box_x_max,box_y_min,box_y_max,trace_judge); \ } \ #define judge_trace16(P1,P2,P00,P10,P20,P30,P01,P11,P21,P31,P02,P12,P22,P32,P03,P13,P23,P33) \ fore_judge=0; \ box_x_min=1000000000; \ box_x_max=-1000000000; \ box_y_min=1000000000; \ box_y_max=-1000000000; \ transform_to_P1718space(P00,P10,P20,P30,P01,P11,P21,P31,P02,P12,P22,P32,P03,P13,P23,P33,P1,P2); \ \ trace_judge=0; \ if (fore_judge>0) { \ judge_square_inout(box_x_min,box_x_max,box_y_min,box_y_max,trace_judge); \ } \ #define judge_foreback(P1,P2,P3) \ judge=0; \ dummyP4=P2-P1; \ if (length(dummyP4)>ZERO) { \ judge=dummyP4.P3; \ } \ #define judge_inout(P1,P2,P3,P4,P5,intersect,P6,P7) \ dummyP1=P2-P1; \ dummyP2=P3-P1; \ dummyP3=P4-P1; \ \ judgeP1=normalize(dummyP1^dummyP3); \ judgeP2=normalize(dummyP2^dummyP3); \ \ if (judgeP1.judgeP2<=0) { \ dummyP1=P1-P2; \ dummyP2=P3-P2; \ dummyP3=P4-P2; \ judgeP1=normalize(dummyP1^dummyP3); \ judgeP2=normalize(dummyP2^dummyP3); \ \ if (judgeP1.judgeP2<=0) { \ dummyP1=P1-P3; \ dummyP2=P2-P3; \ dummyP3=P4-P3; \ judgeP1=normalize(dummyP1^dummyP3); \ judgeP2=normalize(dummyP2^dummyP3); \ \ if (judgeP1.judgeP2<=0) { \ d=distance(P6,P5); \ if (d>ZERO) { \ intersect=1; \ d_max=max(d_max,d); \ d_min=min(d_min,d); \ if (d==d_min) { \ intersectP=P5; \ N_intersectP=P7; \ } \ } \ } \ \ } \ \ } \ #define get_u_step(P00,P10,P20,P30,P01,P11,P21,P31,P02,P12,P22,P32,P03,P13,P23,P33,a,b) \ if (a==1) { \ u1=pow(1-uu,3); \ u2=3*pow(1-uu,2)*uu; \ u3=3*(1-uu)*pow(uu,2); \ u4=pow(uu,3); \ \ Bz1_Px1_step=u1*xcomp(P00)+u2*xcomp(P10)+u3*xcomp(P20)+u4*xcomp(P30); \ Bz1_Px2_step=u1*xcomp(P01)+u2*xcomp(P11)+u3*xcomp(P21)+u4*xcomp(P31); \ Bz1_Px3_step=u1*xcomp(P02)+u2*xcomp(P12)+u3*xcomp(P22)+u4*xcomp(P32); \ Bz1_Px4_step=u1*xcomp(P03)+u2*xcomp(P13)+u3*xcomp(P23)+u4*xcomp(P33); \ Bz1_Py1_step=u1*ycomp(P00)+u2*ycomp(P10)+u3*ycomp(P20)+u4*ycomp(P30); \ Bz1_Py2_step=u1*ycomp(P01)+u2*ycomp(P11)+u3*ycomp(P21)+u4*ycomp(P31); \ Bz1_Py3_step=u1*ycomp(P02)+u2*ycomp(P12)+u3*ycomp(P22)+u4*ycomp(P32); \ Bz1_Py4_step=u1*ycomp(P03)+u2*ycomp(P13)+u3*ycomp(P23)+u4*ycomp(P33); \ Bz1_Pz1_step=u1*zcomp(P00)+u2*zcomp(P10)+u3*zcomp(P20)+u4*zcomp(P30); \ Bz1_Pz2_step=u1*zcomp(P01)+u2*zcomp(P11)+u3*zcomp(P21)+u4*zcomp(P31); \ Bz1_Pz3_step=u1*zcomp(P02)+u2*zcomp(P12)+u3*zcomp(P22)+u4*zcomp(P32); \ Bz1_Pz4_step=u1*zcomp(P03)+u2*zcomp(P13)+u3*zcomp(P23)+u4*zcomp(P33); \ } \ \ u1=pow(1-(uu+b),3); \ u2=3*pow(1-(uu+b),2)*(uu+b); \ u3=3*(1-(uu+b))*pow((uu+b),2); \ u4=pow((uu+b),3); \ \ Bz2_Px1_step=u1*xcomp(P00)+u2*xcomp(P10)+u3*xcomp(P20)+u4*xcomp(P30); \ Bz2_Px2_step=u1*xcomp(P01)+u2*xcomp(P11)+u3*xcomp(P21)+u4*xcomp(P31); \ Bz2_Px3_step=u1*xcomp(P02)+u2*xcomp(P12)+u3*xcomp(P22)+u4*xcomp(P32); \ Bz2_Px4_step=u1*xcomp(P03)+u2*xcomp(P13)+u3*xcomp(P23)+u4*xcomp(P33); \ Bz2_Py1_step=u1*ycomp(P00)+u2*ycomp(P10)+u3*ycomp(P20)+u4*ycomp(P30); \ Bz2_Py2_step=u1*ycomp(P01)+u2*ycomp(P11)+u3*ycomp(P21)+u4*ycomp(P31); \ Bz2_Py3_step=u1*ycomp(P02)+u2*ycomp(P12)+u3*ycomp(P22)+u4*ycomp(P32); \ Bz2_Py4_step=u1*ycomp(P03)+u2*ycomp(P13)+u3*ycomp(P23)+u4*ycomp(P33); \ Bz2_Pz1_step=u1*zcomp(P00)+u2*zcomp(P10)+u3*zcomp(P20)+u4*zcomp(P30); \ Bz2_Pz2_step=u1*zcomp(P01)+u2*zcomp(P11)+u3*zcomp(P21)+u4*zcomp(P31); \ Bz2_Pz3_step=u1*zcomp(P02)+u2*zcomp(P12)+u3*zcomp(P22)+u4*zcomp(P32); \ Bz2_Pz4_step=u1*zcomp(P03)+u2*zcomp(P13)+u3*zcomp(P23)+u4*zcomp(P33); \ #define get_uv_step(Bz1_Px1_step,Bz1_Py1_step,Bz1_Pz1_step,Bz1_Px2_step,Bz1_Py2_step,Bz1_Pz2_step,Bz1_Px3_step,Bz1_Py3_step,Bz1_Pz3_step,Bz1_Px4_step,Bz1_Py4_step,Bz1_Pz4_step,Bz2_Px1_step,Bz2_Py1_step,Bz2_Pz1_step,Bz2_Px2_step,Bz2_Py2_step,Bz2_Pz2_step,Bz2_Px3_step,Bz2_Py3_step,Bz2_Pz3_step,Bz2_Px4_step,Bz2_Py4_step,Bz2_Pz4_step,a,b) \ if (a==1) { \ v1=pow(1-vv,3); \ v2=3*pow(1-vv,2)*vv; \ v3=3*(1-vv)*pow(vv,2); \ v4=pow(vv,3); \ \ Bz1_Px_step=v1*Bz1_Px1_step+v2*Bz1_Px2_step+v3*Bz1_Px3_step+v4*Bz1_Px4_step; \ Bz1_Py_step=v1*Bz1_Py1_step+v2*Bz1_Py2_step+v3*Bz1_Py3_step+v4*Bz1_Py4_step; \ Bz1_Pz_step=v1*Bz1_Pz1_step+v2*Bz1_Pz2_step+v3*Bz1_Pz3_step+v4*Bz1_Pz4_step; \ Bz1_P_step=vector(Bz1_Px_step,Bz1_Py_step,Bz1_Pz_step); \ /* Bz1_P_step=vector "current" (Bz1_Px_step,Bz1_Py_step,Bz1_Pz_step);*/ \ /* Bz1_P_step=point(Bz1_Px_step,Bz1_Py_step,Bz1_Pz_step);*/ \ Bz2_Px_step=v1*Bz2_Px1_step+v2*Bz2_Px2_step+v3*Bz2_Px3_step+v4*Bz2_Px4_step; \ Bz2_Py_step=v1*Bz2_Py1_step+v2*Bz2_Py2_step+v3*Bz2_Py3_step+v4*Bz2_Py4_step; \ Bz2_Pz_step=v1*Bz2_Pz1_step+v2*Bz2_Pz2_step+v3*Bz2_Pz3_step+v4*Bz2_Pz4_step; \ Bz2_P_step=vector(Bz2_Px_step,Bz2_Py_step,Bz2_Pz_step); \ /* Bz2_P_step=vector "current" (Bz2_Px_step,Bz2_Py_step,Bz2_Pz_step);*/ \ /* Bz2_P_step=point(Bz2_Px_step,Bz2_Py_step,Bz2_Pz_step);*/ \ } \ \ v1=pow(1-(vv+b),3); \ v2=3*pow(1-(vv+b),2)*(vv+b); \ v3=3*(1-(vv+b))*pow((vv+b),2); \ v4=pow(vv+b,3); \ \ Bz3_Px_step=v1*Bz1_Px1_step+v2*Bz1_Px2_step+v3*Bz1_Px3_step+v4*Bz1_Px4_step; \ Bz3_Py_step=v1*Bz1_Py1_step+v2*Bz1_Py2_step+v3*Bz1_Py3_step+v4*Bz1_Py4_step; \ Bz3_Pz_step=v1*Bz1_Pz1_step+v2*Bz1_Pz2_step+v3*Bz1_Pz3_step+v4*Bz1_Pz4_step; \ Bz3_P_step=vector(Bz3_Px_step,Bz3_Py_step,Bz3_Pz_step); \ /* Bz3_P_step=vector "current" (Bz3_Px_step,Bz3_Py_step,Bz3_Pz_step);*/ \ /* Bz3_P_step=point(Bz3_Px_step,Bz3_Py_step,Bz3_Pz_step);*/ \ Bz4_Px_step=v1*Bz2_Px1_step+v2*Bz2_Px2_step+v3*Bz2_Px3_step+v4*Bz2_Px4_step; \ Bz4_Py_step=v1*Bz2_Py1_step+v2*Bz2_Py2_step+v3*Bz2_Py3_step+v4*Bz2_Py4_step; \ Bz4_Pz_step=v1*Bz2_Pz1_step+v2*Bz2_Pz2_step+v3*Bz2_Pz3_step+v4*Bz2_Pz4_step; \ Bz4_P_step=vector(Bz4_Px_step,Bz4_Py_step,Bz4_Pz_step); \ /* Bz4_P_step=vector "current" (Bz4_Px_step,Bz4_Py_step,Bz4_Pz_step);*/ \ /* Bz4_P_step=point(Bz4_Px_step,Bz4_Py_step,Bz4_Pz_step);*/ \ #define get_u(P00,P10,P20,P30,P01,P11,P21,P31,P02,P12,P22,P32,P03,P13,P23,P33,a,b) \ if (a==1) { \ u1=pow(1-uudiv,3); \ u2=3*pow(1-uudiv,2)*uudiv; \ u3=3*(1-uudiv)*pow(uudiv,2); \ u4=pow(uudiv,3); \ \ Bz1_Px1=u1*xcomp(P00)+u2*xcomp(P10)+u3*xcomp(P20)+u4*xcomp(P30); \ Bz1_Px2=u1*xcomp(P01)+u2*xcomp(P11)+u3*xcomp(P21)+u4*xcomp(P31); \ Bz1_Px3=u1*xcomp(P02)+u2*xcomp(P12)+u3*xcomp(P22)+u4*xcomp(P32); \ Bz1_Px4=u1*xcomp(P03)+u2*xcomp(P13)+u3*xcomp(P23)+u4*xcomp(P33); \ Bz1_Py1=u1*ycomp(P00)+u2*ycomp(P10)+u3*ycomp(P20)+u4*ycomp(P30); \ Bz1_Py2=u1*ycomp(P01)+u2*ycomp(P11)+u3*ycomp(P21)+u4*ycomp(P31); \ Bz1_Py3=u1*ycomp(P02)+u2*ycomp(P12)+u3*ycomp(P22)+u4*ycomp(P32); \ Bz1_Py4=u1*ycomp(P03)+u2*ycomp(P13)+u3*ycomp(P23)+u4*ycomp(P33); \ Bz1_Pz1=u1*zcomp(P00)+u2*zcomp(P10)+u3*zcomp(P20)+u4*zcomp(P30); \ Bz1_Pz2=u1*zcomp(P01)+u2*zcomp(P11)+u3*zcomp(P21)+u4*zcomp(P31); \ Bz1_Pz3=u1*zcomp(P02)+u2*zcomp(P12)+u3*zcomp(P22)+u4*zcomp(P32); \ Bz1_Pz4=u1*zcomp(P03)+u2*zcomp(P13)+u3*zcomp(P23)+u4*zcomp(P33); \ } \ \ u1=pow(1-(uudiv+b),3); \ u2=3*pow(1-(uudiv+b),2)*(uudiv+b); \ u3=3*(1-(uudiv+b))*pow((uudiv+b),2); \ u4=pow((uudiv+b),3); \ \ Bz2_Px1=u1*xcomp(P00)+u2*xcomp(P10)+u3*xcomp(P20)+u4*xcomp(P30); \ Bz2_Px2=u1*xcomp(P01)+u2*xcomp(P11)+u3*xcomp(P21)+u4*xcomp(P31); \ Bz2_Px3=u1*xcomp(P02)+u2*xcomp(P12)+u3*xcomp(P22)+u4*xcomp(P32); \ Bz2_Px4=u1*xcomp(P03)+u2*xcomp(P13)+u3*xcomp(P23)+u4*xcomp(P33); \ Bz2_Py1=u1*ycomp(P00)+u2*ycomp(P10)+u3*ycomp(P20)+u4*ycomp(P30); \ Bz2_Py2=u1*ycomp(P01)+u2*ycomp(P11)+u3*ycomp(P21)+u4*ycomp(P31); \ Bz2_Py3=u1*ycomp(P02)+u2*ycomp(P12)+u3*ycomp(P22)+u4*ycomp(P32); \ Bz2_Py4=u1*ycomp(P03)+u2*ycomp(P13)+u3*ycomp(P23)+u4*ycomp(P33); \ Bz2_Pz1=u1*zcomp(P00)+u2*zcomp(P10)+u3*zcomp(P20)+u4*zcomp(P30); \ Bz2_Pz2=u1*zcomp(P01)+u2*zcomp(P11)+u3*zcomp(P21)+u4*zcomp(P31); \ Bz2_Pz3=u1*zcomp(P02)+u2*zcomp(P12)+u3*zcomp(P22)+u4*zcomp(P32); \ Bz2_Pz4=u1*zcomp(P03)+u2*zcomp(P13)+u3*zcomp(P23)+u4*zcomp(P33); \ #define get_uv(Bz1_Px1,Bz1_Py1,Bz1_Pz1,Bz1_Px2,Bz1_Py2,Bz1_Pz2,Bz1_Px3,Bz1_Py3,Bz1_Pz3,Bz1_Px4,Bz1_Py4,Bz1_Pz4,Bz2_Px1,Bz2_Py1,Bz2_Pz1,Bz2_Px2,Bz2_Py2,Bz2_Pz2,Bz2_Px3,Bz2_Py3,Bz2_Pz3,Bz2_Px4,Bz2_Py4,Bz2_Pz4,a,b) \ if (a==1) { \ v1=pow(1-vvdiv,3); \ v2=3*pow(1-vvdiv,2)*vvdiv; \ v3=3*(1-vvdiv)*pow(vvdiv,2); \ v4=pow(vvdiv,3); \ \ Bz1_Px=v1*Bz1_Px1+v2*Bz1_Px2+v3*Bz1_Px3+v4*Bz1_Px4; \ Bz1_Py=v1*Bz1_Py1+v2*Bz1_Py2+v3*Bz1_Py3+v4*Bz1_Py4; \ Bz1_Pz=v1*Bz1_Pz1+v2*Bz1_Pz2+v3*Bz1_Pz3+v4*Bz1_Pz4; \ Bz1_P=vector(Bz1_Px,Bz1_Py,Bz1_Pz); \ /* Bz1_P=vector "current" (Bz1_Px,Bz1_Py,Bz1_Pz);*/ \ /* Bz1_P=point(Bz1_Px,Bz1_Py,Bz1_Pz);*/ \ Bz2_Px=v1*Bz2_Px1+v2*Bz2_Px2+v3*Bz2_Px3+v4*Bz2_Px4; \ Bz2_Py=v1*Bz2_Py1+v2*Bz2_Py2+v3*Bz2_Py3+v4*Bz2_Py4; \ Bz2_Pz=v1*Bz2_Pz1+v2*Bz2_Pz2+v3*Bz2_Pz3+v4*Bz2_Pz4; \ Bz2_P=vector(Bz2_Px,Bz2_Py,Bz2_Pz); \ /* Bz2_P=vector "current" (Bz2_Px,Bz2_Py,Bz2_Pz);*/ \ /* Bz2_P=point(Bz2_Px,Bz2_Py,Bz2_Pz);*/ \ } \ \ v1=pow(1-(vvdiv+b),3); \ v2=3*pow(1-(vvdiv+b),2)*(vvdiv+b); \ v3=3*(1-(vvdiv+b))*pow((vvdiv+b),2); \ v4=pow(vvdiv+b,3); \ \ Bz3_Px=v1*Bz1_Px1+v2*Bz1_Px2+v3*Bz1_Px3+v4*Bz1_Px4; \ Bz3_Py=v1*Bz1_Py1+v2*Bz1_Py2+v3*Bz1_Py3+v4*Bz1_Py4; \ Bz3_Pz=v1*Bz1_Pz1+v2*Bz1_Pz2+v3*Bz1_Pz3+v4*Bz1_Pz4; \ Bz3_P=vector(Bz3_Px,Bz3_Py,Bz3_Pz); \ /* Bz3_P=vector "current" (Bz3_Px,Bz3_Py,Bz3_Pz);*/ \ /* Bz3_P=point(Bz3_Px,Bz3_Py,Bz3_Pz);*/ \ Bz4_Px=v1*Bz2_Px1+v2*Bz2_Px2+v3*Bz2_Px3+v4*Bz2_Px4; \ Bz4_Py=v1*Bz2_Py1+v2*Bz2_Py2+v3*Bz2_Py3+v4*Bz2_Py4; \ Bz4_Pz=v1*Bz2_Pz1+v2*Bz2_Pz2+v3*Bz2_Pz3+v4*Bz2_Pz4; \ Bz4_P=vector(Bz4_Px,Bz4_Py,Bz4_Pz); \ /* Bz4_P=vector "current" (Bz4_Px,Bz4_Py,Bz4_Pz);*/ \ /* Bz4_P=point(Bz4_Px,Bz4_Py,Bz4_Pz);*/ \ #define judge_intersection_bezier44(P1,P2,a,b,g,h,P00,P10,P20,P30,P01,P11,P21,P31,P02,P12,P22,P32,P03,P13,P23,P33) \ Px=xcomp(P1); \ Py=ycomp(P1); \ Pz=zcomp(P1); \ Rx=xcomp(P2); \ Ry=ycomp(P2); \ Rz=zcomp(P2); \ \ intersect=0; \ d_max=-100000000; \ d_min=100000000; \ \ count_uu=1; \ \ for (uu=0;uu<1;uu+=a) { \ get_u_step(P00,P10,P20,P30,P01,P11,P21,P31,P02,P12,P22,P32,P03,P13,P23,P33,count_uu,a); \ \ count_vv=1; \ \ for (vv=0;vv<1;vv+=b) { \ get_uv_step(Bz1_Px1_step,Bz1_Py1_step,Bz1_Pz1_step,Bz1_Px2_step,Bz1_Py2_step,Bz1_Pz2_step,Bz1_Px3_step,Bz1_Py3_step,Bz1_Pz3_step,Bz1_Px4_step,Bz1_Py4_step,Bz1_Pz4_step,Bz2_Px1_step,Bz2_Py1_step,Bz2_Pz1_step,Bz2_Px2_step,Bz2_Py2_step,Bz2_Pz2_step,Bz2_Px3_step,Bz2_Py3_step,Bz2_Pz3_step,Bz2_Px4_step,Bz2_Py4_step,Bz2_Pz4_step,count_vv,b); \ \ judge_trace4(Bz1_P_step,Bz2_P_step,Bz3_P_step,Bz4_P_step,P1,P2); \ if (trace_judge==1) { \ count_uudiv=1; \ for (uudiv=uu;uudiv0) { \ judge_inout(Bz1_P,Bz2_P,Bz3_P,dummy_intersectP,dummy_intersectP_p,intersect,P1,Bz_N); \ } \ } \ \ dummyP1=Bz2_P-Bz4_P; \ dummyP2=Bz3_P-Bz4_P; \ Bz_N=dummyP2^dummyP1; \ Bz_N=normalize(Bz_N); \ /* Bz_N=faceforward(Bz_N,P2); \ Bz_N=faceforward(Bz_N,I);*/ \ change_vector(Bz_N,P2); \ aa=xcomp(Bz_N); \ bb=ycomp(Bz_N); \ cc=zcomp(Bz_N); \ dd=-aa*Bz4_Px-bb*Bz4_Py-cc*Bz4_Pz; \ \ judge=aa*Rx+bb*Ry+cc*Rz; \ if (judge!=0) { \ tt=(-aa*Px-bb*Py-cc*Pz-dd)/judge; \ dummy_intersectP=vector(tt*Rx+Px,tt*Ry+Py,tt*Rz+Pz); \ dummy_intersectP_p=point(xcomp(dummy_intersectP),ycomp(dummy_intersectP),zcomp(dummy_intersectP)); \ /* dummy_intersectP=vector "current" (tt*Rx+Px,tt*Ry+Py,tt*Rz+Pz); \ dummy_intersectP_p=point "current" (xcomp(dummy_intersectP),ycomp(dummy_intersectP),zcomp(dummy_intersectP));*/ \ /* dummy_intersectP=point(tt*Rx+Px,tt*Ry+Py,tt*Rz+Pz);*/ \ judge_foreback(P1,dummy_intersectP,P2); \ if (judge>0) { \ judge_inout(Bz4_P,Bz2_P,Bz3_P,dummy_intersectP,dummy_intersectP_p,intersect,P1,Bz_N); \ } \ } \ \ Bz1_Px=Bz3_Px; \ Bz1_Py=Bz3_Py; \ Bz1_Pz=Bz3_Pz; \ Bz1_P=Bz3_P; \ Bz2_Px=Bz4_Px; \ Bz2_Py=Bz4_Py; \ Bz2_Pz=Bz4_Pz; \ Bz2_P=Bz4_P; \ \ count_vvdiv+=1; \ } \ \ Bz1_Px1=Bz2_Px1; \ Bz1_Px2=Bz2_Px2; \ Bz1_Px3=Bz2_Px3; \ Bz1_Px4=Bz2_Px4; \ Bz1_Py1=Bz2_Py1; \ Bz1_Py2=Bz2_Py2; \ Bz1_Py3=Bz2_Py3; \ Bz1_Py4=Bz2_Py4; \ Bz1_Pz1=Bz2_Pz1; \ Bz1_Pz2=Bz2_Pz2; \ Bz1_Pz3=Bz2_Pz3; \ Bz1_Pz4=Bz2_Pz4; \ \ count_uudiv+=1; \ } \ } \ Bz1_Px_step=Bz3_Px_step; \ Bz1_Py_step=Bz3_Py_step; \ Bz1_Pz_step=Bz3_Pz_step; \ Bz1_P_step=Bz3_P_step; \ Bz2_Px_step=Bz4_Px_step; \ Bz2_Py_step=Bz4_Py_step; \ Bz2_Pz_step=Bz4_Pz_step; \ Bz2_P_step=Bz4_P_step; \ \ count_vv+=1; \ } \ \ Bz1_Px1_step=Bz2_Px1_step; \ Bz1_Px2_step=Bz2_Px2_step; \ Bz1_Px3_step=Bz2_Px3_step; \ Bz1_Px4_step=Bz2_Px4_step; \ Bz1_Py1_step=Bz2_Py1_step; \ Bz1_Py2_step=Bz2_Py2_step; \ Bz1_Py3_step=Bz2_Py3_step; \ Bz1_Py4_step=Bz2_Py4_step; \ Bz1_Pz1_step=Bz2_Pz1_step; \ Bz1_Pz2_step=Bz2_Pz2_step; \ Bz1_Pz3_step=Bz2_Pz3_step; \ Bz1_Pz4_step=Bz2_Pz4_step; \ \ count_uu+=1; \ } \ surface rayteapot ( float ZERO=0.002; float Ka=1,Kd=0.5,Kr=0.75,Ks=0.5,roughness=0.1; color specularcolor=color(1,1,1); float eta=1; float step_uu=0.1,step_vv=0.1; float div_uu=0.01,div_vv=0.01; string ray_switch="off",shd_switch="off",light_type="point",decayshd_switch="off"; float ray_sample=1,shd_sample=1,blur_size=0; float judge_p_number=33; float max_intersection_count=5; float Bz_index=0; vector Bz00[33]={vector "object" (-600,-600,0),vector "object" (-80.0,0.0,30.0),vector "object" (0.0,-80.0,30.0),vector "object" (-60.0,0.0,90.0),vector "object" (0.0,-60.0,90.0),vector "object" (-56.0,0.0,90.0),vector "object" (0.0,-56.0,90.0),vector "object" (80.0,0.0,30.0),vector "object" (0.0,80.0,30.0),vector "object" (60.0,0.0,90.0),vector "object" (0.0,60.0,90.0),vector "object" (56.0,0.0,90.0),vector "object" (0.0,56.0,90.0),vector "object" (68.0,0.0,51.0),vector "object" (68.0,0.0,18.0),vector "object" (108.0,0.0,90.0),vector "object" (132.0,0.0,90.0),vector "object" (-64.0,0.0,75.0),vector "object" (-60.0,0.0,84.0),vector "object" (-108.0,0.0,66.0),vector "object" (-120.0,0.0,66.0),vector "object" (8.0,0.0,102.0),vector "object" (0.0,8.0,102.0),vector "object" (-8.0,0.0,102.0),vector "object" (0.0,-8.0,102.0),vector "object" (0.0,0.0,120.0),vector "object" (0.0,0.0,120.0),vector "object" (0.0,0.0,120.0),vector "object" (0.0,0.0,120.0),vector "object" (50.0,0.0,90.0),vector "object" (0.0,50.0,90.0),vector "object" (-50.0,0.0,90.0),vector "object" (0.0,-50.0,90.0)}; vector Bz10[33]={vector "object" (-200,-600,0),vector "object" (-80.0,-44.8,30.0),vector "object" (44.8,-80.0,30.0),vector "object" (-60.0,-33.6,90.0),vector "object" (33.6,-60.0,90.0),vector "object" (-56.0,-31.36,90.0),vector "object" (31.36,-56.0,90.0),vector "object" (80.0,44.80,30.0),vector "object" (-44.80,80.0,30.0),vector "object" (60.0,33.60,90.0),vector "object" (-33.60,60.0,90.0),vector "object" (56.0,31.36,90.0),vector "object" (-31.36,56.0,90.0),vector "object" (68.0,26.40,51.0),vector "object" (68.0,-26.40,18.0),vector "object" (108.0,10.0,90.0),vector "object" (132.0,-10.0,90.0),vector "object" (-64.0,12.0,75.0),vector "object" (-60.0,-12.0,84.0),vector "object" (-108.0,12.0,66.0),vector "object" (-120.0,-12.0,66.0),vector "object" (8.0,4.48,102.0),vector "object" (-4.48,8.0,102.0),vector "object" (-8.0,-4.48,102.0),vector "object" (4.48,-8.0,102.0),vector "object" (0.0,0.0,120.0),vector "object" (0.0,0.0,120.0),vector "object" (0.0,0.0,120.0),vector "object" (0.0,0.0,120.0),vector "object" (50.0,28.0,90.0),vector "object" (-28.0,50.0,90.0),vector "object" (-50.0,-28.0,90.0),vector "object" (28.0,-50.0,90.0)}; vector Bz20[33]={vector "object" (200,-600,0),vector "object" (-44.8,-80.0,30.0),vector "object" (80.0,-44.8,30.0),vector "object" (-33.6,-60.0,90.0),vector "object" (60.0,-33.6,90.0),vector "object" (-31.36,-56.0,90.0),vector "object" (56.0,-31.36,90.0),vector "object" (44.80,80.0,30.0),vector "object" (-80.0,44.80,30.0),vector "object" (33.60,60.0,90.0),vector "object" (-60.0,33.60,90.0),vector "object" (31.36,56.0,90.0),vector "object" (-56.0,31.36,90.0),vector "object" (68.0,26.40,18.0),vector "object" (68.0,-26.40,51.0),vector "object" (132.0,10.0,90.0),vector "object" (108.0,-10.0,90.0),vector "object" (-60.0,12.0,84.0),vector "object" (-64.0,-12.0,75.0),vector "object" (-120.0,12.0,66.0),vector "object" (-108.0,-12.0,66.0),vector "object" (4.48,8.0,102.0),vector "object" (-8.0,4.48,102.0),vector "object" (-4.48,-8.0,102.0),vector "object" (8.0,-4.48,102.0),vector "object" (0.0,0.0,120.0),vector "object" (0.0,0.0,120.0),vector "object" (0.0,0.0,120.0),vector "object" (0.0,0.0,120.0),vector "object" (28.0,50.0,90.0),vector "object" (-50.0,28.0,90.0),vector "object" (-28.0,-50.0,90.0),vector "object" (50.0,-28.0,90.0)}; vector Bz30[33]={vector "object" (600,-600,0),vector "object" (0.0,-80.0,30.0),vector "object" (80.0,0.0,30.0),vector "object" (0.0,-60.0,90.0),vector "object" (60.0,0.0,90.0),vector "object" (0.0,-56.0,90.0),vector "object" (56.0,0.0,90.0),vector "object" (0.0,80.0,30.0),vector "object" (-80.0,0.0,30.0),vector "object" (0.0,60.0,90.0),vector "object" (-60.0,0.0,90.0),vector "object" (0.0,56.0,90.0),vector "object" (-56.0,0.0,90.0),vector "object" (68.0,0.0,18.0),vector "object" (68.0,0.0,51.0),vector "object" (132.0,0.0,90.0),vector "object" (108.0,0.0,90.0),vector "object" (-60.0,0.0,84.0),vector "object" (-64.0,0.0,75.0),vector "object" (-120.0,0.0,66.0),vector "object" (-108.0,0.0,66.0),vector "object" (0.0,8.0,102.0),vector "object" (-8.0,0.0,102.0),vector "object" (0.0,-8.0,102.0),vector "object" (8.0,0.0,102.0),vector "object" (0.0,0.0,120.0),vector "object" (0.0,0.0,120.0),vector "object" (0.0,0.0,120.0),vector "object" (0.0,0.0,120.0),vector "object" (0.0,50.0,90.0),vector "object" (-50.0,0.0,90.0),vector "object" (0.0,-50.0,90.0),vector "object" (50.0,0.0,90.0)}; vector Bz01[33]={vector "object" (-600,-200,0),vector "object" (-80.0,0.0,12.0),vector "object" (0.0,-80.0,12.0),vector "object" (-70.0,0.0,69.0),vector "object" (0.0,-70.0,69.0),vector "object" (-53.5,0.0,95.25),vector "object" (0.0,-53.5,95.25),vector "object" (80.0,0.0,12.0),vector "object" (0.0,80.0,12.0),vector "object" (70.0,0.0,69.0),vector "object" (0.0,70.0,69.0),vector "object" (53.50,0.0,95.25),vector "object" (0.0,53.50,95.25),vector "object" (104.0,0.0,51.0),vector "object" (124.0,0.0,27.0),vector "object" (112.0,0.0,93.0),vector "object" (141.0,0.0,93.75),vector "object" (-92.0,0.0,75.0),vector "object" (-100.0,0.0,84.0),vector "object" (-108.0,0.0,57.0),vector "object" (-120.0,0.0,48.0),vector "object" (16.0,0.0,96.0),vector "object" (0.0,16.0,96.0),vector "object" (-16.0,0.0,96.0),vector "object" (0.0,-16.0,96.0),vector "object" (32.0,0.0,120.0),vector "object" (0.0,32.0,120.0),vector "object" (-32.0,0.0,120.0),vector "object" (0.0,-32.0,120.0),vector "object" (52.0,0.0,90.0),vector "object" (0.0,52.0,90.0),vector "object" (-52.0,0.0,90.0),vector "object" (0.0,-52.0,90.0)}; vector Bz11[33]={vector "object" (-200,-200,0),vector "object" (-80.0,-44.8,12.0),vector "object" (44.8,-80.0,12.0),vector "object" (-70.0,-39.20,69.0),vector "object" (39.20,-70.0,69.0),vector "object" (-53.5,-29.96,95.25),vector "object" (29.96,-53.5,95.25),vector "object" (80.0,44.80,12.0),vector "object" (-44.80,80.0,12.0),vector "object" (70.0,39.20,69.0),vector "object" (-39.20,70.0,69.0),vector "object" (53.50,29.96,95.25),vector "object" (-29.96,53.50,95.25),vector "object" (104.0,26.40,51.0),vector "object" (124.0,-26.40,27.0),vector "object" (112.0,10.0,93.0),vector "object" (141.0,-10.0,93.75),vector "object" (-92.0,12.0,75.0),vector "object" (-100.0,-12.0,84.0),vector "object" (-108.0,12.0,57.0),vector "object" (-120.0,-12.0,48.0),vector "object" (16.0,8.96,96.0),vector "object" (-8.96,16.0,96.0),vector "object" (-16.0,-8.96,96.0),vector "object" (8.96,-16.0,96.0),vector "object" (32.0,18.0,120.0),vector "object" (-18.0,32.0,120.0),vector "object" (-32.0,-18.0,120.0),vector "object" (18.0,-32.0,120.0),vector "object" (52.0,29.12,90.0),vector "object" (-29.12,52.0,90.0),vector "object" (-52.0,-29.12,90.0),vector "object" (29.12,-52.0,90.0)}; vector Bz21[33]={vector "object" (200,-200,0),vector "object" (-44.8,-80.0,12.0),vector "object" (80.0,-44.8,12.0),vector "object" (-39.20,-70.0,69.0),vector "object" (70.0,-39.20,69.0),vector "object" (-29.96,-53.5,95.25),vector "object" (53.5,-29.96,95.25),vector "object" (44.80,80.0,12.0),vector "object" (-80.0,44.80,12.0),vector "object" (39.20,70.0,69.0),vector "object" (-70.0,39.20,69.0),vector "object" (29.96,53.50,95.25),vector "object" (-53.50,29.96,95.25),vector "object" (124.0,26.40,27.0),vector "object" (104.0,-26.40,51.0),vector "object" (141.0,10.0,93.75),vector "object" (112.0,-10.0,93.0),vector "object" (-100.0,12.0,84.0),vector "object" (-92.0,-12.0,75.0),vector "object" (-120.0,12.0,48.0),vector "object" (-108.0,-12.0,57.0),vector "object" (8.96,16.0,96.0),vector "object" (-16.0,8.96,96.0),vector "object" (-8.96,-16.0,96.0),vector "object" (16.0,-8.96,96.0),vector "object" (18.0,32.0,120.0),vector "object" (-32.0,18.0,120.0),vector "object" (-18.0,-32.0,120.0),vector "object" (32.0,-18.0,120.0),vector "object" (29.12,52.0,90.0),vector "object" (-52.0,29.12,90.0),vector "object" (-29.12,-52.0,90.0),vector "object" (52.0,-29.12,90.0)}; vector Bz31[33]={vector "object" (600,-200,0),vector "object" (0.0,-80.0,12.0),vector "object" (80.0,0.0,12.0),vector "object" (0.0,-70.0,69.0),vector "object" (70.0,0.0,69.0),vector "object" (0.0,-53.5,95.25),vector "object" (53.5,0.0,95.25),vector "object" (0.0,80.0,12.0),vector "object" (-80.0,0.0,12.0),vector "object" (0.0,70.0,69.0),vector "object" (-70.0,0.0,69.0),vector "object" (0.0,53.50,95.25),vector "object" (-53.50,0.0,95.25),vector "object" (124.0,0.0,27.0),vector "object" (104.0,0.0,51.0),vector "object" (141.0,0.0,93.75),vector "object" (112.0,0.0,93.0),vector "object" (-100.0,0.0,84.0),vector "object" (-92.0,0.0,75.0),vector "object" (-120.0,0.0,48.0),vector "object" (-108.0,0.0,57.0),vector "object" (0.0,16.0,96.0),vector "object" (-16.0,0.0,96.0),vector "object" (0.0,-16.0,96.0),vector "object" (16.0,0.0,96.0),vector "object" (0.0,32.0,120.0),vector "object" (-32.0,0.0,120.0),vector "object" (0.0,-32.0,120.0),vector "object" (32.0,0.0,120.0),vector "object" (0.0,52.0,90.0),vector "object" (-52.0,0.0,90.0),vector "object" (0.0,-52.0,90.0),vector "object" (52.0,0.0,90.0)}; vector Bz02[33]={vector "object" (-600,200,0),vector "object" (-60.0,0.0,3.0),vector "object" (0.0,-60.0,3.0),vector "object" (-80.0,0.0,48.0),vector "object" (0.0,-80.0,48.0),vector "object" (-57.5,0.0,95.25),vector "object" (0.0,-57.5,95.25),vector "object" (60.0,0.0,3.0),vector "object" (0.0,60.0,3.0),vector "object" (80.0,0.0,48.0),vector "object" (0.0,80.0,48.0),vector "object" (57.50,0.0,95.25),vector "object" (0.0,57.50,95.25),vector "object" (92.0,0.0,78.0),vector "object" (96.0,0.0,75.0),vector "object" (116.0,0.0,93.0),vector "object" (138.0,0.0,94.50),vector "object" (-108.0,0.0,75.0),vector "object" (-120.0,0.0,84.0),vector "object" (-100.0,0.0,39.0),vector "object" (-106.0,0.0,31.50),vector "object" (52.0,0.0,96.0),vector "object" (0.0,52.0,96.0),vector "object" (-52.0,0.0,96.0),vector "object" (0.0,-52.0,96.0),vector "object" (0.0,0.0,108.0),vector "object" (0.0,0.0,108.0),vector "object" (0.0,0.0,108.0),vector "object" (0.0,0.0,108.0),vector "object" (54.0,0.0,90.0),vector "object" (0.0,54.0,90.0),vector "object" (-54.0,0.0,90.0),vector "object" (0.0,-54.0,90.0)}; vector Bz12[33]={vector "object" (-200,200,0),vector "object" (-60.0,-33.6,3.0),vector "object" (33.6,-60.0,3.0),vector "object" (-80.0,-44.8,48.0),vector "object" (44.8,-80.0,48.0),vector "object" (-57.5,-32.20,95.25),vector "object" (32.20,-57.5,95.25),vector "object" (60.0,33.60,3.0),vector "object" (-33.60,60.0,3.0),vector "object" (80.0,44.80,48.0),vector "object" (-44.80,80.0,48.0),vector "object" (57.50,32.20,95.25),vector "object" (-32.20,57.50,95.25),vector "object" (92.0,10.0,78.0),vector "object" (96.0,-10.0,75.0),vector "object" (116.0,6.0,93.0),vector "object" (138.0,-6.0,94.50),vector "object" (-108.0,12.0,75.0),vector "object" (-120.0,-12.0,84.0),vector "object" (-100.0,12.0,39.0),vector "object" (-106.0,-12.0,31.50),vector "object" (52.0,29.12,96.0),vector "object" (-29.12,52.0,96.0),vector "object" (-52.0,-29.12,96.0),vector "object" (29.12,-52.0,96.0),vector "object" (0.0,0.0,108.0),vector "object" (0.0,0.0,108.0),vector "object" (0.0,0.0,108.0),vector "object" (0.0,0.0,108.0),vector "object" (54.0,30.24,90.0),vector "object" (-30.24,54.0,90.0),vector "object" (-54.0,-30.24,90.0),vector "object" (30.24,-54.0,90.0)}; vector Bz22[33]={vector "object" (200,200,0),vector "object" (-33.6,-60.0,3.0),vector "object" (60.0,-33.6,3.0),vector "object" (-44.8,-80.0,48.0),vector "object" (80.0,-44.8,48.0),vector "object" (-32.20,-57.5,95.25),vector "object" (57.5,-32.20,95.25),vector "object" (33.60,60.0,3.0),vector "object" (-60.0,33.60,3.0),vector "object" (44.80,80.0,48.0),vector "object" (-80.0,44.80,48.0),vector "object" (32.20,57.50,95.25),vector "object" (-57.50,32.20,95.25),vector "object" (96.0,10.0,75.0),vector "object" (92.0,-10.0,78.0),vector "object" (138.0,6.0,94.50),vector "object" (116.0,-6.0,93.0),vector "object" (-120.0,12.0,84.0),vector "object" (-108.0,-12.0,75.0),vector "object" (-106.0,12.0,31.50),vector "object" (-100.0,-12.0,39.0),vector "object" (29.12,52.0,96.0),vector "object" (-52.0,29.12,96.0),vector "object" (-29.12,-52.0,96.0),vector "object" (52.0,-29.12,96.0),vector "object" (0.0,0.0,108.0),vector "object" (0.0,0.0,108.0),vector "object" (0.0,0.0,108.0),vector "object" (0.0,0.0,108.0),vector "object" (30.24,54.0,90.0),vector "object" (-54.0,30.24,90.0),vector "object" (-30.24,-54.0,90.0),vector "object" (54.0,-30.24,90.0)}; vector Bz32[33]={vector "object" (600,200,0),vector "object" (0.0,-60.0,3.0),vector "object" (60.0,0.0,3.0),vector "object" (0.0,-80.0,48.0),vector "object" (80.0,0.0,48.0),vector "object" (0.0,-57.5,95.25),vector "object" (57.5,0.0,95.25),vector "object" (0.0,60.0,3.0),vector "object" (-60.0,0.0,3.0),vector "object" (0.0,80.0,48.0),vector "object" (-80.0,0.0,48.0),vector "object" (0.0,57.50,95.25),vector "object" (-57.50,0.0,95.25),vector "object" (96.0,0.0,75.0),vector "object" (92.0,0.0,78.0),vector "object" (138.0,0.0,94.50),vector "object" (116.0,0.0,93.0),vector "object" (-120.0,0.0,84.0),vector "object" (-108.0,0.0,75.0),vector "object" (-106.0,0.0,31.50),vector "object" (-100.0,0.0,39.0),vector "object" (0.0,52.0,96.0),vector "object" (-52.0,0.0,96.0),vector "object" (0.0,-52.0,96.0),vector "object" (52.0,0.0,96.0),vector "object" (0.0,0.0,108.0),vector "object" (0.0,0.0,108.0),vector "object" (0.0,0.0,108.0),vector "object" (0.0,0.0,108.0),vector "object" (0.0,54.0,90.0),vector "object" (-54.0,0.0,90.0),vector "object" (0.0,-54.0,90.0),vector "object" (54.0,0.0,90.0)}; vector Bz03[33]={vector "object" (-600,600,0),vector "object" (-60.0,0.0,0.0),vector "object" (0.0,-60.0,0.0),vector "object" (-80.0,0.0,30.0),vector "object" (0.0,-80.0,30.0),vector "object" (-60.0,0.0,90.0),vector "object" (0.0,-60.0,90.0),vector "object" (60.0,0.0,0.0),vector "object" (0.0,60.0,0.0),vector "object" (80.0,0.0,30.0),vector "object" (0.0,80.0,30.0),vector "object" (60.0,0.0,90.0),vector "object" (0.0,60.0,90.0),vector "object" (108.0,0.0,90.0),vector "object" (132.0,0.0,90.0),vector "object" (112.0,0.0,90.0),vector "object" (128.0,0.0,90.0),vector "object" (-108.0,0.0,66.0),vector "object" (-120.0,0.0,66.0),vector "object" (-80.0,0.0,30.0),vector "object" (-76.0,0.0,18.0),vector "object" (52.0,0.0,90.0),vector "object" (0.0,52.0,90.0),vector "object" (-52.0,0.0,90.0),vector "object" (0.0,-52.0,90.0),vector "object" (8.0,0.0,102.0),vector "object" (0.0,8.0,102.0),vector "object" (-8.0,0.0,102.0),vector "object" (0.0,-8.0,102.0),vector "object" (56.0,0.0,90.0),vector "object" (0.0,56.0,90.0),vector "object" (-56.0,0.0,90.0),vector "object" (0.0,-56.0,90.0)}; vector Bz13[33]={vector "object" (-200,600,0),vector "object" (-60.0,-33.6,0.0),vector "object" (33.6,-60.0,0.0),vector "object" (-80.0,-44.8,30.0),vector "object" (44.8,-80.0,30.0),vector "object" (-60.0,-33.6,90.0),vector "object" (33.6,-60.0,90.0),vector "object" (60.0,33.60,0.0),vector "object" (-33.60,60.0,0.0),vector "object" (80.0,44.80,30.0),vector "object" (-44.80,80.0,30.0),vector "object" (60.0,33.60,90.0),vector "object" (-33.60,60.0,90.0),vector "object" (108.0,10.0,90.0),vector "object" (132.0,-10.0,90.0),vector "object" (112.0,6.0,90.0),vector "object" (128.0,-6.0,90.0),vector "object" (-108.0,12.0,66.0),vector "object" (-120.0,-12.0,66.0),vector "object" (-80.0,12.0,30.0),vector "object" (-76.0,-12.0,18.0),vector "object" (52.0,29.12,90.0),vector "object" (-29.12,52.0,90.0),vector "object" (-52.0,-29.12,90.0),vector "object" (29.12,-52.0,90.0),vector "object" (8.0,4.48,102.0),vector "object" (-4.48,8.0,102.0),vector "object" (-8.0,-4.48,102.0),vector "object" (4.48,-8.0,102.0),vector "object" (56.0,31.36,90.0),vector "object" (-31.36,56.0,90.0),vector "object" (-56.0,-31.36,90.0),vector "object" (31.36,-56.0,90.0)}; vector Bz23[33]={vector "object" (200,600,0),vector "object" (-33.6,-60.0,0.0),vector "object" (60.0,-33.6,0.0),vector "object" (-44.8,-80.0,30.0),vector "object" (80.0,-44.8,30.0),vector "object" (-33.6,-60.0,90.0),vector "object" (60.0,-33.6,90.0),vector "object" (33.60,60.0,0.0),vector "object" (-60.0,33.60,0.0),vector "object" (44.80,80.0,30.0),vector "object" (-80.0,44.80,30.0),vector "object" (33.60,60.0,90.0),vector "object" (-60.0,33.60,90.0),vector "object" (132.0,10.0,90.0),vector "object" (108.0,-10.0,90.0),vector "object" (128.0,6.0,90.0),vector "object" (112.0,-6.0,90.0),vector "object" (-120.0,12.0,66.0),vector "object" (-108.0,-12.0,66.0),vector "object" (-76.0,12.0,18.0),vector "object" (-80.0,-12.0,30.0),vector "object" (29.12,52.0,90.0),vector "object" (-52.0,29.12,90.0),vector "object" (-29.12,-52.0,90.0),vector "object" (52.0,-29.12,90.0),vector "object" (4.48,8.0,102.0),vector "object" (-8.0,4.48,102.0),vector "object" (-4.48,-8.0,102.0),vector "object" (8.0,-4.48,102.0),vector "object" (31.36,56.0,90.0),vector "object" (-56.0,31.36,90.0),vector "object" (-31.36,-56.0,90.0),vector "object" (56.0,-31.36,90.0)}; vector Bz33[33]={vector "object" (600,600,0),vector "object" (0.0,-60.0,0.0),vector "object" (60.0,0.0,0.0),vector "object" (0.0,-80.0,30.0),vector "object" (80.0,0.0,30.0),vector "object" (0.0,-60.0,90.0),vector "object" (60.0,0.0,90.0),vector "object" (0.0,60.0,0.0),vector "object" (-60.0,0.0,0.0),vector "object" (0.0,80.0,30.0),vector "object" (-80.0,0.0,30.0),vector "object" (0.0,60.0,90.0),vector "object" (-60.0,0.0,90.0),vector "object" (132.0,0.0,90.0),vector "object" (108.0,0.0,90.0),vector "object" (128.0,0.0,90.0),vector "object" (112.0,0.0,90.0),vector "object" (-120.0,0.0,66.0),vector "object" (-108.0,0.0,66.0),vector "object" (-76.0,0.0,18.0),vector "object" (-80.0,0.0,30.0),vector "object" (0.0,52.0,90.0),vector "object" (-52.0,0.0,90.0),vector "object" (0.0,-52.0,90.0),vector "object" (52.0,0.0,90.0),vector "object" (0.0,8.0,102.0),vector "object" (-8.0,0.0,102.0),vector "object" (0.0,-8.0,102.0),vector "object" (8.0,0.0,102.0),vector "object" (0.0,56.0,90.0),vector "object" (-56.0,0.0,90.0),vector "object" (0.0,-56.0,90.0),vector "object" (56.0,0.0,90.0)}; float Bz_Ka[33]={1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1}; float Bz_Kd[33]={0.5,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1}; float Bz_Ks[33]={0.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5}; float Bz_Kr[33]={0,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75,0.75}; float Bz_roughness[33]={0.1,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025,0.025}; point Bz_cs[33]={point "object" (1,1,1),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75),point "object" (0.75,0.75,0.75)}; point Bz_opa[33]={point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1)}; point Bz_specularcs[33]={point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1),point "object" (1,1,1)}; string Bz_surfacetype[33]={"","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection","reflection"}; string Bz_shadingtype[33]={"matte","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic","plastic"}; ) { normal Nf; vector IN,V,H,LL; vector R,T; float kr,kt; vector spaceV,Pyz; float rotate_x,rotate_y,j_rotate; float transformPx,transformPy,transformPz; float box_x_min,box_x_max,box_y_min,box_y_max; float fore_judge,trace_judge; float judge; float intersect,d,d_max,d_min; float uu,vv,uudiv,vvdiv,u1,u2,u3,u4,v1,v2,v3,v4; float count_uu,count_vv,count_uudiv,count_vvdiv; float aa,bb,cc,dd,tt; float Px,Py,Pz; float Rx,Ry,Rz; vector Bz_N; vector Bz1_P,Bz2_P,Bz3_P,Bz4_P; float Bz1_Px1,Bz1_Py1,Bz1_Pz1,Bz1_Px2,Bz1_Py2,Bz1_Pz2,Bz1_Px3,Bz1_Py3,Bz1_Pz3,Bz1_Px4,Bz1_Py4,Bz1_Pz4; float Bz2_Px1,Bz2_Py1,Bz2_Pz1,Bz2_Px2,Bz2_Py2,Bz2_Pz2,Bz2_Px3,Bz2_Py3,Bz2_Pz3,Bz2_Px4,Bz2_Py4,Bz2_Pz4; float Bz1_Px,Bz1_Py,Bz1_Pz,Bz2_Px,Bz2_Py,Bz2_Pz,Bz3_Px,Bz3_Py,Bz3_Pz,Bz4_Px,Bz4_Py,Bz4_Pz; vector Bz1_P_step,Bz2_P_step,Bz3_P_step,Bz4_P_step; float Bz1_Px1_step,Bz1_Py1_step,Bz1_Pz1_step,Bz1_Px2_step,Bz1_Py2_step,Bz1_Pz2_step,Bz1_Px3_step,Bz1_Py3_step,Bz1_Pz3_step,Bz1_Px4_step,Bz1_Py4_step,Bz1_Pz4_step; float Bz2_Px1_step,Bz2_Py1_step,Bz2_Pz1_step,Bz2_Px2_step,Bz2_Py2_step,Bz2_Pz2_step,Bz2_Px3_step,Bz2_Py3_step,Bz2_Pz3_step,Bz2_Px4_step,Bz2_Py4_step,Bz2_Pz4_step; float Bz1_Px_step,Bz1_Py_step,Bz1_Pz_step,Bz2_Px_step,Bz2_Py_step,Bz2_Pz_step,Bz3_Px_step,Bz3_Py_step,Bz3_Pz_step,Bz4_Px_step,Bz4_Py_step,Bz4_Pz_step; point dummyP; vector dummyP1,dummyP2,dummyP3,dummyP4,judgeP1,judgeP2; point intersectP,dummy_intersectP_p; vector dummy_intersectP,N_intersectP; point trace_P; vector trace_N; float trace_d_min,trace_d_max; color trace_cs,trace_opa,trace_specularcs,trace_d_cs,trace_s_cs; float trace_Ka,trace_Kd,trace_Ks,trace_roughness,trace_Bz_index; float integ_Kr; color integ_tracebefore_cs,integ_tracebefore_cs2; float i,j,k; vector ddu,ddv; point Pray; vector Iray; float d_intensity,s_intensity; color dif_cs=0,spe_cs=0; color env_cs,env_cs_result,Cl2; color shd; float raystop; float judge_intersect,intersection_count; point PrayO,trace_PO; vector IrayO,RO,TO,LO; vector trace_IO,trace_NO; vector Bz00O,Bz10O,Bz20O,Bz30O,Bz01O,Bz11O,Bz21O,Bz31O,Bz02O,Bz12O,Bz22O,Bz32O,Bz03O,Bz13O,Bz23O,Bz33O; point Bz_csO,Bz_opaO,Bz_specularcsO; Nf=faceforward(normalize(N),I); V=normalize(-I); env_cs=0; if (ray_switch=="on") { if (ray_sample>0) { for (i=0;i0) { Cl2=0; } else { Cl2=Cl; } KTdiffuse(trace_NO,LO,d_intensity); KTspecular(trace_IO,LO,trace_NO,trace_roughness,s_intensity); trace_d_cs+=d_intensity*Cl2; trace_s_cs+=s_intensity*Cl2; } Bz_csO=point (xcomp(Bz_cs[trace_Bz_index]),ycomp(Bz_cs[trace_Bz_index]),zcomp(Bz_cs[trace_Bz_index])); Bz_csO=transform("current","object",Bz_csO); trace_cs=color(xcomp(Bz_csO),ycomp(Bz_csO),zcomp(Bz_csO)); Bz_opaO=point(xcomp(Bz_opa[trace_Bz_index]),ycomp(Bz_opa[trace_Bz_index]),zcomp(Bz_opa[trace_Bz_index])); Bz_opaO=transform("current","object",Bz_opaO); trace_opa=color(xcomp(Bz_opaO),ycomp(Bz_opaO),zcomp(Bz_opaO)); Bz_specularcsO=point(xcomp(Bz_specularcs[trace_Bz_index]),ycomp(Bz_specularcs[trace_Bz_index]),zcomp(Bz_specularcs[trace_Bz_index])); Bz_specularcsO=transform("current","object",Bz_specularcsO); trace_specularcs=color(xcomp(Bz_specularcsO),ycomp(Bz_specularcsO),zcomp(Bz_specularcsO)); trace_Ka=Bz_Ka[trace_Bz_index]; trace_Kd=Bz_Kd[trace_Bz_index]; trace_Ks=Bz_Ks[trace_Bz_index]; env_cs_result=trace_opa*(trace_cs*(trace_Ka*ambient()+trace_Kd*trace_d_cs+trace_Ks*trace_specularcs*trace_s_cs)); integ_tracebefore_cs2=env_cs_result*trace_specularcs; if (Bz_shadingtype[trace_Bz_index] == "plastic") { env_cs_result=trace_opa*(trace_cs*(trace_Ka*ambient()+trace_Kd*trace_d_cs)+trace_Ks*trace_specularcs*trace_s_cs); integ_tracebefore_cs2=trace_specularcs; } if (Bz_shadingtype[trace_Bz_index] == "plank") { } if (Bz_shadingtype[trace_Bz_index] == "matte") { env_cs_result=trace_opa*(trace_cs*(trace_Ka*ambient()+trace_Kd*trace_d_cs)); integ_tracebefore_cs2=1; } env_cs+=integ_tracebefore_cs*integ_Kr*env_cs_result; intersection_count+=1; if (Bz_surfacetype[trace_Bz_index]!="reflection") { raystop=1; } else { PrayO=trace_PO; IN=RO; fresnel(IN,trace_NO,eta,kr,kt,RO,TO); RO=normalize(RO); integ_Kr*=Bz_Kr[trace_Bz_index]; integ_tracebefore_cs*=integ_tracebefore_cs2; } } else { raystop=1; } } } } env_cs/=pow(ray_sample,2); } } if (shd_switch=="on") { if (shd_sample>0) { shd=0; for (i=0;i0) { Cl2=0; } else { Cl2=Cl; } KTdiffuse(Nf,LL,d_intensity); KTspecular(Iray,LL,Nf,roughness,s_intensity); dif_cs+=d_intensity*Cl2; spe_cs+=s_intensity*Cl2; } } } dif_cs/=pow(shd_sample,2); spe_cs/=pow(shd_sample,2); } } else { dif_cs=diffuse(Nf); spe_cs=specular(Nf,V,roughness); } Ci=Cs*(Ka*ambient()+Kd*dif_cs+specularcolor*(Kr*env_cs+Ks*spe_cs)); if (Bz_shadingtype[Bz_index]=="plastic") { Ci=Cs*(Ka*ambient()+Kd*dif_cs)+specularcolor*(Kr*env_cs+Ks*spe_cs); } if (Bz_shadingtype[Bz_index]=="plank") { } if (Bz_shadingtype[Bz_index]=="matte") { Ci=Cs*(Ka*ambient()+Kd*dif_cs)+Kr*env_cs; } }