POV-Ray : Newsgroups : povray.newusers : isosurfaces? Server Time
30 Jul 2024 22:15:31 EDT (-0400)
  isosurfaces? (Message 4 to 13 of 13)  
<<< Previous 3 Messages Goto Initial 10 Messages
From: Matthew Pace
Subject: Re: isosurfaces?
Date: 4 Nov 2003 01:40:08
Message: <matt-pace-DE90CA.22400503112003@netplex.aussie.org>
Alrighty, Thanks to you guys, I shall test out the parameter 
declarations (correct term?), and if that does not work, I will post my 
code.  Thanks a lot.


Post a reply to this message

From: Matthew Pace
Subject: Re: isosurfaces?
Date: 4 Nov 2003 01:45:12
Message: <matt-pace-14D9EE.22451003112003@netplex.aussie.org>
Holy Jumping Mother of God!  It worked!  Sorta, anyways.  It rendered, 
yes, but there was nothing there.  My guess is because I messed up 
somewhere along with placing the objects and camera.

in case anyone was interested still, this is the fixed code:

#declare AmbientLight= 0;
camera
{
   location <0,.5,-7>
   look_at  <0,0,0>
}

light_source
{
   <.5,11,-3>
   color rgb 2
   spotlight
   radius 3
   falloff 15
   tightness 5
   point_at <0,0,0>
   area_light
   <.5,0,0>,<0,.5,0>,5,5
   adaptive 1
   jitter
}
plane
{
   y,0
   hollow
   texture
   {
      pigment
      {
         checker
            color rgb <.8,.8,.8>
            color rgb <0,0,.25>
      }
   }
}

#declare Sphere=function (x,y,z,R) {x*x+y*y+z*z}


isosurface
{
   function{Sphere(2,2,2,4)}
   threshold 0
   contained_by {box {-5,5}}
   texture
   {
      pigment
      {
         color rgb .6
      }
   }


Post a reply to this message

From: Tom Melly
Subject: Re: isosurfaces?
Date: 4 Nov 2003 05:05:55
Message: <3fa77a03$1@news.povray.org>
"Matthew Pace" <mat### [at] lycoscom> wrote in message
news:mat### [at] netplexaussieorg...
> Holy Jumping Mother of God!  It worked!  Sorta, anyways.  It rendered,
> yes, but there was nothing there.  My guess is because I messed up
> somewhere along with placing the objects and camera.
>
> in case anyone was interested still, this is the fixed code:

> #declare Sphere=function (x,y,z,R) {x*x+y*y+z*z}
>
> isosurface
> {
>    function{Sphere(2,2,2,4)}
>    threshold 0
>    contained_by {box {-5,5}}
>    texture
>    {
>       pigment
>       {
>          color rgb .6
>       }
>    }

Close - you specify the R param, but then don't do anything with it.
Consequently, with a threshold of 0, you have a 0-width sphere (i.e. the only
points where your equation evaluates to =< 0 is at <0,0,0>).

Next, you correctly specify (x,y,z,R) as params to the function, but then pass
the constant (2,2,2,4), instead of (x,y,z,4). You want the isosurface to be
evaluated for all points of (x,y,z) within the contained_by box, not just for
<2,2,2>.

Also, and less importantly, you probably want {pow(x*x+y*y+z*z,0.5)-R}, since
otherwise you sphere is going to have a radius of the square-root of R, rather
than R (which is fine, but breaks the doctrine of least surprise ;)

Finally, once you sort these problems out, you're still going to have trouble
because you haven't specified a max_gradient, and the default (1.1 iirc) is too
low. So...

Try:

#declare FSphere=function (x,y,z,R) {pow(x*x+y*y+z*z,0.5) - R}
isosurface
{
  function{FSphere(x,y,z,2)}
  threshold 0
  contained_by {box {-5,5}}
  max_gradient 13
  texture{
    pigment{color rgb .6}
  }
}

One final point - your texture is wrong. You should specify a perfect reflective
texture for all spheres on checked planes, otherwise you are breaking the terms
of the pov-licence.


Post a reply to this message

From: Christoph Hormann
Subject: Re: isosurfaces?
Date: 4 Nov 2003 05:32:02
Message: <afbk71-cd6.ln1@triton.imagico.de>
Tom Melly wrote:
> [...]
> 
> #declare FSphere=function (x,y,z,R) {pow(x*x+y*y+z*z,0.5) - R}
> isosurface
> {
>   function{FSphere(x,y,z,2)}
>   threshold 0
>   contained_by {box {-5,5}}
>   max_gradient 13
>   texture{
>     pigment{color rgb .6}
>   }
> }

Actually you should use sqrt() instead of pow(,0.5).

And since the radius R is a render time constant it is not necessary for 
it to be a parameter:

#declare R=2;

#declare FSphere=function {sqrt(x*x+y*y+z*z) - R}

isosurface
{
   function{FSphere(x,y,z)}
   ...
}

And this is exctly how it is shown in the isosurface tutorial in the 
documentation.

Christoph

-- 
POV-Ray tutorials, include files, Sim-POV,
HCR-Edit and more: http://www.tu-bs.de/~y0013390/
Last updated 25 Oct. 2003 _____./\/^>_*_<^\/\.______


Post a reply to this message

From: Tom Melly
Subject: Re: isosurfaces?
Date: 4 Nov 2003 05:45:50
Message: <3fa7835e$1@news.povray.org>
"Christoph Hormann" <chr### [at] gmxde> wrote in message
news:afb### [at] tritonimagicode...

> Actually you should use sqrt() instead of pow(,0.5).

True (but I'm too lazy to check the docs, and couldn't remember how the keyword
was spelt ;). Also, never a bad idea to remind a newbie that pow(n,0.5) and
sqrt(n) are the same thing...

>
> And since the radius R is a render time constant it is not necessary for
> it to be a parameter:
>
> #declare R=2;
>

Also true - still, I quite liked the example of passing x,y,z and another param.
I don't suppose there's any chance that pov will recognise that R is a constant
and perform an optimisation?*

* yeah, right, and monkeys will fly out of my butt.


Post a reply to this message

From: Warp
Subject: Re: isosurfaces?
Date: 4 Nov 2003 07:49:11
Message: <3fa7a046@news.povray.org>
Tom Melly <tom### [at] tomandlucouk> wrote:
> Also, and less importantly, you probably want {pow(x*x+y*y+z*z,0.5)-R}, since
> otherwise you sphere is going to have a radius of the square-root of R, rather
> than R (which is fine, but breaks the doctrine of least surprise ;)

  Why use a heavy solution to a simple problem?
  If the R needs to be squared, then simply square it. This will probably
result in much faster renderings, the result being equal:

#declare FSphere = function(x,y,z,R) { x*x+y*y+z*z-R*R }

-- 
#macro M(A,N,D,L)plane{-z,-9pigment{mandel L*9translate N color_map{[0rgb x]
[1rgb 9]}scale<D,D*3D>*1e3}rotate y*A*8}#end M(-3<1.206434.28623>70,7)M(
-1<.7438.1795>1,20)M(1<.77595.13699>30,20)M(3<.75923.07145>80,99)// - Warp -


Post a reply to this message

From: Warp
Subject: Re: isosurfaces?
Date: 4 Nov 2003 07:50:34
Message: <3fa7a09a@news.povray.org>
Christoph Hormann <chr### [at] gmxde> wrote:
> Actually you should use sqrt() instead of pow(,0.5).

  How about simply squaring the radius (R*R) instead of using the slow
sqrt() function?-)

-- 
#macro N(D)#if(D>99)cylinder{M()#local D=div(D,104);M().5,2pigment{rgb M()}}
N(D)#end#end#macro M()<mod(D,13)-6mod(div(D,13)8)-3,10>#end blob{
N(11117333955)N(4254934330)N(3900569407)N(7382340)N(3358)N(970)}//  - Warp -


Post a reply to this message

From: Tom Melly
Subject: Re: isosurfaces?
Date: 4 Nov 2003 07:58:15
Message: <3fa7a267$1@news.povray.org>
"Warp" <war### [at] tagpovrayorg> wrote in message news:3fa7a09a@news.povray.org...
> Christoph Hormann <chr### [at] gmxde> wrote:
> > Actually you should use sqrt() instead of pow(,0.5).
>
>   How about simply squaring the radius (R*R) instead of using the slow
> sqrt() function?-)

He's got a point.... in which case it would make sense to declare R as the
square of whatever value you want to use?

So, Chris's example becomes:

#declare R=2*2;
#declare FSphere=function {(x*x+y*y+z*z) - R}


Post a reply to this message

From: Warp
Subject: Re: isosurfaces?
Date: 4 Nov 2003 08:30:17
Message: <3fa7a9e9@news.povray.org>
Tom Melly <tom### [at] tomandlucouk> wrote:
> #declare R=2*2;
> #declare FSphere=function {(x*x+y*y+z*z) - R}

  Having the radius as parameter has certain advantages, though.
For instance, the radius does not have to be constant thorough the
entire surface of the sphere... :)

  Example:

#declare FSphere = function(x,y,z,R) { (x*x+y*y+z*z) - R*R }

isosurface
{ function { FSphere(x,y,z, 2-.5*f_noise3d(x*5,y*5,z*5)) }
  ...
}

-- 
plane{-x+y,-1pigment{bozo color_map{[0rgb x][1rgb x+y]}turbulence 1}}
sphere{0,2pigment{rgbt 1}interior{media{emission 1density{spherical
density_map{[0rgb 0][.5rgb<1,.5>][1rgb 1]}turbulence.9}}}scale
<1,1,3>hollow}text{ttf"timrom""Warp".1,0translate<-1,-.1,2>}//  - Warp -


Post a reply to this message

From: Christoph Hormann
Subject: Re: isosurfaces?
Date: 4 Nov 2003 12:32:03
Message: <p94l71-s2l.ln1@triton.imagico.de>
Warp wrote:
> 
>   How about simply squaring the radius (R*R) instead of using the slow
> sqrt() function?-)

Because that function would have a non-constant gradient.  With the (way 
too large) container box{-5,5} you need quite a high max_gradient to 
correctly render it -> it will be slower than with sqrt().

Of course using the internal function f_sphere() would be even faster.

Christoph

-- 
POV-Ray tutorials, include files, Sim-POV,
HCR-Edit and more: http://www.tu-bs.de/~y0013390/
Last updated 25 Oct. 2003 _____./\/^>_*_<^\/\.______


Post a reply to this message

<<< Previous 3 Messages Goto Initial 10 Messages

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