|
![](/i/fill.gif) |
In article <37EEAA92.6CB17750@peak.edu.ee> , Margus Ramst
<mar### [at] peak edu ee> wrote:
> The manual gives a fairly complete overview of the blob object, complete with
> the falloff formula. Other than that, what mathemathics are you referring to?
Perhaps he is looking for how exactly blobs work. It is a bit technical but
maybe this (for the source code) helps:
/***************************************************************************
*
* FUNCTION
*
* All_Blob_Intersections
*
* INPUT
*
* Object - Object
* Ray - Ray
*
* OUTPUT
*
* Depth_Stack - Intersection stack
*
* RETURNS
*
* int - true, if a intersection was found
*
* AUTHOR
*
* Alexander Enzmann
*
* DESCRIPTION
*
* Generate intervals of influence for each component. After these
* are made, determine their aggregate effect on the ray. As the
* individual intervals are checked, a quartic is generated
* that represents the density at a particular point on the ray.
*
* Explanation for spherical components:
*
* After making the substitutions in MakeBlob, there is a formula
* for each component that has the form:
*
* c0 * r^4 + c1 * r^2 + c2.
*
* In order to determine the influence on the ray of all of the
* individual components, we start by determining the distance
* from any point on the ray to the specified point. This can
* be found using the pythagorean theorem, using C as the center
* of this component, P as the start of the ray, and D as the
* direction of travel of the ray:
*
* r^2 = (t * D + P - C) . (t * D + P - C)
*
* we insert this equation for each appearance of r^2 in the
* components' formula, giving:
*
* r^2 = D.D t^2 + 2 t D . (P - C) + (P - C) . (P - C)
*
* Since the direction vector has been normalized, D.D = 1.
* Using the substitutions:
*
* t0 = (P - C) . (P - C),
* t1 = D . (P - C)
*
* We can write the formula as:
*
* r^2 = t0 + 2 t t1 + t^2
*
* Taking r^2 and substituting into the formula for this component
* of the Blob we get the formula:
*
* density = c0 * (r^2)^2 + c1 * r^2 + c2,
*
* or:
*
* density = c0 * (t0 + 2 t t1 + t^2)^2 +
* c1 * (t0 + 2 t t1 + t^2) +
* c2
*
* Expanding terms and collecting with respect to "t" gives:
*
* t^4 * c0 +
* t^3 * 4 c0 t1 +
* t^2 * (c1 + 2 * c0 t0 + 4 c0 t1^2)
* t * 2 (c1 t1 + 2 c0 t0 t1) +
* c2 + c1*t0 + c0*t0^2
*
* This formula can now be solved for "t" by any of the quartic
* root solvers that are available.
*
* CHANGES
*
* Jul 1994 : Added code for cylindrical and ellipsoidical blobs. [DB]
*
* Oct 1994 : Added code to convert polynomial into a bezier curve for
* a quick test if an intersection exists in an interval. [DB]
*
* Sep 1995 : Added code to avoid numerical problems with distant blobs.
[DB]
*
***************************************************************************/
____________________________________________________
Thorsten Froehlich, Duisburg, Germany
e-mail: tho### [at] trf de
Visit POV-Ray on the web: http://mac.povray.org
Post a reply to this message
|
![](/i/fill.gif) |