POV-Ray : Newsgroups : povray.binaries.images : Zeger's Greebles revisited (attn. Thomas De Groot) : Re: Zeger's Greebles revisited (attn. Thomas De Groot) Server Time
6 Aug 2024 19:26:41 EDT (-0400)
  Re: Zeger's Greebles revisited (attn. Thomas De Groot)  
From: Zeger Knaepen
Date: 16 Oct 2006 13:29:50
Message: <4533c18e$1@news.povray.org>
"Doctor John" <doc### [at] linuxmailorg> wrote in message
news:45339d0e@news.povray.org...
> "Thomas de Groot" <t.d### [at] internlnet> wrote in message
> news:45339a75$1@news.povray.org...
> > That looks very good!
> > I can translate the comments and post them back of course (except is Zeger
> > is more rapid ;-) )
> >
> > Thanks a lot for the good work!
> >
> > Thomas
> More to come as I get my head around exactly how the various macros interact
> with each other. The change I made is just a quick fix; I'm sure there's a
> better way of doing it (possibly using Diepte which as far as I can see
> limits the recursion depth)

as far as I can remember, that's right.

Actually, I believe I *did* kind of fix it, you know!  The problem was that the
points on the polygons (the greeble-cells actually) were too close together,
which caused the official POV-Ray to stop with an error.  However, if I scale
the location of the points by, let's say 10000, and then scale the polygon by
1/10000, then it worked okay... not a perfect fix of course, and won't work in
every case, but the only other way is to check every point of the polygon with
every next point, in a *new* loop before the loop where the polygon is created.
Might slow things down, cause you'd have to do that for every greeble-cell
(which can be quite a few, depending on the value Diepte).

the code to change for the "fix" is, I believe, in the macro RoundPrism(), right
at the end:
change:

  #if (Aantal2>2)
  polygon {
   Aantal2,
   #local Tel=0;
   #while (Tel<Aantal)
    #ifdef(Points2[Tel])<Points2[Tel].x,Points2[Tel].y>
    #end
    #local Tel=Tel+1;
   #end
   translate -z*H
  }
  #end

into:

  #if (Aantal2>2)
  polygon {
   Aantal2,
   #local Tel=0;
   #while (Tel<Aantal)
    #ifdef(Points2[Tel])<Points2[Tel].x,Points2[Tel].y>*100000
    #end
    #local Tel=Tel+1;
   #end
   scale 1/100000
   translate -z*H
  }
  #end


and it should work.

Hope that helps :)

cu!
--
#macro G(b,e)b+(e-b)*C/50#end#macro _(b,e,k,l)#local C=0;#while(C<50)
sphere{G(b,e)+3*z.1pigment{rgb G(k,l)}finish{ambient 1}}#local C=C+1;
#end#end _(y-x,y,x,x+y)_(y,-x-y,x+y,y)_(-x-y,-y,y,y+z)_(-y,y,y+z,x+y)
_(0x+y.5+y/2x)_(0x-y.5+y/2x)            // ZK http://www.povplace.com


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.