Volume models are useful when we want to model scalar of vector fields. A field is a magnitude w that has some value at each point of space,
w = f(x,y,z)
Note that the information we want to store is much larger than we
sotred until now far. We do not want to model object's surface, but
the value of some magnitude at each interior point!
Some
examples of fields, that we shall model as volume models:
Any weather magnitude: pressure, air density, temperature, humidity, wind speed... (we might want to model, for instance, humidity variations inside a cloud)
Level of pollution in a certain area of atmosphere
In geology, concentration of a certain mineral at each point of subsoil
In medicine, density of tissues at each point inside an organ, level of blood irrigation, etc
Voxels models
They
are the easiest and most common way to model volumes. It is assumed
that space to model is cubic (or parallelepipedon), and that it is
divided into a regular N x N x N mesh. The field w=f(x,y,z) is
modeled through a matrix W[0..N, 0..N, 0..N ] that stores
values for the field w for each vertex of the mesh. Thus, the value
W[i,j,k] represents the value of the field w in the mesh vertex with
coordinates x[i], y[j], z[k].
Note that we are discretizing a
3D magnitude as in a digital image we discretize a 2D photograph. A
voxel world is a 3D generalization of a digital image. As “pixel”
comes from “picture element”, “voxel” comes from “volume
element”.
If field values are very uniform for some regions
it makes sense to compact the model (world) of voxels into an octal
tree (octree). If we have eight neighboring voxels that conform a
double-sized cube and its value (within some bounds) is the same, we
can compact them and work directly with its parent node in the
octree. This compaction process can be repeated to generate the
entire tree.
Voxels and octrees models for
solid objects
Given a solid
S, we can calculate its model of voxels. What happens now is that w
can only take two values: inside and outside. This voxels model can
also be compacted to generate an octree. This octree may be useful to
accelerate geometric calculations: point inside solid, Boolean
operations, interference analysis and collisions. In any case, any
space subdivision scheme can be useful if we want to accelerate
geometric calculations. In addition to the octal tree, BSP trees and
Kd-trees are also used for this purposes.