|
|
If I understand its purpose correctly, the I_Phi function should be
#declare I_Phi = function {atan2(z, x)}
F_Wave should probably converge to a constant (the amplitude of the wave
vanishing) as (x, 0, z) approaches the origin, rather than continue to
oscillate with a fixed amplitude along an ever tinier circumference,
which produces an unbounded gradient. For example,
#declare F_Wave = function
{0.8*sqrt(pow(x,2)+pow(z,2))*sin(3*I_Phi(x, 0, z))}
You’ll probably want more than three ridges, however.
Note your I function has an infinite gradient on the y = F_Wave(x, y, z)
surface. You could instead do something like
#declare F_Cap = function
{pow(x,2)+pow(max(y,0),2)+pow(z,2) - pow(ISphereR,2)}
#declare S_Wave = function {F_Cap(x, y - F_Wave(x, y, z), z)}
The 0.8 factor in F_Wave may need tweaking.
Now you need to cut off with an intersection or differencethe part of
the isosurface below the y = 0 plane, adjust the “contained_by” object
and put the result in a union or merge with half a sphere object, which
I think will be faster to render than retaining the lower hemisphere as
part of the isosurface.
Post a reply to this message
|
|