POV-Ray : Newsgroups : povray.general : Isofunctions and meshes : Re: Isofunctions and meshes Server Time
2 May 2024 02:32:27 EDT (-0400)
  Re: Isofunctions and meshes  
From: John Greenwood
Date: 3 Dec 2016 05:00:01
Message: <web.584296c5b9cec73de15d43a80@news.povray.org>
"Tor Olav Kristensen" <tor### [at] TOBEREMOVEDgmailcom> wrote:
> "John Greenwood" <joh### [at] john-greenwoodcouk> wrote:
> > "Tor Olav Kristensen" <tor### [at] TOBEREMOVEDgmailcom> wrote:
> > > "John Greenwood" <joh### [at] john-greenwoodcouk> wrote:

> > I have had a look and am floundering.
> >
> > An example would be worth ten thousand words.
>
> See the code below.
>
>
> > Could some kind person point me at an actual example of converting a simple
> > function, such as:
> >     function(x,y,z){sqrt(pow(x,2)+pow(y,2)+pow(z,2))-L)/r }
> > into a mesh object?
>
> That function seemsto be missing a start parenthesis somewhere.
> The code below uses a similar function.
>
> Noe that this code also creates a file named triangles.inc that contains all the
> triangles.
>
> // ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7 ======= 8
>
> #include "functions.inc"
>
> // Other functions to experiment with
> //#declare Fn = function { f_torus(x, y, z, 1, 0.4) }
> //#declare Fn = function { y - sin(2*x*z)*cos(x*z) }
> //#declare Fn = function { cos(2*pi*x) + cos(2*pi*y) + cos(2*pi*z) }
>
> // A sphere with radius 1.8
> // x^2 + y^2 + z^2 = 1.8^2
> // (x^2 + y^2 + z^2)^(1/2) = 1.8
> // (x^2 + y^2 + z^2)^(1/2) - 1.8 = 0.0
>
> // The elaborate way
> //#declare Fn = function(x, y, z) { sqrt(pow(x,2) + pow(y,2) + pow(z,2)) - 1.8 }
>
> // A simpler way
> #declare Fn = function { f_sphere(x, y, z, 1.8) }
>
> #declare isoThreshold = 0.0;
>
> // Set to yes to produce the approximation
> // or to no for the actual isosurface
> #declare approximateIso = yes;
>
> // Set to yes to produce a smooth_triangle approximation
> // or to no ro produce a flat triangle approximation
> #declare isoSmooth = no;
>
> // Controls the size of the cube that is beeing sampled
> #declare R = 2.0;
>
> #declare isoMin = -<1, 1, 1>*R;
> #declare isoMax = +<1, 1, 1>*R;
>
> // The resolution of the sampling in the x, y and z directions
> #declare Resolution = 6;
>
> #if (approximateIso)
>   #declare Depth = 1; // Set to 0 for no recursion
>   #declare isoSegs = <1, 1, 1>*Resolution;
>   #declare isoFileOption = 1;
>   #declare isoFile = "triangles.inc";
>   #declare isoName = "Surface";
>   #include "isosurface_kl_jf_tok.inc"
>   object {
>     Surface
>     pigment { color rgb <1, 1, 1>*0.9 }
>     finish {
>       phong 0.5
>       phong_size 10
>     }
>   }
> #else
>   isosurface {
>     function { Fn(x, y, z) }
>     max_gradient 8.0
>     contained_by { box { isoMin, isoMax } }
>     open
>     pigment { color rgb <1, 1, 1>*0.9 }
>     finish {
>       phong 0.5
>       phong_size 10
>     }
>   }
> #end // if
>
> // ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7 ======= 8
>
> sky_sphere {
>   pigment {
>     function { abs(y) }
>     color_map {
>       [ 0.0 color rgb <0.0, 0.0, 0.6> ]
>       [ 1.0 color rgb <1.0, 1.0, 1.0> ]
>     }
>   }
> }
>
> camera {
>   location <1, 2, -4>*2*R
>   look_at <0, 0, 0>
>   angle 32
> }
>
> light_source {
>   <1, 2, -1>*100
>   color rgb <1, 1, 1>
>   shadowless
> }
>
> light_source {
>   <-1, -2, -1>*100
>   color rgb <1, 1, 1>*0.5
>   shadowless
> }
>
> // ===== 1 ======= 2 ======= 3 ======= 4 ======= 5 ======= 6 ======= 7 ======= 8
>
>
> --
> Tor Olav
> http://subcube.com

Thanks I will have a go.


Post a reply to this message

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