Difference between revisions of "Reference:Parametric"
Jump to navigation
Jump to search
Jholsenback (talk | contribs) m (1 revision: Reference Migration Initial Load) |
Jholsenback (talk | contribs) m (markup and grammar cleanup) |
||
Line 5: | Line 5: | ||
{{#indexentry:function, parametric}} | {{#indexentry:function, parametric}} | ||
{{#indexentry:keyword, function}} | {{#indexentry:keyword, function}} | ||
− | <p> | + | <p>While the <code>isosurface</code> object uses implicit surface functions like <strong><em>F(x,y,z) = 0</em></strong> the <code>parametric</code> object uses is a set of equations for a surface expressed in the form of the parameters that locate points on the surface. For example: <code>x(u,v)</code>, <code>y(u,v)</code>, <code>z(u,v)</code>. Each of the pairs of values for <code>u</code> and <code>v</code> gives a single point <code><x,y,z></code> in 3d space.</p> |
− | is a set of equations for a surface expressed in the form of the parameters that locate points on | ||
− | the surface | ||
− | in 3d space.</p> | ||
− | <p>The parametric object is not a solid | + | <p>The <code>parametric</code> object is not a solid it is <em>hollow</em>, like a thin shell. The syntax is as follows:</p> |
− | |||
− | |||
<pre> | <pre> | ||
parametric { | parametric { | ||
Line 28: | Line 23: | ||
{{#indexentry:default values, parametric}} | {{#indexentry:default values, parametric}} | ||
− | <p> | + | <p>The default values are:</p> |
− | |||
<pre> | <pre> | ||
− | accuracy : 0.001 | + | accuracy : 0.001 |
+ | contained_by : box {<-1,-1,-1>, <1,1,1>} | ||
</pre> | </pre> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{{#indexentry:contained_by, parametric}} | {{#indexentry:contained_by, parametric}} | ||
{{#indexentry:keyword, contained_by}} | {{#indexentry:keyword, contained_by}} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
{{#indexentry:max_gradient, parametric}} | {{#indexentry:max_gradient, parametric}} | ||
{{#indexentry:keyword, max_gradient}} | {{#indexentry:keyword, max_gradient}} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{{#indexentry:accuracy, parametric}} | {{#indexentry:accuracy, parametric}} | ||
{{#indexentry:keyword, accuracy}} | {{#indexentry:keyword, accuracy}} | ||
− | |||
− | |||
− | |||
{{#indexentry:precompute, parametric}} | {{#indexentry:precompute, parametric}} | ||
{{#indexentry:keyword, precompute}} | {{#indexentry:keyword, precompute}} | ||
− | < | + | <ol> |
− | surfaces into small ones (2^depth) and precomputes ranges of the variables(x,y,z) which you specify | + | <li>The first function calculates the <code>x</code> value of the surface, the second <code>y</code> and the third the <code>z</code> value. Any function that results in a float is allowed.</li> |
− | after depth. The maximum depth is 20. High values of depth can produce arrays that use a lot of memory, | + | <li>The <code><u1,v1></code> and the <code><u2,v2></code> boundaries of the <code>(u,v)</code> space, in which the surface <em>has</em> to be calculated.</li> |
− | take longer to parse and render faster. If you declare a parametric surface with the precompute keyword | + | <li>The <code>contained_by</code> <em>object</em> limits the area where POV-Ray samples for the surface of the function. The container can either be a <code>sphere</code> or a <code>box</code>.</li> |
− | and then use it twice, all arrays are in memory only once.</ | + | <li>The <code>max_gradient</code> is the maximum magnitude of all six partial derivatives over the specified ranges of u and v. That is, if you take <em>dx/du</em>, <code>dx/dv</code>, <code>dy/du</code>, <code>dy/dv</code>, <code>dz/du</code>, and <code>dz/dv</code> and calculate them over the entire range, the <code>max_gradient</code> is the maximum of the absolute values of all of those values.</li> |
− | + | <li>For <code>accuracy</code> smaller values produces more accurate surfaces, but take longer to render.</li> | |
+ | <li>Using <code>precompute</code> can speedup rendering of parametric surfaces. It simply divides parametric surfaces into small ones (2^depth) and precomputes the 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 <code>precompute</code> keyword and then use it twice, all arrays are in memory only once.</li> | ||
+ | </ol> | ||
<p>Example, a unit sphere:</p> | <p>Example, a unit sphere:</p> | ||
<pre> | <pre> |
Revision as of 21:56, 21 November 2016
While the isosurface
object uses implicit surface functions like F(x,y,z) = 0 the parametric
object uses is a set of equations for a surface expressed in the form of the parameters that locate points on the surface. For example: x(u,v)
, y(u,v)
, z(u,v)
. Each of the pairs of values for u
and v
gives a single point <x,y,z>
in 3d space.
The parametric
object is not a solid it is hollow, like a thin shell. The syntax is as follows:
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] }
The default values are:
accuracy : 0.001 contained_by : box {<-1,-1,-1>, <1,1,1>}
- The first function calculates the
x
value of the surface, the secondy
and the third thez
value. Any function that results in a float is allowed. - The
<u1,v1>
and the<u2,v2>
boundaries of the(u,v)
space, in which the surface has to be calculated. - The
contained_by
object limits the area where POV-Ray samples for the surface of the function. The container can either be asphere
or abox
. - The
max_gradient
is 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
, anddz/dv
and calculate them over the entire range, themax_gradient
is the maximum of the absolute values of all of those values. - For
accuracy
smaller values produces more accurate surfaces, but take longer to render. - Using
precompute
can speedup rendering of parametric surfaces. It simply divides parametric surfaces into small ones (2^depth) and precomputes the 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 theprecompute
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} }