new processing sketch — cubicle

we have updated our home with some new furniture. as a result we now have more space to hang some pictures and what is better than creating the pictures by yourself? yes right, code them by yourself!!! at least if you can’t draw.

the sketch I made today is called “cubicle” and does nothing more than drawing some quads and rotate every quad by some degrees. the result is vortex of quads :-)

cubicle

 

 

 

the code behind it is fairly simple, nothing special to explain. just some basic setup of size and settings and after that we’re ready to go. draw a lot of quads till they reach the border which is set in the condition of the while iteration. have a look:

size(1000,1000);
background(255);

smooth();
strokeWeight(0.5);
noFill();

float initialSize = 20.0f;
float rotation = 0.430f;

float strokeAlph = 30.0f; 

while(initialSize < height - 300)
{
  stroke(0,strokeAlph); 
  pushMatrix();
  translate(width/2, height/2);
  rotate(rotation);
  rect( 0 - initialSize / 2, 0 - initialSize / 2, initialSize, initialSize);
  popMatrix();

  initialSize += sqrt( 2 * pow(initialSize,2)) * .0033;
  strokeAlph += .1f;
  rotation += noise(PI / 3);
}

if you want you can grab the code (and other sketches too) on my github!

 

i’m on github now!

i finally managed it to commit my processing sketches to github where you can grab / edit and share them! when i  get some time to clean up my c++ stuff I will commit them too but at the moment I’m not sure when this will be…

have fun with the code: my processing sketches on github

some processing fun

 

i’ve got some time to work with processing again. creating stuff with processing is always fun because this “prototyping” kind of style. you’re way faster tryin’ some stuff than creating a similar app in cinder or openframeworks. since i’ve discovered processing it became a very important part in my toolchain. nowadays before i start to create a new project in c++ the first sketches are done in processing. my last experiments were all about perlin noise. drawing lines, arcs and even spheres in 3D…perlin noise is sooo powerful in creating randomness with a natural feeling! so here are some results of my latest …

Back on track!

 

It’s been a while since my last regular posts and some code too…

Anyway, here we go. I’ve got some time and a iPhone 4s, so I started to do some openframeworks [OF] stuff on it. OF seems to be very evolved on iOS, which is really nice to get started! Even though cinder supports iOS too, OF does it’s job very well.

My first experiment is some spirographic thing which is inspired by “Wave Clock” from Matt Pearson (I am reading his book on Processing at the moment, which is very good! ( the book is called generative art, a must read if you’re interested in creative coding!)

The graphics style of the “app” is some kind of retro styled. I think I will do some more stuff with this style, I really like it. Touch gestures are also supported. You can control the density of the single lines, change their length and color too. These few settings already give some very interesting possibilities to work with. Next step is to get smooth & automatic changes of the lines in an animation.

 

Hallo Sandkasten!

Heute habe ich es endlich mal geschafft, mir eine Sandbox auf meinem Server einzurichten. Hier werde ich in der nächsten Zeit meine Experimente im Bereich Web & Programmierung ablegen und testen. Im Moment teste ich gerade ein neues Design für diese Seite, welches sehr stark HTML5 und CSS3 benutzt. Sämtliche Animationen und Effekte kommen ohne Bilder und jQuery aus, die Seite besteht (abgesehen von den Bilddateien) nur aus HTML & CSS. Schon ziemlich kool was damit alles geht! Bisher steht aber nur eine statische Seite, im nächsten Schritt werde ich den WordPress Blog und die restlichen Seiten integrieren.

Sandkasten!

Hello World Xbox 360!

Die letzten beiden Tage habe ich mich nun endlich mal mit einem sehr interessanten Workshop von Microsoft zum Thema Game Development unter XNA beschäftigt (Link). Sämtliche benötigte Tools werden kostenlos bereitgestellt, nur die Xbox muss man selber besitzen ;-)

Zu dem Workshop sind auch sämtliche Ressourcen, also Bilder und Sounds, beigelegt, so dass man sofort loslegen kann. Ich bin wirklich begeistert von dem Artikel, die Jungs bei Microsoft haben sich dabei echt Mühe gegeben. Man bekommt einen guten Überblick zum XNA Framework geboten, welches scheinbar sehr mächtig ist. Cross Platform Development (zwischen Xbox 360, PC und Windows Phone 7) ist auch ohne weiteres möglich. Programmiert wird ganz geschmeidig in C#, was so einige Dinge natürlich sehr vereinfacht. Die mitgelieferten Klassen im XNA Framework tragen dazu aber auch erheblich bei. Wenn sich hier und da mal etwas Zeit ansammelt werde ich sicherlich wieder darauf zurück kommen und ein kleines Jump’n’Run basteln, zufälligerweise habe ich vor kurzem Commander Keen wieder für mich entdeckt!

Stay tuned!

Reach for the million…

Mein neuestes Projekt ist nun mehr oder weniger abgeschlossen. Ziel war ein Partikelsystem, welches komplett auf GPU Basis agiert. Das bedeutet, dass das komplette Partikelsystem über GLSL Shader gesteuert wird, der C++ Code dient nur als Rahmenwerk zur Anwendungserstellung und Initialisierung aller benötigten Teile.

Auf meinem MacBook Pro (late 08), in dem eine Geforce 9600M GT schlummert, schaffe ich mit 1.048.576 Partikeln immerhin 29 Frames pro Sekunde, der PC mit einer Geforce 250GT sogar 60 Frames. Das ist ein ziemlich beeindruckendes Resultat bezüglich GPGPU Programmierung wenn ich daran denke, dass mein altes Partikelsystem (CPU) schon bei ca. 25.000 Partikeln mächtig einbrach.

Die Basis des Systems ist ein Ping-Pong Framebuffer, also zwei Framebuffer, aus denen abwechselnd gelesen und geschrieben wird. Beim Anwendungsstart werden zudem vier Texturen erstellt welche die Initialisierungswerte für die Partikeleigenschaften (Positionen, Geschwindigkeiten, Alter, Masse,…) und das Vektorfeld beinhalten. Das Vektorfeld lässt die Partikel um den Koordinatenursprung rotieren (link) und wird nach der Initialisierung nicht mehr verändert. Zusätzlich wird aber noch ein “Dummy” Vertex Buffer Object benötigt, welches genauso viele Punkte beinhalten muss, wie das Partikelsystem anzeigt. Ansonsten beschränkt sich die cinder App darauf, Tastatur- und Mausereignisse abzufangen und den üblichen Kram zu erledigen.

Herz des Ganzen ist ein Fragment Shader, welcher die Berechnung der Geschwindigkeiten und Positionen der Partikel übernimmt. Der Shadercode ist bisher jedoch ziemlich einfach, außer den Zugriffen auf die Texturen, den (einfachen) Berechnungen und dem Erstellen neuer Texturen passiert hier nicht viel. Ein Ziel für die Zukunft wäre natürlich noch komplexere physikalische Vorgänge wie Bewegungen in Galaxien oder Flüssigkeiten zu simulieren, für dass Herantasten an die Thematik soll es jedoch genügen.

Der zweite Shader dient nur der Darstellung der Partikel, hier werden abhängig vom Alter die Größe und Sichtbarkeit eines Partikels definiert. Mit wenigen Anpassungen kann man aber auch hier interessante Resultate erzielen, wie zum Beispiel das Einfärben eines Partikels bezüglich seines Ortes…

Zum Abschluss bleibt zu sagen, dass GPGPU Programmierung ein Riesen Spaß ist, auch wenn der Einstieg einiges fordert. Das nächste Projekt wird sich wieder mit der Kinect beschäftigen und dann geht auch bald die Diplomarbeit los, also wie immer…stay tuned!

Neues Projekt steht in den Startlöchern!

Hier war es ja die letzte Zeit etwas ruhig, das lag daran, dass ich einige Dinge für mein Studium abschließen musste und mein Diplom vorbereiten. Nachdem das aber weitestgehend geklärt ist habe ich bald wieder etwas mehr Zeit für neue Projekte.

Ich möchte zwar noch nicht zu viel verraten, aber bei meinem nächsten Streich wird es sich wieder um die Kinect und unseren alten Freund Godzilla drehen…man kann sich sicher denken in welche Richtung das Projekt geht.

Microsoft hat in der Zwischenzeit auch sein eigenes SDK für die Kinect veröffentlicht und wie zu erwarten war, auch wieder mächtig daneben gehauen. So ist Windows only, bisher nur für nicht-kommerzielle Zwecke verwendbar und ein genauerer Blick auf die Lizenz macht es nicht besser. Das amerikanische Magazin make: hat dazu einen netten Beitrag geschrieben: Klick!

Na ja, selber schuld, die Sache wird sich mit dieser Herangehensweise sicherlich hinter ähnlich erfolgreichen Projekten wie Zune einreihen…

Ein anderes Projekt was schon so gut wie abgeschlossen ist, aber auf Eis gelegt wurde sind die 1 million particles. Das ist ein ausschließlich per GPU berechnetes Partikelsystem auf der Basis von Framebuffer Objects dem ich allerdings noch keinen Feinschliff verpassen konnte (die Partikel tanzen zur Zeit etwas lustlos durch die Gegend), da libcinder scheinbar nur zwei Framebuffer Attachements unterstüzt und ich mehr benötige. Also muss ich erstmal im Code von libcinder Anpassungen vornehmen und dann kann der Spaß beginnen.

Stay tuned!

Alles neu macht der Mai!

Es ist zwar April, aber das neue Design meiner Seite ist auch noch nicht ganz fertig. Bei einigen Sachen bin ich mir noch nicht sicher, ob sie auch so bleiben, andere sind noch nicht eingebaut. Aber es ist in Arbeit und schon ein ganzes Stück geschafft. Die nächsten Tage wird es (hoffentlich) einige Updates geben so dass ich in der nächsten Woche fertig bin.

So long!

some process on shader programming

On my way to implement a particle system on the gpu (either glsl or opencl but I would prefer opencl) I made the Game of Life from John Horton Conway (wikipedia) to improve my abilities in shader programming (which are kind of poor at the moment). Lesson was how to work with a shader and a texture, especially how to save the results of the shader in a texture to work with them in the next iteration. The code starts with a noise texture which was generated in Photoshop and saves its results in a new texture which will be used in the next step.