Roy W Latham (rlatham++at++shell.portal.com)
Tue, 14 Mar 1995 20:55:47 -0800
I also set the notifylevel to PF_INFO and imported east.terrain1.flt.
However, the number that I obatained from modiefied function doens't seem to
match with the number of triangles generated by performer.
here is part of my code.
/*=========================================================================*/
int initSceneGraph(pfScene *scene) {
pfuTraverser trav;
pfSphere bsphere;
void* sharedArena = NULL;
pfGroup *root;
long loaded = 0;
int i;
/*===== Create a DCS for pfuXformer =====*/
ViewState->sceneDCS = pfNewDCS();
ViewState->sceneGlyph = pfNewGroup();
ViewState->sceneGroup = pfNewGroup();
pfAddChild(scene, ViewState->sceneDCS);
pfAddChild(ViewState->sceneDCS, ViewState->sceneGlyph);
pfAddChild(ViewState->sceneDCS, ViewState->sceneGroup);
for (i = 0; i < NumFiles; i++){
/*=== Add terrain to the scene ===*/
root = (pfGroup *)LoadFile(DatabaseFiles[i], NULL);
if (root == NULL){
printf( "CAN'T FIND: %s\n", DatabaseFiles[i]);
exit(-1);
}
pfAddChild(ViewState->sceneGroup, root);
++loaded;
}
/*===== FIND THE NUMBER OF TRIANGLES IN THE TERRAIN =====*/
ViewState->polygon_count_of_terrain = 0;
pfuInitTraverser(&trav);
trav.preFunc = cbPrintNodeInfo;
pfuTraverse((pfNode *)ViewState->sceneGroup, &trav);
/*===== FIND THE CENTER OF TERRAIN BEFORE GLYPHOID WAS PUT IN =====*/
pfuTravCalcBBox(ViewState->sceneGroup, &box);
pfGetNodeBSphere(ViewState->sceneGroup, &bsphere);
PFCOPY_VEC3(ViewState->terrainCenter, bsphere.center);
PFCOPY_VEC3(ViewState->viewCoord.xyz, ViewState->terrainCenter);
ViewState->sceneSize = PF_MIN2(2.5f*bsphere.radius, 40000.0f);
return loaded;
}
/*****************************************************************************/
static long cbPrintNodeInfo(pfuTraverser *trav){
pfNode *node = trav->node;
long type;
if (!node)
{
pfNotify(PFNFY_DEBUG, PFNFY_PRINT, "cbPrintNodeInfo: node null!");
return PFTRAV_CONT;
}
type = pfGetType(node);
switch (type)
{
case PFTYPE_GEODE:
{
long nGSets = pfGetNumGSets((pfGeode *)node);
long i;
for (i = 0 ; i < nGSets ; i++){
pfGeoSet *gd = pfGetGSet((pfGeode *)node, i);
long ptype = pfGetGSetPrimType(gd);
long nPrims = pfGetGSetNumPrims(gd);
switch (ptype){
case PFGS_TRIS:
ViewState->polygon_count_of_terrain += nPrims;
break;
case PFGS_QUADS:
ViewState->polygon_count_of_terrain += 2 * nPrims;
break;
case PFGS_TRISTRIPS:
ViewState->polygon_count_of_terrain += 3 * nPrims;
break;
}
}
}
break;
default:
/* just keep going */
break;
}
return PFTRAV_CONT;
}
This archive was generated by hypermail 2.0b2 on Mon Aug 10 1998 - 17:51:04 PDT