--- ray/src/ot/oconv.c 1990/06/26 09:02:03 1.9 +++ ray/src/ot/oconv.c 1990/08/29 13:01:16 1.10 @@ -195,10 +195,13 @@ addobject(cu, obj) /* add an object to a cube */ register CUBE *cu; OBJECT obj; { +#define nexti(n) ((ndx += cnt*cnt++)%(n)) + static unsigned long ndx; + static unsigned int cnt; CUBE cukid; OCTREE ot; OBJECT oset[MAXSET+1]; - int in; + int in, k; register int i, j; in = (*ofun[objptr(obj)->otype].funp)(objptr(obj), cu); @@ -259,12 +262,17 @@ OBJECT obj; /* then this object */ addobject(&cukid, obj); /* volumes last */ - for (j = 1; j <= oset[0]; j++) + k = nexti(oset[0]); /* random start */ + for (j = k+1; j <= oset[0]; j++) if (isvolume(objptr(oset[j])->otype)) addobject(&cukid, oset[j]); + for (j = 1; j <= k; j++) + if (isvolume(objptr(oset[j])->otype)) + addobject(&cukid, oset[j]); octkid(ot, i) = cukid.cutree; } cu->cutree = ot; } } +#undef nexti }