|
|
> How can I make something like that? I'm no math whiz so I'm not sure what
I
> could use to make something like that. Can you use an isosurface of some
> sort or would it be a spline?
Well, I assume a sphere_sweep would be easiest. Let's create some basic
rules for it. The y value must go up steadily:
sphere_sweep {
catmul_rom_spline // check spelling on this
#declare numpoints = 20; // whatever
numpoints
#declare pointnum = 0;
#while (pointnum < numpoints)
, pointnum/(numpoints-1) // the value, from zero to one, that this point
on the spline should be
, <???, pointnum/(numpoints-1)*2-1, ???>, radius
#declare pointnum = pointnum + 1;
#end
}
The pointnum/(numpoints-1)*2-1 is the y value, which will steadily increase
from -1 to 1. Now, as we go around the sphere, the X and Z values will be
sine and cosine times the radius of the cross section of the sphere at the
current y value. So...
#declare numrotations = 3;
sphere_sweep {
catmul_rom_spline // check spelling on this
#declare numpoints = 20; // whatever
numpoints
#declare pointnum = 0;
#while (pointnum < numpoints)
, <cos(pointnum/(numpoints-1)*numrotations*2*pi),
pointnum/(numpoints-1)*2-1,
sin(pointnum/(numpoints-1)*numrotations*2*pi)>, radius
#declare pointnum = pointnum + 1;
#end
}
Now, that will wrap it around a cylinder. In order to wrap it around a
sphere, we have to multiply the x and z values by the radius of the cross
section of the sphere at the current y value. Since the equation of a circle
of radius 1 is y=sqrt(1-x^2)...
#declare numrotations = 3;
sphere_sweep {
catmul_rom_spline // check spelling on this
#declare numpoints = 20; // whatever
numpoints
#declare pointnum = 0;
#while (pointnum < numpoints)
#declare cury = pointnum/(numpoints-1)*2-1
, <cos(pointnum/(numpoints-1)*numrotations*2*pi) * sqrt(1-cury^2),
cury,
sin(pointnum/(numpoints-1)*numrotations*2*pi) * sqrt(1-cury^2)>, radius
#declare pointnum = pointnum + 1;
#end
}
That should do it, I think. All this code is untested. Think it all through
until you understand it; copying code won't get you anywhere the next time
you're faced with a problem to solve.
Oh, one more thing. If you want the radius to grow and then shrink, you'll
have to do that as some function of cury, such as radius = 1-cury^2.
- Slime
[ http://www.slimeland.com/ ]
[ http://www.slimeland.com/images/ ]
Post a reply to this message
|
|