|
![](/i/fill.gif) |
In article <Xns### [at] 204 213 191 226>,
"Rafal 'Raf256' Maj" <raf### [at] raf256 com> wrote:
> > You still have to find the correct voxels and get their value. It is
> > very obvious that this will have more overhead than simply using a
> > single value.
>
> we will see...
It is pretty obvious. In fact, it is so blindingly obvious I don't see
how you could possibly think otherwise. Here is the code for accessing
the max gradient now:
ISOSRF->max_gradient
Now think about the code for grabbing the max gradient from a voxel
field. Even if you do it the wrong way, and check a single voxel from a
3D array, you would end up with something like:
ISOSRF->gradientField
[floor(ISOSRF->gfXRes*(Point[X] - ISOSRF->gfMin[X])/ISOSRF->gfSize[X])]
[floor(ISOSRF->gfYRes*(Point[Y] - ISOSRF->gfMin[Y])/ISOSRF->gfSize[Y])]
[floor(ISOSRF->gfZRes*(Point[Z] - ISOSRF->gfMin[Z])/ISOSRF->gfSize[Z])]
gradientField is a 3D array of floats, gfXRes, gfYRes, and gfZRes are
the integer xyz resolutions of the voxel field, gfMin is the minimum
extent of the field, gfSize is the size of the field. No safety checking
to make sure it stays in the array bounds.
That gets you the gradient at a single voxel assuming the simplest kind
of voxel structure you can have. What you actually need is the maximum
gradient of all the voxels the current interval passes through. The best
way to do this would probably be to get all of the voxels the entire ray
passes through and put them in a sorted list, and go through sections of
this list for each interval. That would be much, much more overhead than
a simple struct member access. It might speed up some isosurfaces which
have a few areas with very high gradients, but it would slow down others.
--
Christopher James Huff <chr### [at] mac com>
POV-Ray TAG e-mail: chr### [at] tag povray org
TAG web site: http://tag.povray.org/
Post a reply to this message
|
![](/i/fill.gif) |