//Version() // empty definition for tree for mesh generation #include "stdinc.inc" #include "arrays.inc" #declare STRUCT_SUBTREES=0; #declare STRUCT_VERTICES=1; #declare STRUCT_NORMALS=2; #declare STRUCT_FACES=3; #declare STRUCT_SMOOTH_FACES_V=4; #declare STRUCT_SMOOTH_FACES_N=5; #declare STRUCT_TEXTURES=6; #declare STRUCT_COUNTER=7; #declare STRUCT_ENTRIES=8; #declare CONE_ACCURACY=10; #declare SPHERE_ACCURACY=3; #macro Empty_Struct() #local Struct=array[STRUCT_ENTRIES]; #local Struct[STRUCT_COUNTER]=array[STRUCT_ENTRIES-1]; Struct #end #macro Struct_Texture(Tex) array[1]{Tex} #end #macro Empty_Struct_Texture() array[1] #end #macro Count_ID_Struct(ID) #ifdef(Struct[ID]) #declare Struct[STRUCT_COUNTER][ID]=dimension_size(Struct[ID],1); #end #end #macro Count_Struct(Struct) #local Counter=0; #while(Counter)); // FILL VERTICES AND NORMALS #local Struct[STRUCT_VERTICES]=array[2*(Accuracy+1)]; #local Struct[STRUCT_NORMALS]=array[2*(Accuracy+1)]; #local Struct[STRUCT_VERTICES][0]=P1; #local Struct[STRUCT_NORMALS][0]=-Axis; #local Struct[STRUCT_VERTICES][Accuracy+1]=P2; #local Struct[STRUCT_NORMALS][Accuracy+1]=Axis; #local Counter=0; #while (Counter; #local Struct[STRUCT_FACES][Accuracy+Counter]=; #local Struct[STRUCT_SMOOTH_FACES_V][Counter]=; #local Struct[STRUCT_SMOOTH_FACES_N][Counter]=; #local Struct[STRUCT_SMOOTH_FACES_V][Accuracy+Counter]=; #local Struct[STRUCT_SMOOTH_FACES_N][Accuracy+Counter]=; #local Last=Counter; #local Counter=Counter+1; #end // FILL TEXTURE #local Struct[STRUCT_TEXTURES]=Tex; // FILL COUNTERS Count_Struct(Struct) Struct #end #macro Sphere_Struct(P0,R,Tex,Accuracy) #local Struct=Empty_Struct(); // FILL VERTICES AND FACES #local Struct[STRUCT_VERTICES]=array[6]; #local Struct[STRUCT_VERTICES][0]=x; #local Struct[STRUCT_VERTICES][1]=-x; #local Struct[STRUCT_VERTICES][2]=y; #local Struct[STRUCT_VERTICES][3]=-y; #local Struct[STRUCT_VERTICES][4]=z; #local Struct[STRUCT_VERTICES][5]=-z; #local Struct[STRUCT_SMOOTH_FACES_V]=array[8]; #local Struct[STRUCT_SMOOTH_FACES_V][0]=<0,2,4>; #local Struct[STRUCT_SMOOTH_FACES_V][1]=<4,2,1>; #local Struct[STRUCT_SMOOTH_FACES_V][2]=<1,2,5>; #local Struct[STRUCT_SMOOTH_FACES_V][3]=<5,2,0>; #local Struct[STRUCT_SMOOTH_FACES_V][4]=<0,3,4>; #local Struct[STRUCT_SMOOTH_FACES_V][5]=<4,3,1>; #local Struct[STRUCT_SMOOTH_FACES_V][6]=<1,3,5>; #local Struct[STRUCT_SMOOTH_FACES_V][7]=<5,3,0>; // SUBDIVIDE FACES AND ADD NEW VERTICES #while(Accuracy>0) #local Current=0; #local Last=dimension_size(Struct[STRUCT_SMOOTH_FACES_V],1); #local First_New_Vertex=dimension_size(Struct[STRUCT_VERTICES],1); #while(Current; #local S=dimension_size(Struct[STRUCT_SMOOTH_FACES_V],1); Resize_Array(Struct[STRUCT_SMOOTH_FACES_V],S+3) #local Struct[STRUCT_SMOOTH_FACES_V][S]=<_P1,_PA,_PC>; #local Struct[STRUCT_SMOOTH_FACES_V][S+1]=<_P2,_PB,_PA>; #local Struct[STRUCT_SMOOTH_FACES_V][S+2]=<_P3,_PB,_PC>; #local Current=Current+1; #end #local Accuracy=Accuracy-1; #end // FILL NORMALS AND ADJUST VERTICES #local Struct[STRUCT_NORMALS]=Struct[STRUCT_VERTICES]; #local Counter=0; #while(Counter rotate y*90 } //Add_Struct_To_Root(Root,Cone) camera{ #local Size=4; orthographic location -z*10 right Size*x*image_width/image_height up Size*y direction z } light_source{-100*z color rgb 1}