|
 |
kurtz le pirate <kur### [at] free fr> wrote:
> Hello,
>
> Suppose we have a define a block with an isosurface whose surface is
> perturbed by a pigment function like that in a macro :
>
>
> #macro CarvedRocks(xDim, yDim, zDim, Rad)
> isosurface {
> function {
> f_rounded_box(x, y, z, Rad, xDim, yDim, zDim)
> -f_agate(x,y,z)
> }
> #end
>
>
> I can carve multiple stones :
> #declare block1 = CarvedRocks(x1, y1, z1, Rad)
> #declare block2 = CarvedRocks(x1, y1, z2, Rad)
> ...
>
>
> The problem is that the disturbance is the same for all blocks.
> This is not illogical, since the agate function always returns the same
> values.
>
>
> Hence my question: how to obtain different blocks with the same agate
> (or other) function ?
>
>
> Traditionally, by applying pigment before translations, box appear
> different. But for an isosurface, I don't see how this can be done.
It gets done in "exactly" the same way as you do with regular objects - you just
use math, not keywords to do it.
If you want to translate your box, you add or subtract to the x, y, or z going
into the function.
f_rounded_box(x-TransX, y-TransY, z-TransZ, Rad, xDim, yDim, zDim)
Same with the pigment function.
f_agate(x-TransX, y-TransY, z-TransZ)
If you wanted to use a keyword, you could undef your pigment function, and use
function (x, y, z, X, Y, Z) {pigment {agate translate <X, Y, Z>}}
- BW
Post a reply to this message
|
 |