Voxel field number indicating the field in which to store the scalar
samples.

grad_field

Voxel field number indicating the field in which to store the gradient
magnitudes of the scalar samples.

norm_field

Voxel field number indicating the field in which to store encoded
surface normal vectors.

DESCRIPTION

vpVolumeNormals is used to precompute values for voxel fields
used in classification and shading algorithms. The input is a 3D
array of scalar values; a separate routine is provided for processing
scanlines of voxel data (see vpScanlineNormals(3)). For each voxel, the
routine computes an approximation for the gradient of the scalar field
(using a central-difference operator). From this vector the routine
can compute the magnitude of the gradient, which is useful for some
classification schemes (see vpSetClassifierTable(3)), and a surface normal
vector in the direction of the gradient vector, which is used to
implement lighting models (see vpShadeTable(3)). The scalar value,
gradient magnitude and surface normal vector are then stored into the
fields of the voxel array, which is separate from the array of scalar
values.

The scalar array must be an array of 8-bit values (other sizes are not
currently supported). The dimensions of the array must match the
volume dimensions previously specified with vpSetVolumeSize.
The size argument is used to make sure the array has the correct
size. The voxel array must also be initialized by calling
vpSetRawVoxels prior to calling vpVolumeNormals.

The three voxel field number arguments indicate which voxel fields the
computed information should be stored into, and which field the scalar
samples should be copied to. The field numbers must correspond to
appropriately-sized voxel fields previously specified with
vpSetVoxelField. Any of these arguments can be the constant
VP_SKIP_FIELD, in which case the corresponding quantity is not
computed or copied. The voxel fields for the scalar value and the
gradient magnitude must be one-byte fields, and the field for the
surface normal vector must be a two-byte field. The constants
VP_SCALAR_MAX, VP_GRAD_MAX and VP_NORM_MAX give the maximum value that
might be stored in each field, respectively. The value stored in the
surface normal vector field is actually an encoded surface normal; see
vpNormalIndex(3).

ERRORS

The normal return value is VP_OK. The following error return values are
possible:

VPERROR_BAD_SIZE

The size of the scalar array does not match the volume dimensions.

VPERROR_BAD_VALUE

One or more of the voxel fields specified is invalid, or the
corresponding voxel field has the wrong size.

VPERROR_BAD_VOXEL

The voxel size or the voxel fields have not been specified or have
been incorrectly specified.

VPERROR_BAD_VOLUME

The volume array or volume dimensions have not been specified, or the
size of the volume array does not match the volume dimensions.