Re: blobs in VisAD

Hi Ananke,

> I'm relatively new to VisAD and Java3D, so
> please sexcuse me if I ask something trivial.
> In PoV -- there's that construct, called blob.
> Can I achive a similar effect in Visad?
> Thank you very much for your help,
>         Ananke
> P.S.: Povray about blobs:
> -- from povray.doc
> 4.4.2            Blob Object
> Blobs are described as spheres and cylinders covered with "goo" which
> stretches to smoothly join them (see section "Blob"). Ideal for modelling
> atoms and molecules, blobs are also powerful tools for creating many smooth
> flowing "organic" shapes.
> A slightly more mathematical way of describing a blob would be to say that it
> is one object made up of two or more component pieces. Each piece is really
> an invisible field of force which starts out at a particular strength and
> falls off smoothly to zero at a given radius. Where ever these components
> overlap in space, their field strength gets added together (and yes, we can
> have negative strength which gets subtracted out of the total as well). We
> could have just one component in a blob, but except for seeing what it looks
> like there is little point, since the real beauty of blobs is the way the
> components interact with one another.
> Let us take a simple example blob to start. Now, in fact there are a couple
> different types of components but we will look at them a little later. For
> the sake of a simple first example, let us just talk about spherical
> components. Here is a sample POV-Ray code showing a basic camera, light, and
> a simple two component blob (this scene is called blobdem1.pov):

VisAD does not support such blobs directly, but there are a
couple ways to produce the effect.

Given a set of objects you could compute a FlatField whose
value at each sample is the minimum distance from the sample
to an object.  Then an iso-surface of the FlatField will
look like these blobs.  There are a number of ways to compute
Fields that will give similar effects, for example the value
at sample s = sum { 1 / distance(s, object)^2 | for each object }
This would be the easiest approach.

Another approach would be to extend the DataRenderer class to
make a blob renderer.

If the blobs for different objects can be independent (i.e., not
flow into each other) then you could map object attributes to
Display.Shape, using a variety of different shapes to represent
different object types (for example, if the objects are molecules
the attribute may be an index into a list of molecule shapes).

Good luck,
Bill Hibbard, SSEC, 1225 W. Dayton St., Madison, WI  53706
hibbard@xxxxxxxxxxxxxxxxx  608-263-4427  fax: 608-263-6738