I just released the Demo from my platform and interface library Betray and Seduce created for the Intel Ultimate Coder challenge.
You can download it here:
I will release full source code soon.
Here is the readme included in the download:
Seduce / Betray demo Read-Me.TXT
This is a demo of two APIs developed to showcase two libraries:
A platform layer for handling all interaction with hardware and OS. Similar to GLUT and SDL but with way more capabilities.
A interface and interaction layer for drawing an managing buttons, text, windows and so on.
The Demo is two standalone EXEs, One showcasing the Seduce interface running on top of Betray, and one standalone Betray Demo.
I would strongly suggest that when you play around in the demo you access the Betray settings, and fiddle with the Post Plugin option. It lets you turn on the Anaglyph 3D support or the color correction (You can read more about HALD Color look-up tables at: http://www.quelsolaar.com/technology/clut.html). The head tracking works especially well if you have a pair of anaglyphic glasses. Betray does support proper stereoscopic 3D, but since I don't own a 3D display I have turned it off since I can't test it.
About head tracking:
-Make sure the camera points out perpendicularly from the screen.
-Make sure the Depth camera lens is centered above the top of the screen.
-The Plugin is calibrated (roughly) to a 13 inch screen. Change the "Screen Width MM" setting if you have a different screen size.
You will find the APIs in:
Also included are .h files for 3 other libraries used by the demo. They have also been written by me.
-forge.h /* Basic defines math, color conversion, animation noise, sort triangle intersection and more. */
-imagine.h /* Threads Dll loading Execution and settings */
-unravel.h /* Binary packing and unpacking of data in to files or network */
Betray is pretty much completed, but somethings are missing in seduce still. All functions starting with seduce_ are completed, while all functions starting with sui_ is either a work in progress or to be deprecated.
-Opening of OpenGL windows.
-Full OpenGL ES support.
-Full screen mode.
-View Vantage api.
-View Direction API. (For head-mounted displays and similar)
-Multi Axis support. (Joystick, tracking, pedals, accelerometers and so on)
-Mouse wheel support.
-Dynamic button defines.
-Full keyboard support.
-Save/load file requester support.
-High precision timers.
-Clipboard support (Cut paste).
-Context update callback.
-Button event API.
-Button name look-up.
-Virtual Keyboard support.
-Full 3D sound support.
Betray has a plugin system where you can add new hardware support by using DLLs (All Dlls in the zip are Betray plugins)
Betray plugins can:
-Read input from Betray and other plugins
-Get their own OpenGL Context to do drawing and image manipulation.
-Read and change screen size.
-Set view vantage.
-Access Betrays Main loop.
-Access Events coming from Windows Event pump.
-Implement sound with any number of speakers and microphones.
-Allocate, describe and create events for any number of new and existing buttons.
-Allocate, describe and set any number of multi-dimensional axis.
-Allocate, describe and set any number of pointers with multiple buttons.
-Communicate settings to the application in the form of:
-Multi option selects
-Floating point numbers
Further, a plugin can take over the rendering and "trick" the application to draw to a texture instead of the screen, the plugin can then manipulate the image before drawing it to the screen.
When doing so, the plugin can:
-Ask the application to do multiple draw calls with different settings (For stereoscopic, multi-display and so forth)
-Set the render resolution.
-Define a FBO for the application to draw to.
-Define a transform matrix for each draw call.
Examples of things possible with this:
-Anaglyph 3D support (Included in the demo)
-Color correction (Included in the demo)
-Ultra high resolution screenshots.
-Streaming video output support.
-Alternative FSAA implementations.
-VR Cave support.
-Occulus Rift support.
-Multi display support.
-Cube map Extraction.
-Much much more....
-Easy to use immediate mode API.
-OpenGL an ES compliant.
-Unified interface where all widgets can be manipulated by Mouse/multi touch/controller
-Resolution independent Text support.
-5 point character to character collision Kerning.
-Text hit detection.
-Full text selection, with Cut copy and paste.
-password edit (*****)
-Double precession type-in number input.
-Signed integer type-in number input.
-Unsigned integer type-in number input.
-Text edit automatically places "-" in number input.
-Text editing limits to a single "." in float input.
-Text Block rendering.
-Left, Right, Center, Stretch and Code text block styling.
-Text block hit detection.
-Text button lists.
-Text length measuring.
-Text translation system that doesn't require separate lexicon files.
-Popup detection for, multi touch, controllers and mouse buttons
-Expansive icon drawing system.
-Full 3D transform support for all widgets. Both drawing and interaction.
-Directional slider cancel.
-Radial multi selects.
-Background surfaces and windows.
-Moving scaling and rotation support of any widget and or window.
-Surface color settings.
-Full view manage system.
-View Look At.
-view traditions: Linear, Ease in, Ease Out, Smooth or Cut.
-Collision system for hit detection.
-Popup system to create overlays.
Missing from Seduce:
-Icon graphics for some of the Manipulators
-Text block editing.
-On screen Keyboard
-A UI editor.
Let me know if you have problems!