3D Disco Real Time
Basic Techniques of Interactive Media – DMS8002 – module documentation
Brief: Create a graphic engine which will display anaglyphic visuals which can be generated / controlled in real time.
What are anaglyph stereoscopic graphics?
Two versions of the same 3D scene are rendered, representing what each eye would see, a colour filter is then added to each render. Special glasses are worn which filter out the content so that they are specific to each eye – the cyan side only allows the right eye view through and vice versa. As the eyes receive two versions of the same ‘scene’ the brain is tricked into thinking that the flat screen is actually 3D.
3D Disco is a project that I have been working on for a few years, its a club night AV performance, pretty populist and fun, where all the visuals are in Anaglyphic 3D. We’re expanding what we do and hope to move more into full festival installations, so having elements where people can interact with the visuals is a really important element – this project is the first step towards this.
Initially I aimed to sketch this project in Processing and then port across to Open FrameWorks, but ended up keeping it within Processing, for reasons I will discuss later, whilst using MaxMSP as a control interface. My basic principle was to have 2 separate cameras within the environment which would render the scene for each eye, and then tint the output of each so that the colour filter of the glasses would produce the 3D effect. I then wanted to be able to have different ‘scenes’ accessible so that the basic idea of a live tool was created.
It was invaluable for me in my personal development working through the problems that I had with Processing, and I would go down this route again, but I do definitely want to move it to OpenFrameWorks for the power that it offers. Processing seems to deal with OpenGL quite strangely, and most of the problems stemmed from this. I used OpenGL as I wanted the speed and quality of visual which is provided from this opposed to P3D, and the glColourMask was a really good way of tinting the colour of each camera view.
Using MaxMSP was good for 2 areas – it provided a control interface as I couldn’t get the controlP5 library working within my patch and it also meant I could explore OSC (open sound control) as a system for externally controlling the graphics. This worked really well and I was able to have sound reactive and midi controls routed straight into Processing. This also gives a lot of possibilities for the expansion of the project, when many other interfaces could be used and parameters passed using OSC.
Looking at what I set myself as a brief I have not progressed as far as I had initially hoped, but am happy overall with what has been achieved. For it to be a useable tool much more refining has to be done but most of the principles are in place – I can control parameters in real time, which means that this can become part of an interactive installation or have other things effect it, such as the audio reactive part. I am happy with the skills I have developed in Processing (starting with zero knowledge) although there are many areas which I haven’t touched on yet which I want to.
Importing images – this is something which proved a huge hurdle in using Processing, it basically didn’t work. I need to sort this so that flat graphics can be brought in and manipulated in 3D space – most of 3D Disco is based on this principle.
Further work on the import of objects and drawing 3D shapes, perhaps look at more ways to animate and create scenes which can be manipulated.
And the main one – Port everything across to OpenFrameworks. I will be able to use real OpenGL in a framework which is designed to use it and move away from the problems of running it in Processing. A lot of work, OpenGL is vastly more complicated to work with compared to the simplicity of Processing. OF is a major part of my personal development whilst studying the Masters and this project will be both a great learning tool and a really useful exercise in reaching its potential.
Below is a zip file of the final Processing and Max files – the above text is also in .doc and .pages formats. Please also click ‘basic techniques’ tag for all previous posts which have examples of the development.