Generating 3D Objects from Heightfields

Back in the old days, when I was a basic hacking teenager, the state of the art technique for getting awsome 3D Graphics on the atari-screen was rendering triangles based on a grayscale bitmap - aka heightfield.

I reanimated this knowledge to generate a 3D object from such a heightfield. so in fact this blog article shows how to take something like this

and turn it into something like this.

How to make an Android app using the latest Processing Beta

The Processing-Team has released a new Beta a view days ago, this version has some awsome new features including starting support for Android Applications. This is a very short howto that shows how to get a first simple sketch running in the android emulator.

Abstract Art now in 3D!

Since everything has to be 3D these days, i made a 3D version of the sketch i wrote yesterday

Another Abstract Art Generator

I just wrote another abstract art generator (click here if you havent seen the first one) in processing

mousefollowing bee in processing

i just wrote a litte processing showing a flower and a little bee that replaces the mousecursor. The bee also rotates to the right flying direction

virtual chalkboard in processing

today i coded a little processing sketch that allows to make chalk like drawings

How To Make a 3D-Paper Model from a Heightfield in Processing

I just wrote a little processing sketch that takes a height field like this

calculates a pdf containing something like this

which can be cut out and sticked together to a 3d model like this

line detection with hough-transform

I wrote a small processing sketch to work out how linedetection using hough-transform works.

click here to see it in action and get the sourcecode. the code is not optimised for speed but for my understanding :-) so don't complain if it doesn't work on live-video.

the algorithm takes a image that has run through an edge detection algorithm and turned into a black/white image and find where things like edges or circles are by converting the pixels from imagespace to a parameterspace where such detection is much easyer.

for each pixel that is set in the source image a set of parameters that satisfy the formular r = x * cos(roh) + y * sin(roh) is calculated and r and roh are plotted as the parameterspace image

every line in the input image results in a bunch of lines in the parameterspace that have a common intersection point.

in my example i use a input image like this

calculate how it looks in parameter space

and then reconstruct where the lines are

Printed Processing sketch

I just printed the first stl file that i generated using a processing sketch.

I used the unlekkerlib to export a stl file from a sketch that generates simple 3d spiral, used blender to add a socket and printed it on my makerbot. Skeinforge complained about some invalid triangles, but beside that it worked surprisingly well.

This is what it looks like in blender

and this is what the makerbot made of it

and this is the processing-sketch i used to generated the spiral

``````import unlekker.data.*;

void setup() {
size(300,300,P3D);
noLoop();
}

void draw() {
translate(width/2,height/2);
background(0);
fill(255);
lights();
noStroke();
//stroke(255);
beginRaw("unlekker.data.STL","guru.stl");
for( int i =0; i < 100; i++ ) {
for(int a=0; a < 36; a++) {
float r = 10 - map(i,0,100,0,10);
vertex( r * sin( radians( a * 10 )) + sin(radians(i*10)) * 10,
-i*1,

int j = i+1;
vertex( r * sin( radians( a * 10 )) + sin(radians(j*10)) * 10,
-j*1,
}
}
endShape();
endRaw();
}
``````

Deploying Processing apps using WebStart

To deploy a processing sketch via java webstart export the sketch as an application (i used my randomlines sketch and exported it as a linux application).

then i wrote a simple jnlp file and copied the files to my webserver. The only thing thats left is providing a link to the jnlp file like this.

test.jnlp

``````<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="" href="">
<information>
<title>Processing Test</title>
<vendor>guru</vendor>
<icon href="https://www.local-guru.net/jnlp/randomlines/randomlines.png"/>
<desktop/>
<offline-allowed/>
<shortcut online="false">
<desktop/>
</shortcut>
</information>
<resources>
<j2se version="1.5+" href="http://java.sun.com/products/autodl/j2se"/>
<jar href="https://www.local-guru.net/jnlp/randomlines/lib/randomlines.jar" main="true" />
<jar href="https://www.local-guru.net/jnlp/randomlines/lib/core.jar" main="true" />
</resources>
<application-desc
name="ProcessinTestApp"
main-class="randomlines"
width="300"
height="300">
</application-desc>
<update check="background"/>
</jnlp>
``````