|
|
I wrote a collision macro a while back,
you could populate an array with the flowers
and check that they don't collide. The rez
number could be quite small (faster) since it
doesn't matter too much if the flowers just
touch a bit.
#include "rand.inc"
#macro collision(A B rez)
#local result = false;
#if (((min_extent(A).x > max_extent(B).x ) |
(min_extent(B).x > max_extent(A).x ) |
(min_extent(A).y > max_extent(B).y ) |
(min_extent(B).y > max_extent(A).y ) |
(min_extent(A).z > max_extent(B).z ) |
(min_extent(B).z > max_extent(A).z ))=false)
#local AB = intersection{object{A} object{B}};
#local Mn = min_extent(AB);
#local Mx = max_extent(AB);
#local S1 = seed(1);
#local cnt = 0;
#while ((result = false) & (cnt < rez))
#local Pt = VRand_In_Box(Mn, Mx, S1);
#local Norm = <0,0,0>;
#local Hit = trace(AB,<Pt.x,Mn.y-0.1,Pt.z>,y,Norm);
#if (vlength(Norm)!=0)
#local result = true;
#else
#local Hit = trace(AB,<Mn.x-0.1,Pt.y,Pt.z>,x,Norm);
#if (vlength(Norm)!=0)
#local result = true;
#else
#local Hit = trace(AB,<Pt.x,Pt.y,Mn.z-0.1,>,z,Norm);
#if (vlength(Norm)!=0)
#local result = true;
#end
#end
#end
#local cnt = cnt + 1;
#end
#end
(result)
#end
Post a reply to this message
|
|