This is an extract from my 3rd year dissertation
Using a Vicon optical motion capture suite (which was available for use in my university) I wanted to take motion capture beyond the movies, and implement a fully interactive gaming experience in which the player is the controller, This allows 6 Degrees of freedom for the player to move in, so leaning around corners, ducking, view freedom from your gun and blind firing, are realised and more immersive than a traditional keyboard and mouse setup could ever be. The Vicon suite was one of my primary reasons for choosing the University Of Hull, and I am beyond thrilled to be able to use it for my undergraduate dissertation.
The initial specification I drew up over the summer was for the player to wear a Head mounted LCD display, which allows 3D stereoscopic viewing of my virtual environment, attached to the HMD and gun are fiducial markers that enable optical tracking, the player aims with the toy gun (Which is modified with a wireless mouse) to shoot down virtual enemies.
Game engine progress
My game engine has been created from scratch in OpenGL and C++.
It Currently features:
- 3D Stereoscopic rendering
- First person tracking support (for HMD’s)
- Paralax Motion Head tracking support (for monitors/projectors)
- GLSL shader support, with bump mapping and per fragment lighting
- Skybox shader
- OBJ model loader and texture support
- Collision detection for the world, AI and gun (Ray-Sphere, AABB, OBB)
- AI enemies which seek out the player avoiding world objects.
- TCP communication with a Vicon motion capture suite
- Configurable files for tracking data transformations
It has been particular intensive in matrices with converting from the tracking coordinate system to OpenGL’s co-ordinate system, I learnt openGL’s shader pipeline to enable shaders that I created from my GLSL battlefield to work within the engine. Wrote an AI collision avoidance and steering algorithm based on vector maths.
Visual Studio C++
Render Monkey – Shader design
Blender – Gun model design & model cleanup/UV mapping
Google Sketchup – Level design
Sculptris – Charater models
Photoshop – General texturing
Vicon Real time emulator
These screenshots are now outdated (See below!)
Clockwise: Spectator camera view of level, First person View, ‘Flyray’ flying enemy with bumpmapping
Close up of the players area in which they have to defend
Rooftop level progress (Google Sketchup)
Google sketchup makes an interesting tool for level design, with the use of a 3rd party OBJ explorer the CAD tool could export models directly into my game, The texture mapping and dynamic geometry features of sketchup pretty much sold it to me as my weapon of choice to create my 3D rooftop.
Level is fully complete, Textures were aquired online, and bump maps were created using Nivida’s Normal map plugin for photoshop. The GLM model class was modified to support 2 textures and a bumpmaped phong shader, with a fallback shader if there is no normal map for a texture. Normal maps are defined in the models .mtl file.
The HMD idea was scrapped due to the age of the hardware, mainly the LCD screens offered poor contrast.
Instead the game now runs on a 5x3m 3D Rear projection wall in the Vicon suite, and makes use of paralax motion tracking (Inspired from: http://www.youtube.com/watch?v=Jd3-eiid-Uw). It makes use of 3D ontop of the paralax to give an incredible effect of the world ajoining through the screen.
Video showing the paralax motion in action, notice how the effect is lost when tracking is lost in the 5th seccond. Although this is recoreded in 2D, the mouse seems to float far infront of the world purely by the paralax illusion. In 3D this effect is hightened, and the gun appears to float far infront of the screen as if the user is holding it.