vpNormalIndex, vpNormal  encode/decode a surface normal vector
#include <volpack.h>
int
vpNormalIndex(nx, ny, nz)

 double nx, ny, nz;
vpResult
vpNormal(n, nx_ptr, ny_ptr, nz_ptr)

 int n;

 double *nx_ptr, *ny_ptr, *nz_ptr;
 nx
 X component of surface normal vector.
 ny
 Y component of surface normal vector.
 nz
 Z component of surface normal vector.
 n
 Encoded surface normal vector.
 nx_ptr
 Pointer to storage for returning X component of surface normal
vector.
 ny_ptr
 Pointer to storage for returning Y component of surface normal
vector.
 nz_ptr
 Pointer to storage for returning Z component of surface normal
vector.
These two routines are used to convert surface normal vectors between encoded
and unencoded forms. An unencoded vector is described by its three components
(stored as doubleprecision floating point numbers) in an orthogonal
coordinate system. An encoded vector is described by a single integer that is
suitable for use as an index in a shading lookup table. VolPack's builtin
shading routines require the use of surface normal vectors encoded using
vpNormalIndex (or one of the higherlevel normal vector computation
routines,
vpVolumeNormals or
vpScanlineNormals). Userdefined
shading routines or lookup tables are not required to use encoded normal
vectors.
vpNormalIndex computes an encoded vector from the components of an
unencoded vector. The vector must be normalized (
nx*nx + ny*ny +
nz*nz = 1). The maximum possible value of an encoded normal is given by
the constant VP_NORM_MAX.
vpNormal computes the components of a vector from the encoded integer
form. The encoded normal has less resolution than the unencoded form, so the
vector computed by
vpNormal may not be equal to the original vector
passed to
vpNormalIndex.
vpNormalIndex always returns a valid encoded normal vector.
vpNormal normally returns the value VP_OK. The following return value is
possible:
 VPERROR_BAD_VALUE
 The encoded normal vector is invalid.
VolPack(3), vpVolumeNormals(3), vpScanlineNormals(3)