DIVERSE Lance Arsenault John Kelso Center for Visualization and Virtual Environments Virginia Tech, Blacksburg, VA
Outline flashy demos15 overview: goals, description, design45 participatory demos, code revealed!60 do some programming60
flashy demos
overview DIVERSE: Device Independent Virtual Environments Reconfigurable Scalable Extensible
overview: goals free/open source modular flexible extensible
overview: goals works by default stay out of the user’s way augments instead of replaces easy to use, reconfigure, extend
overview: description C++ API SGI IRIX and GNU/Linux –supports all 3 IRIX binary types
overview: design DTK- DIVERSE ToolKit dgiPf- DIVERSE interface to Performer
overview: design: DTK server library client
overview: design: DTK remote shared memory hardware services DSOs
overview: design: dgiPf uses Performer, DTK generic input interface reconfigure without recompiling using –environment variables –DSOs –tweak files
overview: design: dgiPf structures Performer classes provides scenegraph symmetric/asymmetric frusta stereo new pfNode types
overview: design: dgiPf:classes dgiPf dgiPfAugment dgiPfDisplay dgiPfInput
overview: design: dgiPf:classes dgiPf –single instance –entry point into system –factory of other objects –loads DSO dgiPfAugment objects
overview: design: dgiPf:classes dgiPfAugment –adds functionality without program modification –four entry points- return value tells dgiPf how to proceed: prePfConfig postPfConfig prePfApp postPfApp
overview: design: dgiPf:classes dgiPfDisplay –single instance –sets up scenegraph –DIVERSE to world coordinates, meters –creates and updates frusta, stereo parallax and viewpoint –creates and manages dgiPfPipe objects
overview: design: dgiPf:scenegraph
overview: design: dgiPf:coordinates
dgiPfDisplay nested structure dgiPfDisplay –dgiPfPipe dgiPfWin –dgiPfScreen »pfChannal
overview: design: dgiPf:classes dgiPfPipe –one instance per pfPipe –each object creates and manages dgiPfPwin objects
overview: design: dgiPf:classes dgiPfPwin –one instance per pfPipeWindow –each object creates and manages dgiPfScreen objects –stereo or mono
overview: design: dgiPf:classes dgiPfScreen –each object creates and manages pfChannels one per screen if mono window two if stereo window –symmetric or asymmetric viewing frustum
overview: design: dgiPf:classes dgiPfScreen –symmetric frustum fixed size base moves with user’s view and position typically desktop or non-immersive specified by Performer fov and aspect
overview: design: dgiPf:classes dgiPfScreen –asymmetric frustum base is at a fixed position shape changes with view typically head-tracked or immersive specified by a center, height, width and hpr
overview: design: dgiPf:classes VT CAVE configuration: 3 pipes 3 windows 5 screens 9 channels
overview: design: dgiPf:classes dgiPfRecord –used by input –single instance –circular queue –each item an event record –all input devices in each event record
overview: design: dgiPf:classes dgiPfInput –client of dgiPfRecord –generic devices –polled or queued –local or remote –actual or virtual –devices identified by segment name
overview: design: dgiPf:classes dgiPfInput –generic devices locator valuator button keyboard
overview: design: dgiPf:classes dgiPfInput –polled or queued- application can specify polled –reads data asynchronously –typical example: tracker, valuator queued –circular –typical example: keyboard, button
overview: design: dgiPf:classes dgiPfInput –local or remote application unaware of source –actual or virtual data from hardware or calculations
overview: design: dgiPf:classes dgiPfInput –identified by segment name ex: head –any segment name can map to any device –new segments can be created as needed
overview: design: dgiPf: dgiPf-config installation information current defaults portable code better Makefiles
overview: design: dgiPf: DSOs separately compiled dgiPfAugment objects specify which to use at runtime cumulative effect general- can insert any code uses DSOs for display, input, dynamics
overview: design: dgiPf: DSOs display DSOs unloaded after dgiPfPostConfig “base” or “modifier”
overview: design: dgiPf: DSOs base display DSOs number and attributes of dgiPfDisplay, dgiPfPipe, dgiPfPwin, dgiPfScreen objects examples –simpleDisplay –vtCaveDisplay –wallDisplay –hyperDisplay
overview: design: dgiPf: DSOs modifier display DSOs modifies attributes of objects described by base display DSO examples –stereoDisplayMod –monoDisplayMod –queryDisplayMod
overview: design: dgiPf: DSOs input DSOs not unloaded called each frame provide queued and polled input data
overview: design: dgiPf: DSOs input DSOs real or virtual devices navigators examples –keyboardInput –caveSimInput –pfTrackballNav –wandJoystickNav
overview: design: dgiPf: tweakfiles global configuration changes text-editable default path and files like “.ini” files: [section name] key = value
real soon now... dgiGl –augments OpenGL –support for more platforms hooks to other tools, packages –VRPN, VTK, VRCO trackd
real soon now... device support –Intersense tracker –Phantom haptic –MOOG motion base
real soon now... immersive emulators –persona apps –diversifly interaction tools –menus, buttons, sliders, etc. –based on flkt
real soon now... Xwand –Mouse emulation by wand or other immersive input device head’s up displays “collaborative” methods –awareness tools
participatory demos, code revealed!
do some programming dgipf-config is your friend try: dgiPf-config dgiPf-config --about dgiPf-config --env dgiPf-config --dso-files dgiPf-config --dso-dir
do some programming application development cycle: edit (vi, emacs, nedit) ……. hello.C compile…………………... make run ………………………... hello
do some programming example programs in directories below: share/dgiPf/examples under directory given by: dgiPf-config --root
do some programming Programmer’s Guide in: html/dgiPf/dgiPf_Prog_Guide.html under directory given by: dgiPf-config --root or online at: “man” pages are also installed
do some programming repeat with a different DSO: setenv DSO_FILES hyperDisplay:caveSimInput hello -or- set d = `dgiPf-config --default-dso-files` # note- back-quote! setenv DSO_FILES $d:caveSimInput hello
do some programming DSO: edit and “make” generic.C to run from the generic directory: setenv DSO_FILES simpleDisplay:generic../hello/hello
do some programming DSO: to run from the helloWorld directory: set p = `dgiPf-config --default-dso-path` setenv DSO_PATH $PWD:$p cd../helloWorld hello
do some programming tweak file: edit ~/.dgiPfrc [dgiPfPwin] fov=30 then rerun any program