Reference:Parametric
Where the isosurface object uses implicit surface functions, F(x,y,z)=0, the parametric object
is a set of equations for a surface expressed in the form of the parameters that locate points on
the surface, x(u,v), y(u,v), z(u,v). Each pair of values for u and v gives a single point <x,y,z>
in 3d space.
The parametric object is not a solid object it is hollow, like a thin shell.
Syntax:
parametric { function { FUNCTION_ITEMS }, function { FUNCTION_ITEMS }, function { FUNCTION_ITEMS } <u1,v1>, <u2,v2> [contained_by { SPHERE | BOX }] [max_gradient FLOAT_VALUE] [accuracy FLOAT_VALUE] [precompute DEPTH, VarList] }
Parametric default values:
accuracy : 0.001
The first function calculates the x
value of the surface, the second y
and
the third the z
value. Allowed is any function that results in a float.
<u1,v1>,<u2,v2>
boundaries of the (u,v)
space, in which
the surface has to be calculated
contained_by { ... }
The contained_by 'object' limits the area where POV-Ray
samples for the surface of the function. This container can either be a sphere or a box, both
of which use the standard POV-Ray syntax. If not specified a box {<-1,-1,-1>, <1,1,1>}
will be used as default.
max_gradient
,
It is not really the maximum gradient. It's the maximum magnitude of
all six partial derivatives over the specified ranges of u and v.
That is, if you take dx/du
, dx/dv
, dy/du
,
dy/dv
, dz/du
, and dz/dv
and calculate them over the entire range, the max_gradient
is the
maximum of the absolute values of all of those values.
accuracy
The default value is 0.001. Smaller values produces more accurate surfaces,
but take longer to render.
precompute
can speedup rendering of parametric surfaces. It simply divides parametric
surfaces into small ones (2^depth) and precomputes ranges of the variables(x,y,z) which you specify
after depth. The maximum depth is 20. High values of depth can produce arrays that use a lot of memory,
take longer to parse and render faster. If you declare a parametric surface with the precompute keyword
and then use it twice, all arrays are in memory only once.
Example, a unit sphere:
parametric { function { sin(u)*cos(v) } function { sin(u)*sin(v) } function { cos(u) } <0,0>, <2*pi,pi> contained_by { sphere{0, 1.1} } max_gradient ?? accuracy 0.0001 precompute 10 x,y,z pigment {rgb 1} }