|
|
Hi all,
I have a question about the use of recursive object-unions in povray.
This is what i want to do:
***
My basic shape is made up from a sphere and 4 cylinders. And is
basically a ball with 8 pins sticking out of it (every 45 degrees, all
in one plane). See ascii diagram.
<pre>
\|/
-O-
/|\
</pre>
I've created a union of these objects and can now use it like this:
union { my_basic_shape
rotate <0 ,0 ,0>
scale <1.0, 1.0, 1.0>
translate <0.0, 0.0, 0.0>
}
***
The next thing i want to do is attach a scaled and rotated
my_basic_shape object-union to the end of each cylinder that sticks
out of the original my_basic_shape object-union. And repeat this for
the new objects, etc ..
***
With the povray knowledge i have at this moment i would have to hard
code each separate object. But i'm sure this sort of thing can be done
using some kind of automated loop with variables, but i haven't been
able to find information about this so far.
If anyone could help me out with this, or point me to a site with
relevant information or a similar example i would really appreciate
it.
Best regards,
Rick D.
Post a reply to this message
|
|
|
|
Wasn't it Rick D. who wrote:
>Hi all,
>
>I have a question about the use of recursive object-unions in povray.
>
> . . .
>
>With the povray knowledge i have at this moment i would have to hard
>code each separate object. But i'm sure this sort of thing can be done
>using some kind of automated loop with variables, but i haven't been
>able to find information about this so far.
The magic word that you need to look up in the documentation is "macro".
POV supports recursive macros. You can pass parameters to a macro that
you can use to (a) create a copy of the object at a size and position
controlled by those parameters and (b) call copies of itself to handle
the next smaller size (if it's not already at the lowest level).
Here's an example
#macro Recurse(Shape, Posn, Rotn, Depth, Max_Depth)
// draw the shape at this level
object {Shape
rotate Rotn
scale 1/Depth // scale calculation
translate Posn
}
// Check to see if we need to go deeper
#if (Depth < Max_Depth)
// Call the stuff for the next level down
Recurse (Shape, Posn+x/Depth, Rotn+y*20, Depth+1, Max_Depth)
Recurse (Shape, Posn-x/Depth, Rotn+y*20, Depth+1, Max_Depth)
Recurse (Shape, Posn+y/Depth, Rotn+y*20, Depth+1, Max_Depth)
Recurse (Shape, Posn-y/Depth, Rotn+y*20, Depth+1, Max_Depth)
Recurse (Shape, Posn+z/Depth, Rotn+y*20, Depth+1, Max_Depth)
Recurse (Shape, Posn-z/Depth, Rotn+y*20, Depth+1, Max_Depth)
#end
#end
Recurse(My_Basic_Shape, <0,0,0>, <0,0,0>, 1, 5)
I call this macro with Depth=1, and it calls eight copies of itself with
Depth=2 and they each call eight copies with Depth=3 etc.
Change the scale, Posn and Rotn calculations to fit the particular
structure that you're trying to create.
If you need to use any variables in the calculations inside the macro,
use #local rather than #declare to avoid the possibility of the
variables being clobbered by other copies of the macro.
--
Mike Williams
Gentleman of Leisure
Post a reply to this message
|
|