kramann.info
© Guido Kramann

Login: Passwort:










4 Verwendung der Zusatz-Bibliothek Shapes3D in Android-Processing VR

4 Using the extra library Shapes3D in Android Processing VR (EN google-translate)

4 Korzystanie z dodatkowej biblioteki Shapes3D w Android Processing VR (PL google-translate)

Die Zusatzbibliothek Shapes3D bietet u.a. einige komfortable Funktionen, um Flächen zu extrudieren, Texturen einzufügen, Primitive zu erstellen usw.

The additional library Shapes3D offers i.a. some comfortab Functions to extrude surfaces, add textures, create primitives, etc.

Dodatkowa biblioteka Shapes3D oferuje i.a. niektóre wygod Funkcje do wyciągania powierzchni, dodawania tekstur, tworzenia prymitywów itp.

Im folgenden soll diese Bibliothek ein wenig erkundet werden.

In the following, this library is a little explored become.

W dalszej części ta biblioteka jest trochę zbadana być.

Weitere Beispiele finden sich direkt bei den Library-Examples in Processing.

Further examples can be found directly in the library examples in Processing.

Dalsze przykłady można znaleźć bezpośrednio w przykładach biblioteki w Processing.

Verwendung der Klasse Ellipsoid und Textur bei einer Kugel

Use of class ellipsoid and texture in a sphere

Zastosowanie klasycznej elipsoidy i tekstury w kuli

Shapes3D_001.zip - Projekt-Ordner aus dem Sketchbook.
kugel.png - Textur für Objekt

Bild 4-1: kugel.png - Textur für Objekt "kugel"

Die Textur für "kugel" wurde mit Libre-Office-Impress erstellt. Dabei wurden einfache Formen mit einem Quadrat als Hintergrund benutzt und diese dann gruppiert. Das so entstandene Objekt wurde dann kopiert, um es dann über die Zwischenablage in Gimp zu importieren. Von Gimp aus wurde es als .png-File exportiert.

The texture for sphere was created with Libre-Office-Impress. Simple shapes with a square were used as the background and then grouped them. The resulting object was then copied and then imported to the clipboard in Gimp. From Gimp it was exported as a .png file.

Tekstura sfery została utworzona za pomocą Libre-Office-Impress. Proste kształty z kwadratem były używane jako tło a następnie zgrupować je. Powstały obiekt został następnie skopiowany w celu zaimportowania go przez schowek w Gimp. Z Gimp został wyeksportowany jako plik .png.

Die Textur für "kugel2" wurde aus einem quadratischen Fotoausschnitt mit Wellen erstellt, das erst horizontal gespiegelt wurde. Das entstandene Rechteck wurde dann wiederum vertikal gespiegelt. Hierdurch passen die Kanten nahtlos aneinander.

The texture for kugel2 was made with a square photo cutout Created waves, which was first mirrored horizontally. The resulting rectangle was then mirrored vertically again. As a result, the edges fit seamlessly together.

Teksturę kugel2 wykonano za pomocą kwadratowego wycięcia zdjęcia Utworzono fale, które najpierw były odbijane poziomo. Powstały prostokąt ponownie odbił się w pionie. W rezultacie krawędzie idealnie do siebie pasują.

import processing.vr.*;
import shapes3d.utils.*;
import shapes3d.animation.*;
import shapes3d.*;

//ACHTUNG:
//Android->VR anhaken

PShape sphere;
PMatrix3D eyeMat = new PMatrix3D();

Ellipsoid kugel;
Ellipsoid kugel2;

void setup() 
{
//  fullScreen(STEREO);
    fullScreen(MONO);
    
    sphere = createShape(SPHERE, 50);
    sphere.setStroke(false);
    
    sphere.setFill(color(255,255,0));
    sphere.translate(0,300,-800);
        
    kugel = new Ellipsoid(this, 16, 16);
    kugel.setTexture("kugel.png"); //muß in einem Ordner "data" 
                                   //im Sketchordner dieses Sketches liegen.
    kugel.setRadius(40);
    kugel.moveTo(new PVector(0, 0, 0));
    kugel.strokeWeight(1.0f);
    kugel.stroke(color(255, 255, 0));
    kugel.moveTo(100, 300, -400);
    kugel.tag = "Murmel";
    kugel.drawMode(Shape3D.TEXTURE);

    kugel2 = new Ellipsoid(this, 16, 16);
    kugel2.setTexture("wasser.png"); //muß in einem Ordner "data" 
                                   //im Sketchordner dieses Sketches liegen.
    kugel2.setRadius(30);
    kugel2.moveTo(new PVector(0, 0, 0));
    kugel2.strokeWeight(1.0f);
    kugel2.stroke(color(255, 255, 0));
    kugel2.moveTo(0, 0, -80);
    kugel2.tag = "Murmel2";
    kugel2.drawMode(Shape3D.TEXTURE);

    kugel.addShape(kugel2);

}

void draw() 
{
  kugel.rotateBy(0, radians(0.5f), 0); //Rotation um die eigene Hochachse.
                                       //... nimmt Trabanten "mit"  
  //Standardeinstellungen für unser Arbeiten:
  background(0);
  getEyeMatrix(eyeMat); //Kameramatrix auslesen  
  translate(eyeMat.m03, eyeMat.m13, eyeMat.m23); //Welt in Koordinatenursprung von Kamera setzen.
  lights();
  //ENDE Standardeinstellungen für unser Arbeiten:
     
  shape(sphere);
  //shape(kugel);
  kugel.draw();
}

Code 4-1: Sketch-Quelltext "Shapes3D_001"

Screenshot der Szene.

Bild 4-2: Screenshot der Szene.

Szene

scene

scena

Shapes3D_002.zip
Screenshot zu

Bild 4-3: Screenshot zu "Shapes3D_002".

Texturen für Box-Element.

Bild 4-4: Texturen für Box-Element.

Die einzelnen Texturen wurden direkt von Ipress aus mittels "export" und mit angehaktem "selection" exportiert.

The individual textures were made directly from Ipress using export and exported with checked selection.

Poszczególne tekstury zostały wykonane bezpośrednio z Ipress przy użyciu eksportuj i eksportuj ze sprawdzoną selekcją.

import processing.vr.*;
import shapes3d.utils.*;
import shapes3d.animation.*;
import shapes3d.*;
import java.util.Random;
//ACHTUNG:
//Android->VR anhaken

Random zufall = new Random(System.currentTimeMillis());

PShape sphere;
PMatrix3D eyeMat = new PMatrix3D();

Ellipsoid erde;
Ellipsoid himmel;

Box wuerfel;

void setup() 
{
//  fullScreen(STEREO);
    fullScreen(MONO);
            
    erde = new Ellipsoid(this, 64, 64); //Angabe der Kachelung 64x64 Kacheln
    erde.setTexture("erde.png"); //muß in einem Ordner "data" 
                                   //im Sketchordner dieses Sketches liegen.
    erde.setRadius(1000,1,1000);
    erde.moveTo(0, 101, 0);  //Man schwebt in 100 Einheiten Höhe über der Erde
    erde.tag = "Erde";
    erde.drawMode(Shape3D.TEXTURE);

    himmel = new Ellipsoid(this, 64, 64);
    himmel.setTexture("himmel.png"); //muß in einem Ordner "data" 
                                   //im Sketchordner dieses Sketches liegen.
    himmel.setRadius(3000);  //noch viel größer, man befindet sich darin
    himmel.moveTo(new PVector(0, 0, 0));
    himmel.moveTo(0, 0, 0);
    himmel.tag = "Himmel";
    himmel.drawMode(Shape3D.TEXTURE);

    wuerfel = new Box(this,20); 
    wuerfel.setTexture("FRONT.png",Box.FRONT); 
    wuerfel.setTexture("BACK.png",Box.BACK); 
    wuerfel.setTexture("TOP.png",Box.TOP); 
    wuerfel.setTexture("BOTTOM.png",Box.BOTTOM); 
    wuerfel.setTexture("LEFT.png",Box.LEFT); 
    wuerfel.setTexture("RIGHT.png",Box.RIGHT); 
                                   
    wuerfel.moveTo(new PVector(0, -20, -100));
    wuerfel.tag = "Würfel";
    wuerfel.drawMode(Shape3D.TEXTURE);

    erde.addShape(wuerfel);
    
    for(int i=0;i<25;i++)
    {
        Box wuerfel;
        wuerfel = new Box(this,zufall.nextInt(20)+20,zufall.nextInt(100)+150,zufall.nextInt(20)+20); 
        wuerfel.setTexture("kamin.png",Box.ALL_SIDES); 
                                   
        wuerfel.moveTo(new PVector(-200+zufall.nextInt(400), 0, -150-zufall.nextInt(200)));
        wuerfel.tag = "Würfel";
        wuerfel.drawMode(Shape3D.TEXTURE);         
        erde.addShape(wuerfel);
    }
}

void draw() 
{
  
  wuerfel.rotateBy(0, radians(3.0f), radians(2.0f));
  
  //Standardeinstellungen für unser Arbeiten:
  background(0);
  getEyeMatrix(eyeMat); //Kameramatrix auslesen  
  translate(eyeMat.m03, eyeMat.m13, eyeMat.m23); //Welt in Koordinatenursprung von Kamera setzen.
  lights();
  //ENDE Standardeinstellungen für unser Arbeiten:
     
  himmel.draw();
  erde.draw();
}

Code 4-2: Sketch-Quelltext "Shapes3D_002"