CSCI-B582 - Lecture 13.2
CAVE Collaboration with CAVERNsoft
Outline
Introduction
to CAVERNsoft
-
What is CAVERNSoft?
-
"a C++ hybrid-networking/database library optimized for the rapid construction
of collaborative VR applications."
-
simplify coding effort and improve distribution efficiency
-
Concepts
-
IRB - Information Request Broker
-
Channels - determine network characteristics (e.g. TCP/UDP/Multicast,
desired bandwidth, latency, jitter)
-
Keys - handles on (pointers to) pieces of data to be shared through
IRB
-
Links - links local and remote key; defines what happens when data
is sent or recieved; (e.g. active or passive updates, synchornization:
automatic (based on timestamp), forced, etc)
-
Non-graphical example
CAVERNsoft w/ OpenGL & CAVElib
-
Simple example
-
displayball.c++
-
bounceball.c++
-
single graphics server, possibly multiple (non-graphical)
computation clients
-
run "displayball" on local machine (e.g. trager), run "bounceball
trager" on remote machine
-
note the lack of a locking mechanism
-
More of the same
-
More complex
-
API somewhere between VRML and OpenGL
-
high-level, object-oriented, and scene-graph-based
like VRML
-
direct programming and simulation control like OpenGL
-
Features:
-
File Importers - use perfly <filename> to
see if your format works
-
Built-in multi-processing - APP/CULL/DRAW
processes (view frustum culling)
-
Built-in shared memory - multi-buffering of
scene graph reduces need for explicit shared memory calls and locks
-
Object-oriented; build scene graph dynamically: i.e. create new object,
set parameters, add to graph (addChild command)
-
LOD, Billboards, Animation Paths, Switches, Morphs, special effects all
built-in
-
delivers best possible performance from
graphics hardware (without lots of hand-tuning of OpenGL code); performance
measurement capabilities (more)
-
Available under Irix and Linux
-
Works best for visual simulation applications (e.g. campus model, virtual
display case, CAVE art) (as opposed to visualization applications.)
-
Programming:
-
library (& man page) organization (on mammoth)
-
libpr - low level (types, math, state settings)
-
libpf - high level (scene graph components, "objects")
-
libpfdb - database loader libraries
-
libpfui - user interface widgets (not applicable for CAVE use)
-
Insight books (on mammoth)
-
IRIS Perfomer Getting Started Guide
-
IRIS Performer Programmer's Guide
-
IRIS Performer Class Reference for C/C++ Programmers
-
Performer CAVE Programming
-
Examples:
-
key for interaction is the pfDCS (Dynamic Coordinate System) node
-
equivalent to the Transform node in VRML
-
pfSCS (Static Coordinate System) are more efficient for static transformations
-
Note: Performer uses Z-up right-handed coordinate system
-
pfbounce.c++
-
pfnav.c++
-
pfnav.traversal.c++
LIMBO
-
LIMBO
is a fully-functional collaborative VE made from a combination of CAVERNsoft,
Performer, and pfCAVE
-
Features:
-
customizeable avatars
-
navigation with collision detection (standard 4 DOF navigation + fly-to
navigation)
-
store & forward audio
-
persistent database
-
may load any Performer-compatible object (use delimbo)
-
database objects may be manipulated and deleted