Integrating a X-Server into a CAVE
In this SEP we have to integrate the data represented from a x-Server onto display into CAVE (Cave Automatic Virtual Environment). The data is to be represented as a texture mapped onto object(e.g. plane) in the virtual space. So the user can see a virtual desktop, placed somewhere in the virtual world. In a future SEP this desktop have to be made able to response to user interaction directly in the CAVE.
The
PDF document about this project.
Requirements
The texture have to offer high-resolution and at least movie-texture quality. A performant, reliable and flexible application is to be made, that runs on 10-Linux-box-cluster (BMW-Cave). The integration into
OpenInventor (
Coin3D),
VRED (
OpenSG) have to be implemented.
Capturing of X-Server-Image
The particular frames, which are rendered on a machine are captured via virtual framebuffer XServer (
Xvfb ) from X11. It is part of the X11 implementation and offers the possibility, to redirect the frames to the memory.
Preparation of screen data distribution
Virtual FrameBuffer provides X-Window-Dump in xwd-format. This dump is distributed over the network to the Linux-Cluster, where it is mapped as a texture onto object(plane).
Data distribution
The X-Server-Protocol care about the data-distribution over the network. It is performant, because it sends only the "changes" of the dump and not the whole dump.
To send the image-data to all 10 Linux-boxes in the cluster we use a proxy X-Server - Distributed Multi-head X-Server (Xdmx).
- X-Protocol-Communication:
Data conversion
Before rendering the image-data is converted from a library into internal format, which is supported by the rendering software. That means, that the data can be passed immediate as texture parameter to
OpenInventor? (Coin3D) and VRED (
OpenSG?).
Rendering
The Coin3D-Implementation is extended with a object, that does not read image from file, but from shared memory, which can directly get rendered. There is a object in Coin3D, which implements the whole functionality of a texture - SoTexture2. We extends this object by a object(SoActiveTexture2), that can read directly, initialize and update its image-data from shmem. This object can be used as Dynamic Shared Library.
Because the
OpenSG? texture-object allows the modifying of the internal buffer, we use this object directly and have not extended them.
- Data-Deployment:
Installation
Required Libraries and Packages
- Xvfb
- freeglut (glu)
- X11_develop (XWD-File)
- 3D-Rendering library: OpenSG, OpenInventor (Coin3D or IGS Inventor)
Deployment
- Checkout sources from svnnavab:/svn/xincave (correct?, does it work?)
- compile (??)
Execution
The Environment:
-
> Xvfb :1 -screen 0 1024x768x24 -shmem
- copy shmem id
- set LD_LIBRARY_PATH to
/ust/local/lib/dbg
and to the compiled libxgl
- OpenSG:
> ./texture2 <shmem id>
The Applications:
- export DISPLAY variable to
:1
- Start your applications (e.g. kwin, kdesktop, glxgears, xine, ...)
SEP Organisational
Goals:
- Render a X-Server output to a 2D plane in a scenegraph
- Display scene-graph in a CAVE environment (10 hosts)
Prerequisites:
- Skills in Programming in C/C++
- Skills in distributed systems (Sockets, X-Protocol)
Desired Learning:
- Improved Skills in Distributed Systems
- Skills in performant network useage and realtime systems
--
MarcusToennis - 16 Jun 2005
ExampleX3D
CarWashExample
OctagaPluginTest
EmbeddedQuickTime