#macro Triangle( OO, NN, MM, AX, AY, BX, BY, CX, CY, UVMIN, UVRANGE ) #local P1= uv_vertex( OO, AX/NN, AY/MM); #local P2= uv_vertex( OO, BX/NN, BY/MM); #local P3= uv_vertex( OO, CX/NN, CY/MM); #if ( (vlength(P1-P2)>0) & (vlength(P1-P3)>0) & (vlength(P2-P3)>0) ) #local U1= UVMIN.u + AX/NN*UVRANGE.u; #local V1= UVMIN.v + AY/MM*UVRANGE.v; #local U2= UVMIN.u + BX/NN*UVRANGE.u; #local V2= UVMIN.v + BY/MM*UVRANGE.v; #local U3= UVMIN.u + CX/NN*UVRANGE.u; #local V3= UVMIN.v + CY/MM*UVRANGE.v; triangle{ P1, P2, P3 uv_vectors <U1,V1>,<U2,V2>,<U3,V3> } #end #end #macro PreviousTriangle( OO, NN, MM, UU, VV, PP, UVMIN, UVRANGE ) #if(VV<MM) #if((UU-1)>=0) Triangle( OO, NN, MM, UU, VV, UU, VV+1, UU-1, VV+PP, UVMIN, UVRANGE) #end #end #end #macro NextTriangle( OO, NN, MM, UU, VV, PP, UVMIN, UVRANGE ) #if(VV<MM) #if (UU< NN) Triangle( OO, NN, MM, UU, VV, UU+1, VV+PP, UU, VV+1, UVMIN, UVRANGE) #end #end #end #macro Triangles(OO, UU,VV, NN, MM, UVMIN, UVRANGE) #local Parity = bitwise_and(1, bitwise_xor(UU, VV)); PreviousTriangle( OO, NN, MM, UU, VV, Parity, UVMIN, UVRANGE ) NextTriangle( OO, NN, MM, UU, VV, Parity, UVMIN, UVRANGE ) #end #macro UVMeshable( OO, NN, MM ) #local STEPU=NN; #local STEPV=MM; #local UVMIN = uv_min(OO); #local UVRANGE = uv_max(OO)-UVMIN; #for(AA,0,STEPU,1) #for(BB,0,STEPV,1) Triangles( OO, AA, BB, STEPU, STEPV, UVMIN, UVRANGE) #end #end #end