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.
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
) 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).
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).
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?
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.
Required Libraries and Packages
- freeglut (glu)
- X11_develop (XWD-File)
- 3D-Rendering library: OpenSG, OpenInventor (Coin3D or IGS Inventor)
- Checkout sources from svnnavab:/svn/xincave (correct?, does it work?)
- compile (??)
> Xvfb :1 -screen 0 1024x768x24 -shmem
- copy shmem id
- set LD_LIBRARY_PATH to
/ust/local/lib/dbg and to
the compiled libxgl
> ./texture2 <shmem id>
- export DISPLAY variable to
- Start your applications (e.g. kwin, kdesktop, glxgears, xine, ...)
- Render a X-Server output to a 2D plane in a scenegraph
- Display scene-graph in a CAVE environment (10 hosts)
- Skills in Programming in C/C++
- Skills in distributed systems (Sockets, X-Protocol)
- Improved Skills in Distributed Systems
- Skills in performant network useage and realtime systems
- 16 Jun 2005