Willkommen auf unserem Seminar-Blog

Immer auf dem aktuellen Stand bleiben

Dieser Seminar-Blog befindet sich noch im Aufbau und wird in den kommenden Tagen entsprechend verfeinert.

Member Login

Lost your password?

Registration is closed

Sorry, you are not allowed to register by yourself on this site!

You must either be invited by one of our team member or request an invitation by email at viad.info {at} zhdk {dot} ch.

Lektion 1&2: Mit Processing vertraut machen

20. September 2012

Am zweiten Tag des Kurses haben wir mit Programmieren losgelegt. Um gleich einige grafische Ergebnisse zu erhalten, arbeiten wir mit Processing, einer Opensource Library für Java. Processing liefert auch gleich eine kleine Entwicklungsumgebung mit, mit der simpel und einfach kleine Projekte entworfen werden können. Da ich mit den Grundlagen des Programmierhandwerks schon vertraut war, habe ich mich aufgemacht, Processing etwas zu erkunden und mit verschiedenen Funktionen experimentiert. Die grafische Programmierung oder die Arbeit im dreidimensionalen Raum ist mir noch ziemlich unbekannt und ich habe erste kleine Gehversuche darin gewagt. Ich habe gleich mal etwas Dreidimensionales versucht und nachdem am Anfang recht lange gar nichts geschah, erschien dann plözlich das erste Würfelchen auf dem Screen. Inspiriert vom Loading-Screen von Processing habe ich experimentiert mit einer Art Netz aus Kugeln, welche durch Linien verbunden sind. Dabei können die Kugeln alle in einer Reihenfolge verbunden sein oder alle Kugeln mit Allen. Zur Darstellung der Dreidimensionalität dreht sich das Ganze. Mir gefällt das Aussehen solcher Netze und ich möchte später mal ein richtiges Projekt entwerfen, welches mit der grafischen Darstellung und Bearbeitung eines Netzwerks zu tun hat.

Ergebnis:

Code:

private float ang = 0.0;
private float sphereAng = 0.0;
private static final int SPHERE_COUNT = 20;
private static final int CLOUD_RADIUS = 200;
private static final int LINE_STRENGTH = 1;
private static final int CONNECT_LAST = 1;
private static final int CONNECT_ALL = 2;
private int sphere_size = 10;
private ArrayList<Sphere> spheres = new ArrayList<Sphere>();

public void setup() {
size(600, 600, P3D);
background(0);
noStroke();

//Ein paar Kugeln initialisieren und speichern
for(int i=0; i < SPHERE_COUNT; i++) {
Sphere sphere = new Sphere(sphere_size,(int)random(-CLOUD_RADIUS,CLOUD_RADIUS),(int)random(-CLOUD_RADIUS,CLOUD_RADIUS),(int)random(-CLOUD_RADIUS,CLOUD_RADIUS));
spheres.add(sphere);
}
}

public void draw(){
background(0);
fill(255,255,255);

//Beleuchtung
pointLight(255, 255,255, 50,50, 300);
ambientLight(70, 70, 70);

translate(width * 0.5, height * 0.5, 0);
rotateY(radians(ang));
rotateX(radians(ang));
ang += 0.2;

if(mousePressed) {
for (Sphere sphere : spheres){
if(sphere.r < 40) {
sphere.r += 1;
}
}
}
drawSphereNet(CONNECT_ALL);
}

//Zeichnet das Kugelnetz
public void drawSphereNet(int connectionMode) {

Sphere lastSphere = null;

for (Sphere sphere : spheres){

pushMatrix();
translate(sphere.getPositionX(),sphere.getPositionY(),sphere.getPositionZ());
sphere.drawSphere();
popMatrix();

if(connectionMode == CONNECT_ALL) {
//Alle  Kugeln verbinden
for(Sphere otherSphere : spheres) {
connectSpheres(sphere,otherSphere);
}
} else if(connectionMode == CONNECT_LAST) {
//Immer die Letzte mit der nächsten Kugel verbinden
if(lastSphere != null) {
connectSpheres(sphere,lastSphere);
}
lastSphere = sphere;
}
}
}

//Verbindet eine Kugel mit der Zweiten
public void connectSpheres(Sphere sphere1, Sphere sphere2) {
stroke(255);
strokeWeight(LINE_STRENGTH);
line(sphere1.getPositionX(),sphere1.getPositionY(),sphere1.getPositionZ(),sphere2.getPositionX(),sphere2.getPositionY(),sphere2.getPositionZ());
noStroke();
}

//Setzt die Kugelgrösse auf den Ursprungszustand
public void mouseReleased() {
for (Sphere sphere : spheres){
sphere.r = 10;
}
}

Kugel-Klasse

public class Sphere {

// Properties
private int r;
private int posX, posY, posZ;

// Constructor
public Sphere(int r, int posX, int posY, int posZ){
this.r = r;
this.posX = posX;
this.posY = posY;
this.posZ = posZ;
}

public void drawSphere(){
sphere(r);
}

public int getPositionX() {
return posX;
}

public int getPositionY() {
return posY;
}

public int getPositionZ() {
return posZ;
}
}