#include #include #include #include #include #include #include #include #include #include #include #include void create_scene(pfChannel *chan); int navigate(pfTraverser *trav,void *data); void add_text(pfGroup *parent); int main(int argc,char **argv) { pfInit(); pfCAVEConfig(&argc,argv,NULL); CAVEFar = 1000; pfConfig(); pfCAVEInitChannels(); create_scene(pfCAVEMasterChan()); while (!CAVEgetbutton(CAVE_ESCKEY)) { pfSync(); pfCAVEPreFrame(); pfFrame(); pfCAVEPostFrame(); } pfCAVEHalt(); pfExit(); return 0; } #define SPEED 2.0f int navigate(pfTraverser *trav,void *data) { data; /* Make compiler shut up about unused argument */ pfDCS *nav_dcs = (pfDCS *) trav->getNode(); float jx=CAVE_JOYSTICK_X,jy=CAVE_JOYSTICK_Y; if (fabs(jx) > 0.2) CAVENavRot(1.0f*jx,'z'); if (fabs(jy) > 0.2) { float w[3]; CAVEGetVector(CAVE_WAND_FRONT,w); CAVENavTranslate(w[0]*jy*SPEED,w[1]*jy*SPEED,w[2]*jy*SPEED); } pfCAVEDCSNavTransform(nav_dcs); return PFTRAV_CONT; } void create_scene(pfChannel *chan) { pfScene *scene = new pfScene; pfGeoState *gstate = new pfGeoState; pfDCS *dcs = new pfDCS; gstate->setMode(PFSTATE_ENLIGHTING, PF_ON); gstate->setMode(PFSTATE_CULLFACE, PFCF_OFF); scene->setGState(gstate); scene->addChild(new pfLightSource); scene->addChild(dcs); dcs->setTravFuncs(PFTRAV_APP,navigate,NULL); add_text(dcs); chan->setScene(scene); } void add_text(pfGroup *parent) { pfText *text = new pfText; pfString *string = new pfString; pfFont *fnt; pfFilePath(".:/usr/src/Performer/data"); fnt = pfdLoadFont_type1("Times-Elfin",PFDFONT_EXTRUDED); if (fnt == NULL) { pfNotify(PFNFY_FATAL,PFNFY_PRINT, "Couldnt find font - Times-Elfin"); exit(1); } string->setFont(fnt); string->setMode(PFSTR_JUSTIFY, PFSTR_MIDDLE); string->setColor(0.8f, 0.8f, 0.0f, 1.0f); string->setString("Text! In 3-D!"); string->flatten(); text->addString(string); parent->addChild(text); }