For Fundamentals of Spatial Computing I explored recursive and generative architecture in a general sense. Rather than designing buildings I was concerned with generative 3D structural forms built only out of cubes aligned to a grid. I wanted to create a system that would be simple to use but be capable of creating a wide range of 3D distributions ranging from very sparse (resembling a skeletal structure) to very dense (more of a cube mountain).
I named my system ‘Levity’ which means “a manner lacking seriousness ” because I wanted my system to create silly cube constructs instead of the more typically seen organic generative forms.
Each structure starts with one or more base cubes which fork child cubes in various directions that grow each iteration until a certain termination condition is reached. In this case I set an iteration depth limit at 30 so it will always terminate after growing 30 times.
I studied L-Systems which were initially used in biology to study the evolution of algae colonies but have since been used quite extensively for generating foliage and other organic forms.
I settled on a modified L-Systems approach to drive the overall spatial distribution with additional stochastic parametrization to influence the end result. I declared a custom ‘L-Symbol’ grammar that is used to specify instructions for cube structure growth using a set of symbols taken from the grammar.
Each 3D construct is uniquely specified by a four character ‘genetic’ string. Each slot (L0 through L3) contains an ‘L-Code’ symbol that for now I have defined as the letters A through G. Each symbol represents a numerical number between 0.0 and 1.0 as well as a string of L-Symbols that can be used to construct the 3D form. (more…)
Processing.org is very useful for making audio-visual applications quickly and easily. The included Processing Development Environment (PDE) makes it easy for nonprogrammers to get started with Processing and Java programming in general but experienced programmers will probably prefer using their IDE of choice, such as Eclipse.
Processing.org has some instructions on using the Processing library with Eclipse which is a good overview for transitioning to pure Java code since the PDE performs some pre-processing that allows for their simplified syntax.
The PDE has a ‘present’ mode that makes it real easy to view the program in fullscreen but it only works on the primary display and is not directly accessible in Eclipse.
In my work on my live animation program I have figured out the code to use the default present mode with Eclipse and to do arbitrary fullscreen that automatically scales to fit the device. This way I do not need to modify any width & height variables when i set up using a projector or another monitor.
After the jump are some code snippets to help get fullscreen working automatically regardless of screen size and layout.
Today I started constructing the physical sensors that will control these visualizations. I so far have some sliding potentiometers to control continuous parameters (speeds, quantities, etc) and push buttons to control boolean flags that enable or disable various modes and extra features for the animations.
I will be adding rotary knobs as well as a distance sensor to react to proximity. Time-allowing I will also integrate my webcam to have the colors in the animation influenced by the colors of the environment or what the user is wearing.
The sensors are attached to my Arduino which reads the values and sends them over Serial via USB to my laptop. My animation program reads and reports these values. I programmed the sensor code to run in a separate thread to avoid slowing down the animation window while reading and reacting to the sensors.
Below are pics of the sliders as well as more recent screenshots of the animations.
Click each image twice to see the full resolution.
The following are some screenshots of visualizations I have been making in processing as part of my MAT594O Sensors class.
I am creating animations for the screen that will be controlled using physical real-world sensors. I am structuring it as a set of discrete visualizations that will be faded between. Sensors (and keyboard) will control which visualization is shown as well as intrinsic system parameters that will change how each visualization looks.
I am using Processing.org for the visualization part of this project.