The Graphics

As this project was all about Visuals, the graphical elements had to be top-notch. It was essential for me to create something that was at the least, visually appealing - if it didn't look good, then I failed one of my main goals for the project. I set about experimenting with OpenGL, and ways to get the best possible effects and visual appeal. From there, I worked with different implementations of 'elements', or "things you can add" in order to make the project more interesting. I aimed to have at least four "elements" ready for the final project. I ended up with a very simple 'sphere', a 'cube', an 'oscilloscope', and my personal favourite - 'particles.

OpenGL and Effects

There were three main graphical effects which made aAVis as pretty as it was. Additive Blending, Radial Blur, and Motion Blur. Each of these added a small impact on the project but when put together made it look quite impressive. In the gallery section below, you can see examples of the oscilliscope with each added/removed. The additive blending is the most essential part, it gives all the elements a 'glow' and helps them blend together. It is most essential for the particle systems. Radial blur was the next element to be implemented and was quite possibly the most difficult. The Radial blur takes a "snapshot" of the current screen, then "pastes" that screenshot on top of itself a certain number of times ( based on volume ) increasing in size each time. Giving a "radial blur" effect. And Finally, the motionblur effect. This was probably the easiest to implement in the end, however took the longest to reach a happy conclusion. Originally I wanted to use the 'render to texture' technique I had used when building the radial blur - however I was coming up against a host of problems. I eventually set on using what is known as the "accumulation buffer". And the solution was essnetially three lines of code. The downside to this easy solution is that it will not work on older graphics cards. My presentation computer has a geforce8800, and therefore I knew I would have no problems - however future versions will have to have a more elegent and user-friendly solution. Both the radial blur, and the motion blur can be turned off by pressing a trigger key on the keyboard. This allows anyone to use aAVis, but at a cost to graphical impressiveness.

3D Objects

I had originally intended to have many 3d objects available for the user to add to their preset. However time constraints meant I had to lower this group to 2. Cubes and Spheres. The Sphere was used as the example object, it only had basic movement options, and the size reacted automatically to the volume of the music. The cube had a greater amount of movement options as it used the mathematical function system. More on this system later. Essentially the 3d elements were very basic, merely used as examples. The more impressive elements were the particles and the oscilloscope.

Particles and Textures

I love particles. As often as I can I incorperate some sort of particle system into every programming thing I do. I find it facinating and hypnotic to think I coded something that looks and acts that randomly. So I knew from the start that I wanted to have a nice particle system in my project. I started off with some early concepts. I first developed the Cube Particle Simulation 1. And experimenting with this, I also created a little Happy Accident. It was around now I realised this particle system could be used for more complex shapes like oscilloscopes to create almost a 'motion blur' effect ( MAC / PC - or see the gallery ). The beauty of the particle system in the final version is it allows the user to select one of 10 ( coding limitation, can be increased, but 10 was enough for the expo ) textures. The particles can then be made to move in any direction, rotate, and react to sound.