POV-Ray : Newsgroups : povray.binaries.images : Helical SDF for Isosurfaces : Re: Helical SDF for Isosurfaces Server Time
21 Dec 2024 12:25:21 EST (-0500)
  Re: Helical SDF for Isosurfaces  
From: Bald Eagle
Date: 20 Dec 2024 19:55:00
Message: <web.6766113a4a98c6d61f9dae3025979125@news.povray.org>
"Bald Eagle" <cre### [at] netscapenet> wrote:
> This is pretty nice, and I will definitely be using your library, as it's the
> only nice/efficient way to make some good barrel rifling.

POV-Ray absolutely drives me mad - on many occasions.

I have a nice rifling cross section function, but for some reason - as of yet
unknown to me, it behaves very badly when x is negative - as shown to the left
of the origin.

I could fix/hack it - but I'd like to know WHY it occurs.
Even more baffling is when the twist rate is set very high - then the helix
disappears completely.



#version 3.8;
global_settings {assumed_gamma 1.0 }

#include "math.inc"
#include "functions.inc"
camera {
 location <12, 0, -25>
 right x*image_width/image_height
 up y
 look_at <12, 0, 0>
 rotate -y*10
}

light_source {<10, 5, -10> rgb 1}

sky_sphere {pigment {rgb 1}}

#declare E = 0.00001;

#declare Dia = 0.4;

#declare Axis = 0.01;
cylinder {<-30, 0, 0>, <30, 0, 0> Axis pigment {rgb x}}
cylinder {<0, -Dia*2, 0>, <0, Dia*2, 0> Axis pigment {rgb y}}
cylinder {<0, 0, -Dia*2>, <0, 0, Dia*2> Axis pigment {rgb z}}

#declare fmod = function (Value, Modulo) {select (Value, 1 - mod (abs (Value),
Modulo), mod (abs (Value), Modulo))}  // this gives a mod function that remains
consistant across the origin
//#declare Theta = function {atan2 (y, z)+tau + x*tau}
#declare Theta = function {((atan2 (y, z)+pi)/pi)*tau + x*tau} // adds a
multiple of x to produce the helix

#declare dist = function {sqrt (y*y + z*z)}

#declare Helix = function {select (mod (Theta(x, y, z), tau/3) - tau/6, 0.308,
0.35)} // modulates the radius to produce the rifling

#declare Rifling = function {dist (x, y, z) - Helix (x/12, y, z)}

#declare IS =
isosurface {
 function {Rifling(x,y,z)}
 contained_by { box { <-12, -Dia, -Dia>, <24, Dia, Dia> } }
 accuracy 0.0001
 max_gradient 50
 open

 texture {
  pigment {rgb 1}
 } // end texture

 interior_texture {
  pigment {rgb <1, 0, 0>}
 } // end texture

} // end isosurface

object {IS}


Post a reply to this message


Attachments:
Download 'isosurfacerifle.png' (37 KB)

Preview of image 'isosurfacerifle.png'
isosurfacerifle.png


 

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