pfdBuildASD(3pf) OpenGL Performer 3.2.2 libpfdu Reference Pages
NAME
pfdBuildASD, pfdStoreASD, pfdBreakTiles, pfdPagingLookahead,
pfdWriteFile, pfdLoadConfig - Construct pfASD node structure from surface
data
FUNCTION SPECIFICATION
#include <Performer/pfdu.h>
pfASD * pfdBuildASD(unsigned int numx, unsigned int numy, pfVec3 *data,
int mode, int inputlods, int buildpaging, char *prename,
char *confname, char *pagename, int *lookahead);
void pfdStoreASD(pfASD *asd, FILE *f);
void pfdBreakTiles(int numlods, pfASDLODRange *lods, int numverts,
pfASDVert *verts, int numfaces, pfASDFace *faces,
int numfaces0, char *prename, char *conf);
void pfdPagingLookahead(char *confname, char *pagename,
int *lookahead);
void pfdWriteFile(int ***FACE, int **numf, int ***V, int **numv,
pfASDFace *faces, pfASDVert *verts, pfBox *facebounds,
int lod, int x, int y, char *prename);
pfASD * pfdLoadConfig(char *fname, char *pagename);
DESCRIPTION
pfdBuildASD accepts an input surface description (such as a terrain
height field) and builds a new pfASD node, which represents the surface
as hierarchical level of detail meshes that are combined and morphed in
real-time to model and render the surface efficiently.
A rectangular surface input to pfdBuildASD is specified as an array data
of numx columns and numy rows of vertices, arranged in row-major format.
Adjacent vertices in the input array are assumed to maintain the same
adjacency in the pfASD node that is created. Coarser levels of detail of
the surface are constructed using an algorithm selected via mode. It will
build inputlods number of LODs as specified by the user.
pfdBuildASD will generate appropriate PFTERRAIN_LODS, PFTERRAIN_COORDS,
PFTERRAIN_NORMALS, PFTERRAIN_FACES, and a default pfGeoState for the
pfASD node that is created. A uniform meshing will be performed which
yields efficient triangle strips. buildpaging indicates if the pfASD
node constructed should be a pageable node. If a pageable node is
desired, then a set of paging ASD patches will be created under the base
name pagename, with lookahead number of extra tiles on the boundry during
real-time paging.
pfdBreakTiles constructs a hierarchical paging subtiles inside each LOD
of the pfASD node. It takes the already constructed pfASD structure and
divides the triangles and vertices into separate pageable units and
Page 1
pfdBuildASD(3pf) OpenGL Performer 3.2.2 libpfdu Reference Pages
output them into a set of pages.
pfdWriteFile writes pageable pfASD subtiles out in the fixed format.
pfdLoadConfig constructs a paging pfASD node from config file and
pagename file.
NOTES
We provided a few examples in pguide/libpf/C buildarcinfo.c, buildbw.c,
builddem.c, builddted.c that constructs from raw elevation data a set of
files that a pfASD node pages. Unfortunately there is a size limit on
how many levels of ASD we can constructure before we run out of memory.
Use environment varaible PFASDLODSIZE to specify the number of LODs to
build. I suggestion setting the value to 9 for illustration purposes.
Once the files are built, the next step is to convert them into
intermediate run-time paging format using a set of paging size that is
calculated based on LODRange and lookahead. pguide/libpf/C/convasd.c
provides the program that converts the data. Notice we assume the
LODRange and lookahead are the ones calculated from pfdBuildASD.c. User
can modify the numbers based on applications. This way, the intermediate
paging data can be set for a particular LODRange without regenerating the
paging tiles.
To summarize, an example of generating some paging ASD is: create a dir
bw/ buildbw pflogo.bw bw/tile bw/config bw/page convasd bw/config bw/page
modify asdfly/paging.config to pick up the config and page file, then
run_paging.
The libpfdu source code, object code and documentation are provided as
unsupported software. Routines are subject to change in future releases.
SEE ALSO
pfASD, pfTerrain
Page 2