K-Spot

A release of ideas on my experiences in NYC at ITP.

Wednesday, December 21, 2005

Intro to Computational Media


Enter computational thinking and the world of Processing... timelines no longer exist and the user interface consists of a blank screen with a blinking cursor...

Attempting to descrbie things through Processing, a Java-based programming language.

Current interests are video tracking, sensory input, 3D interaction, live image processing and image manipulation, and data visualization.

Processing has been a major challenge to learn, eventhough it's one baby step at a time, I've gotten a solid grip on the fundamentals of computational thought. I do hope to gain a strong understanding of programming so that I can implement a more efficient workflow into my visual design work, whether it's after effects, interactive 3D, or anyh other multimedia project, it's vital to understand code, when understood properly it can hugely decrease project development time when compared to doing all the work visually through an authoring environment. Having the ability to create work that is reactive rather than timeline and/or render driven is a powerful ability to create open, reactive relationships between the human and the machine or networked entity.

Programming Concepts
Understanding an ArrayAn Array is a key concept of programming and it can be performed several different ways. Below I've simplified the creation of an array in Processing into a few basic steps that I understand -

1.) Declare the array. Also declare a number or variable for the size of the array. These are both global.
Things[] myThings; // This creates a myThings instance from the 'Things' class.
float[] myThings; // It could also be done just like this with out referencing an object.
int num = 20; // This will be used in the next step to set the limit of the array, I initialized it here in the same step.

2.) Finish declaring the array using the constructor method.
myThings[] = new Things[num]; // Based on the Things class.

3.) Initialize the array with values using a 'for' loop to go through each slot in the array. Typically done in the setup function.
for (int i=0; i num; i++) { // Begin for loop that gives Things its values.
myThings[i] = new Things(random(0,60),45,10); // Any class parameters are given values through the array.
}

*Alternatively, variables can be given within a for loop that's in setup, draw or somewhere else that is then passed into the object or item that's being called in the next step. This allows for each step of the array to differ (look at the pixelites example below to see how this works).

4.) Call the array with using another 'for' loop to call each element in the array and apply it to something (i.e. rect, ellipse, object, etc...). This is done within the draw function this time.
for (int i=0; i num; i++) {
myThings[i].drawThings(); // myThings movements are dictated by its class and what iterations I gave it when I initialized it. Was each iteration the same or did I give random values or incrementing variables to it...
}

Sample Works -
Basic 3D Cube - 3D Cube
Moving Pixelites - Particle Drawing
Playing with Physics - Physics Using Mouse Drag
3D image search visualization -3D Searching
I scraped the Google API to find images and redisplay them in 3D. Use the mouse to move along the Z-Axis.

Midterm - 3D Motion tracked Racquetball (mouse version) - 3D Paddle Ball Ilteris and I put in some long hours understanding how to play a pong-like game in 3D space using a video tracking to track an actual physical racquet. After many initial failures we were able to come up with a working version (unfortunately we don't have a gameover screen).
Thanks to Golan Levin, a true visual performance master, for helping us with the processing code on his site - Golan's Homepage

Final - Camera input VJ-ing (sorry won't work in browsers, requires serial and video inputs). Raudia and I both had a strong interest in VJ'ing so we decided to explore what we could do using processing. The result was a combination of user participation using light reactive particles, and sms cell phone photos. We using an entourage script that dropped imported jpeg photos into a selected folder and then created a string array that picked up the photos and displayed them in a 3D envirionment. We also had a number of QuickTime clips of tripped out visuals and bboys that we loaded in. We developed a system where the user is able to load in a clip in the background and then a hit a button to specify what transition they want to use, either cut, dissolve or wipe in the new clip. Effects we had included, pixel explode, 3D rotation, buffer zoom, audio waveform, TNO still loader, physics manipulation and a particle drawer. Wendy and Raudia created a custom VJ glove for their Pcomp final that allowed the VJ to have a much stronger ability to perform in front of a crowd. It allowed use to explore many ideas about how much more immerxive a club VJ performance could really be - non-square projection surfaces, crowd participation, a standing VJ with an enhanced wearable mixer that allows him to perform more than sit.

Other links -
http://www.processing.org
http://www.complexification.net
Visual Complexity

Valuable Code -
ICM link

0 Comments:

Post a Comment

<< Home