#macro curved_triangle(va,na,vb,nb,vc,nc,LOD) #if (LOD < 1) #declare LOD=1; #end #declare LOD=LOD+1; #local vlist=array[LOD*LOD] #local nlist=array[LOD*LOD] #local vAB=va-na; #local vAC=va-na; #local nAB=na; #local nAC=na; #local dvAB=(vb-nb-vAB)/(LOD-1); #local dvAC=(vc-nc-vAB)/(LOD-1); #local dnAB=(nb-na)/(LOD-1); #local dnAC=(nc-na)/(LOD-1); #local vlist[0]=va; #local nlist[0]=na; #local c=1; #local i=1; #while (i <= LOD) #local vAB=vAB+dvAB; #local nAB=nAB+dnAB; #local vAC=vAC+dvAC; #local nAC=nAC+dnAC; #local vert=vAB; #local n=nAB; #local vstep=(vAC-vAB)/i; #local nstep=(nAC-nAB)/i; #local j=0; #while (j <= i) #local temp=vnormalize(n); #local vlist[c]=vert+temp; #local nlist[c]=temp; #local vert=vert+vstep; #local n=n+nstep; #local c=c+1; #local j=j+1; #end #local i=i+1; #end #local i=1; #while (i < LOD) #local a=i*(i+1)/2; #local b=(i-1)*i/2; #local j=0; #while (j < i-1) smooth_triangle{vlist[a],nlist[a],vlist[b],nlist[b],vlist[a+1],nlist[a+1]} smooth_triangle{vlist[b],nlist[b],vlist[a+1],nlist[a+1],vlist[b+1],nlist[b+1]} #local a=a+1; #local b=b+1; #local j=j+1; #end smooth_triangle{vlist[a],nlist[a],vlist[b],nlist[b],vlist[a+1],nlist[a+1]} #local i=i+1; #end #end