ingame_video 
goal:

"Recoding and augmenting a standard multiplayer first-person videogame for use in performative/theatre setups, involving custom interface design, the combination of a 3D-virtual space with live video feeds and sound, and staging this in a site-specific set."

considerations:

- video feed may not interfere with FPS/performance i.e. both game world and video imagery must be smooth.

- the software must allow for easy integration of a custom interface design (multiple hacked controllers).

- target OS is GNU/Linux, initial development may take place on Windows system due to preceding work in this field, however the final 'Daedalus' application will be ported and is aimed to run on *nix systems under GPL/LGPL license.

- stability and quality of the video feed in-game and overall LOD is more important than features like multiplayer functionality etc. for the initial fase of the project.

options:

a.

'OGRE plus ARToolkit'

- The ARToolkit is a "library for building Augmented Reality (AR) applications. These are applications that involve the overlay of virtual imagery on the real world." Using camera-tracked marker cards as shown in the image below, a virtual character can be superimposed with correct apparent position and orientation into the original video image.



todo:
- install ARToolkit (original) and run the included demo applications.
- use the ARToolkit's calibration programs to obtain a camera calibration file specific to my cam
- install and build ARToolkitPlus
- ARToolkitPlus comes with a simple test application and sample image. Confirm that the test image is "trackable".
- print out my own marker (from the ARToolkitPlus), glue it to a piece of cardboard, capture a frame from my webcam and hack the demo app to check that I can "track" this single image.
- To bring the webcam images into Ogre. Use Timme's plug-in, described above. It offers notification of a new frame's arrival via a listener class. It's in this listener class constructor where to instantiate the ARToolkitPlus, and the "new frame" method that searches for the marker card.
- Combined, we get a simple Ogre application with the webcam showing up as a background (see http://www.ogre3d.org/wiki/index.php/Displaying_2D_Backgrounds) and a small test mesh being moved around based on calculations coming from ARToolkitPlus.




b.

'webcam plugin for OGRE'

- OGRE (Object-Oriented Graphics Rendering Engine) is a scene-oriented, flexible 3D engine written in C++ designed to make it easier and more intuitive for developers to produce applications utilising hardware-accelerated 3D graphics. The class library abstracts all the details of using the underlying system libraries like Direct3D and OpenGL and provides an interface based on world objects and other intuitive classes.

There exists a webcam plugin for OGRE which is built upon the OpenCV Libraries, meaning that it would be possible to port this plugin to GNU/Linux. Furthermore there are several projects/installations completed using this plugin.
Demos and sources still to be tested.

c.

'GameBlender Video Texture Player'

- GameBlender Video Texture Player plug-in allows to replay video file or live video from camera device on texture in GameBlender during gameplay.

Plug-in is available for Windows OS, uses DirectShow to access video frames and Blender 2.44 sources to access GameBlender's internals. It requires Windows OS (>Win98, tested on WinXP), Blender 2.44, Python 2.5.x. It uses output colourspace format RGB24, so it requires video decoders to provide video in this format.

Sources of plug-in for Blender 2.42 (and later) contains all files that were created or modified for this plug-in. It doesn't contain project files. To compile the plug-in it requires to have accessible header files and libraries for Windows API, DirectShow, Blender and Python. The plug-in is developed using VC++ 2005. There is also a 'setup.py' script for compiling on Linux, but it requires Blender sources and OpenCV libraries and needs to tweak folders in it.
Sources are published under LGPL licence.



custom interface handling can be done using the Blender GameLogic module..