// attempt at a vector exclusion test object placement function #version unofficial megapov 1.1; global_settings { assumed_gamma 1.0 } camera { location <-5, 6,-18> up y*image_height right x*image_width look_at < 0, 1.5, 0> angle 45 } #local RsA = seed(574647); // RRand Macro by Chris Huff #macro RRand(RS, Min, Max) (rand(RS)*(Max-Min) + Min) #end // randVect Macro by [GDS|Entropy] //------ #declare Sp = 1000; #macro randVector(ctr,Min,Max,Method) #local i=0; #while (i; #break #case (1) #declare randVectArray[i] = ; #break #case (2) #declare randVectArray[i] = ; #break #case (3) #declare randVectArray[i] = ; #break #case (4) #declare randVectArray[i] = ; #break #case (5) #declare randVectArray[i] = ; #break #end #set i=i+1; #end #end #declare randVectArray = array [Sp]; //------ #macro draw_glow_basic(pt,glowTypeCtr) light_source { pt #if(mod(glowTypeCtr,2) = 0) color rgb <0.2734*rand(RsA), 0.5078*rand(RsA), 0.7031*rand(RsA)>*0.0125 #else color rgb *0.0125 #end glow { #if(mod(glowTypeCtr,2) = 0) size rand(RsA)*0.1 type 0 #else size rand(RsA)*0.5 type 0 #end } #if(mod(glowTypeCtr,2) = 0) fade_distance 1 fade_power 2 #else fade_distance 2 fade_power 3 #end } #end randVector(Sp,-5,5,1) #macro testSphere(ctr,vect,diameter) sphere { vect,diameter pigment { color rgb vect/(ctr+0.0001) // divide by zero fix } } #end #macro exclusionTest(ctr,vectorArray,vectorA,vectorB,isHollow) #local i=0; #while (i= vectorA.x)) & ((vectorArray[i].y <= vectorB.y) & (vectorArray[i].y >= vectorA.y)) & ((vectorArray[i].z <= vectorB.z) & (vectorArray[i].z >= vectorA.z))) #if (isHollow) #debug concat("Object NOT placed \n") testSphere(ctr,vectorArray[i],0.25) #else #debug concat("Object placed at: ", vstr(3,vectorArray[i],",",3,3),"\n") draw_glow_basic(vectorArray[i],i) #end #else #if (isHollow) #debug concat("Object placed at: ", vstr(3,vectorArray[i],",",3,3),"\n") draw_glow_basic(vectorArray[i],i) #else #debug concat("Object NOT placed \n") testSphere(ctr,vectorArray[i],0.25) #end #end #set i=i+1; #end #end #declare test0 = union{exclusionTest(Sp,randVectArray,<-3,-3,-3>,<3,3,3>,yes)}; object { test0 scale 0.5 translate <-4,2,0> } #declare test1 = union{exclusionTest(Sp,randVectArray,<-3,-3,-3>,<3,3,3>,no)}; object { test1 scale 0.5 translate <4,2,0> }