3D rendering with PHP Die neue PEAR-Klasse Image_3D bietet die Moeglichkeit nur mit PHP5 3d-Grafiken zu rendern.

Slides:



Advertisements
Ähnliche Präsentationen
Blue J.
Advertisements

der Universität Oldenburg
der Universität Oldenburg
der Universität Oldenburg
Objektorientierte Programmierung
Der Quader hat 8 Ecken, 12 Kanten und 6 Seitenflächen.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Java3D Einfacher scene graph View branch graph BG Shape3D Knoten S
Linien, Flächen & geometrische Figuren von Mario Linge
SVG und X3D Referentin: Gergana Ivanova
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Graphische Datenverarbeitung IV Dr. Markus Heitz.
Sortieren mit Binären Bäumen
Java2D Richard Göbel.
Sortierverfahren Richard Göbel.
Einführung in die Programmierung von 3D-Grafiken Basis ist Java3D
Sortierverfahren Richard Göbel.
Licht und Schatten Richard Göbel.
FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe.
FH-Hof Java 2D - Kontext für Zeichenoperationen Richard Göbel.
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
Ein Beispiel in Java.
Processing: Arrays & Laden von Dateien Aufbauend auf dem Beispiel: File I/O LoadFile1.
Einführung in die OOP in Java
Java3d „Licht und Material“
Java-Kurs Grafik Julian Drerup.
OpenGL mit Delphi Allgemeines OpenGL-Funktionsbezeichnungen
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
DVG Felder1 Felder. DVG Felder 2 Was sind Felder? Felder sind Reihungen aus endlich vielen Elementen gleichen Typs. Z.B.: Vektoren : (x.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
DVG Verkettete Listen Verkettete Listen. DVG Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt.
Computergrafik Vom Dreieck zum Ego-Shooter Olaf Müller
FH-Hof Licht Richard Göbel. FH-Hof Licht in Java3D - Basisideen Bereitstellung unterschiedlicher Lichtquellen Definition der Wirkung einer Beleuchtung.
FH-Hof Java2D - Grundlagen Richard Göbel. FH-Hof Java2D - Funktionen Java2D unterstützt: das Zeichnen von Grafiken die Darstellung von Texten die Darstellung.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Java programmieren mit JavaKara
XNA 3D Tutorial Anzeigen eines Objektes. Inhalt Lernen Sie, wie Sie Modelle implementieren. Initializing Lernen Sie, wie Sie Modelle aus der Content Directory.
Telecooperation/RBG Technische Universität Darmstadt Copyrighted material; for TUD student use only Grundlagen der Informatik I Thema 14: Schrittweise.
Java ohne Kara. Java ohne Kara Ab jetzt: Java ohne Kara Ziel: Erfahrungen sammeln mit ersten Java Programmen.
PHP und MYSQL am Organisatorisches Der komplette Kurs im Schnelldurchgang Bewertung von wichtig und unwichtig Historisch Kulturwissenschaftliche.
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
Camera, Lights, Action… Dirk Primbs Developer Evangelist
Objectives Verstehen was unterDelegate verstanden wird
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014/15 Instanzmethoden
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Java-Kurs Übung Benutzeroberflächen und Graphik
Erfahrungen mit Microsoft DirectX 8 W. Krug, April 2002.
A Workshop About this chapter General description Units Time Schedule
Multimedia und Virtual Reality Vorlesung am Martin Kurze Multimedia in 3D.
Java-Kurs Übung Besprechung der Hausaufgabe
IT2 – WS 2005/20061Nov 14, 2005 Visibility  public: Sichtbar in allen Paketen  protected: Sichtbar innerhalb des Pakets und in den Unterklassen  (default,
Objektorientierte Programmierung (OOP)
Java Programme nur ein bisschen objektorientiert.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
Vererbung.
Java-Kurs Übung Grafik in Java - das Abstract Windowing Toolkit
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Einführung in die Programmierung mit Java
Grundkurs Informatik 11-13
Raphael Fischer Informatik II - Übung 06 Raphael Fischer
Cäsar-Verschlüsselung
4. Modellieren und Diagrammarten
Cäsar-Verschlüsselung
«Delegierter» Methoden Schablone Funktionszeiger
1. Die rekursive Datenstruktur Liste 1
3. Die Datenstruktur Graph 3.2 Repräsentation von Graphen
Grundkurs Informatik 11-13
 Präsentation transkript:

3D rendering with PHP Die neue PEAR-Klasse Image_3D bietet die Moeglichkeit nur mit PHP5 3d-Grafiken zu rendern

2 Der Vortragende ● Kore Nordmann ● Student der Informatik an der Universität Dortmund ● System Developer bei der ezSystems GmbH in Dortmund ● PHP-Entwickler seit 2001

3 Sinn ● Wo ist der Sinn eines 3D-Renderes in PHP ● Proof of Concept ● Datenvisualisierung

Überblick ● Möglichkeiten ● Objekte & Lichter ● Renderer ● Treiber ● API & Beispiele ● Aufbau einer Szene ● Eigenes Objekt erstellen ● Eigenen Treiber schreiben ● Geschwindigkeit ● Ausblick

Objekte & Lichter (1) ● Objekte sind alle zeichenbaren Elemente einer Szene ● Implementieren Image_3D_Interface_Paintable ● Gruppen von Polygonen (Punkten), um gemeinsame Transformationen zu vereinfachen ● Objekthierarchien / -bäume sind möglich

Objekte & Lichter (2) ● Beispiele für Objekte in Image_3D ● Würfel ● Kugel ● Karten ● 3ds-Importer

Objekte & Lichter (3) ● Image_3D_Interface_Paintable ● setColor(Image_3D_Color $color) ● Setzt die Farbe für alle Polygone eines Objektes ● transform(Image_3D_Matrix $matrix) ● Führt Transformationen auf allen Punkten der Polygone eines Objekte durch

Objekte & Lichter (4) ● Objektbäume ● Setzen von Eigenschaften für Teilobjekte ● Transformationen auf das ganze Objekt

Objekte & Lichter (5) ● Beliebig viele Lichtquellen werden unterstützt ● Punktlichtquellen ● Farbige Lichter

Objekte & Lichter (6) ● Image_3d_Polygon und Image_3d_Point implementieren Image_3D_Interface_Enlightenable ● getColor() ● getNormale() ● getPosition() ● Image_3d_Light berechnet aus Position des Lichtes, des Objektes und des Normalenvektors des Objektes die Lichteinstrahlung

Objekte & Lichter (7) ● Der Renderer berechnet für jedes Polygon für alle Lichter die resultierende Farbe ● foreach ($this->_polygones as $polygon) $polygon->calculateColor($this->_lights); ● Kompelxität der Berechnung O(n*m) ● n = Anzahl der Objekte ● m = Anzahl der Lichter

Renderer (1) ● Erstellen aus Polygonen, Lichtern die fertige Szene ● Berechnung der Farben abhängig vom eingestelltem Shading ● None, Flat, Gouraud ● Implementieren die Funktion zur Berechnung der 2d-Abbildung der 3d- Koordinaten ● Perspektivisch ● Isometrisch

Renderer (2) ● Perspektivisch Isometrisch

Treiber (1) ● Alle Polygone werden dem Treiber uebergeben, der diese rendert ● Zwei verschiedene Methoden zum Zeichnen der Polygone ● drawPolygon(Image_3D_Polygon $polygon) ● drawGradientPolygon(Image_3D_Polygon $polygon)

Treiber (2) ● GD-Treiber ● Benutzt die gdlib ● Kein ZBuffer, kein Gouraud-Shading ● SVG ● Keine PHP-Extensions noetig ● Gauroud-Shading ● Kein ZBuffer

Treiber (3) ● NoneFlatGouraud

Treiber (4) ● ZBuffer ● Treiber mit z-buffering ● Langsamer, aber keine falschen Polygonreinfolgen

ASCII & SVGRotate ● Beispiele

Aufbau einer Szene (1) ● Initialisierung der Welt ● require_once('Image/3D.php'); ● // Erstellen der Welt ● $world = new Image_3D(); ● $world->setColor(new Image_3D_Color(255, 255, 255)); ● // Erstes Licht einfuegen ● $light = $world->createLight(-2000, -2000, -2000); ● $light->setColor(new Image_3D_Color(255, 255, 255)); ● $redLight = $world->createLight(90, 0, 50); ● $redLight->setColor(new Image_3D_Color(255, 0, 0));

Aufbau einer Szene (2) ● Erstellung der Objekte ● $sphere = $world->createObject('sphere', array('r' => 60, 'detail' => 5)); ● $sphere->setColor(new Image_3D_Color(150, 150, 150)); ● $sphere->transform($world->createMatrix('Move', array(50, 30, 0))); ● $text = $world->createObject('3ds', 'models/Image_3D.3ds'); ● $text->setColor(new Image_3D_Color(255, 255, 255, 180)); ● $text->transform($world->createMatrix('Rotation', array(90, 0, 0))); ● $text->transform($world->createMatrix('Scale', array(5, 5, 5))); ● $text->transform($world->createMatrix('Move', array(0, -40, 0)));

Aufbau einer Szene (3) ● $world->createRenderer('perspectively'); ● $world->createDriver('SVG'); ● $world->render(400, 200, 'example.svg');

Eigenes Objekt (1) ● Objekte definieren sich durch eine Menge von Polygonen ● Noch nicht existierendes Objekt: Kegel ● require_once('Image/3D/Paintable/Object.php'); ● class Image_3D_Object_Cone extends Image_3D_Object { ● public function __construct($parameter) { ● parent::__construct(); ● } ● Cone.php in das Verzeichnis user/object/

Eigenes Objekt (2) ● Wie kommen die Polygone aufgrund der Parameter zustande? ● $radius = 1; ● $height = 1; ● $detail = max(3, (int) $parameter['detail']);

Eigenes Objekt (3) ● $top = new Image_3D_Point(0, $height, 0); ● $bottom = new Image_3D_Point(0, 0, 0); ● $last = new Image_3D_Point(1, 0, 0); ● $points[] = $last; ● for ($i = 1; $i < $detail; ++$i) { ● $actual = new Image_3D_Point(cos($i / $detail * 2 * pi()), 0, sin($i / $detail * 2 * pi())); ● $points[] = $actual; ● $this->_addPolygon(new Image_3D_Polygon($top, $last, $actual)); ● $this->_addPolygon(new Image_3D_Polygon($bottom, $last, $actual)); ● $last = $actual; ● } ● $this->_addPolygon(new Image_3D_Polygon($top, $last, $points[0])); ● $this->_addPolygon(new Image_3D_Polygon($bottom, $last, $points[0]));

Eigenes Objekt (4) ● Einzelne Segmente ergeben den Kegel

Eigener Treiber ● Treiber beliebig erweiterbar ● Polygonbasierte Treiber ● ImageMagick / GraphicsMagick ●... ● Pixelbasierte Treiber ● Vorlage: ASCII-Treiber ● HTML ●...

Geschwindigkeit ● Geschwindkeit der Treiber bei einem Licht PHP 5.1 RC3 (80% Geschwindikeitsvorteil gegenüber PH 5.04)

Ausblick ● Anbindung an Image_Graph ● Zeichnen von 3D-Graphen ● Warten auf Ideen Image_3D sinnvoll einzusetzen

Ende ● Informationen: ● /Image_3D/ /Image_3D/ ● Release von Version 0.3 am 7.11 ● Added class documentation ● Improved speed ● Added Driver for ASCII-output ● Herzlichen Dank fürs Zuhöhren