vpVolumeNormals(3) | Library Functions Manual | vpVolumeNormals(3) |
vpVolumeNormals - compute surface normal vectors and gradient magnitudes for a volume
#include <volpack.h>
vpResult
vpVolumeNormals(vpc, scalar_data, length, scalar_field, grad_field, norm_field)
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).
The normal return value is VP_OK. The following error return values are possible:
VolPack(3), vpCreateContext(3), vpNormalIndex(3), vpScanlineNormals(3), vpSetClassifierTable(3), vpSetLookupShader(3)
VolPack |