Java3D Einfacher scene graph View branch graph BG Shape3D Knoten S

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
Eine Seminararbeit von Gerd Mühlinghaus
Objektorientierte Programmierung
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Konzepte objektorientierter Systeme
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Application Programming Interface Graphische Datenverarbeitung
Linien, Flächen & geometrische Figuren von Mario Linge
Geometrie Programmierung beginnend bei 0 ist
Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes.
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
B-Bäume.
Graphische Datenverarbeitung IV Dr. Markus Heitz.
FH-Hof Texturen Richard Göbel. FH-Hof Anwendungen von Texturen Darstellung von 2D-Bildern Gestaltung von Oberflächen Simulation komplexer Geometrien...
Java: Objektorientierte Programmierung
FH-Hof Geometrie Richard Göbel. FH-Hof Aufbau des virtuellen Universums.
FH-Hof Interaktion Richard Göbel. FH-Hof Interaktion mit der Klasse Behavior Behavior-Objekte sind Knoten des Szenengraphen. Behavior-Objekte werden durch.
Einführung in die Programmierung von 3D-Grafiken Basis ist Java3D
Licht und Schatten Richard Göbel.
FH-Hof Automatisches Erzeugen von Geometrie Richard Göbel.
FH-Hof Interaktion Richard Göbel. FH-Hof Interaktion mit der Klasse Behavior Behavior-Objekte sind Knoten des Szenengraphen. Behavior-Objekte werden durch.
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 Texturen Richard Göbel. FH-Hof Anwendungen von Texturen Darstellung von 2D-Bildern Gestaltung von Oberflächen Simulation komplexer Geometrien...
Java: Grundlagen der Objektorientierung
Abstrakte Klassen.
Erweiterte Zuweisungskompatibilität
Konstruktoren.
Einführung in die OOP in Java
Java 3D Carina Fleck Licht und Material.
Java3d „Licht und Material“
Diskrete Mathematik I Vorlesung Arrays-
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Abstrakter Datentyp in C++ I - Klasse -
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
© Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Benutzer Interaktion (interaction): die virtuelle Welt reagiert auf Benutzer Eingaben.
© 2002 Dr. Cavelius - Ley - Pohlig - Taulien Programmierung im Netz und Internet: Einführung in die Programmiersprache Java Teil I 1 Klassen Objekte von.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Einführung in die Programmierung Wintersemester 2013/14 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Klassendefinitionen in Java
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2010/11 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Verhalten von Objekten in der Szene
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Klassenhierarchien, Vererbung
Programmiervorkurs WS 2014/15 Methoden
Programmiervorkurs WS 2014/15 Instanzmethoden
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
3. Beschreibung von Abläufen durch Algorithmen 3.4 Zufall
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
Java-Kurs Übung Benutzeroberflächen und Graphik Frames (Fenster)
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Java-Kurs Übung Besprechung der Hausaufgabe
Einführung in die Programmierung mit Java
Java-Kurs - 9. Übung Besprechung der Hausaufgabe
Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Auflösung von Konflikten bei Mehrfachvererbung Umbenennung mehrdeutiger Methoden.
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Konstruktoren.
Venusspiegel und Marsschild
Definition Felder Konstruktor Methoden Beispiel
Grundkurs Informatik 11-13
 Präsentation transkript:

Java3D Einfacher scene graph View branch graph BG Shape3D Knoten S Aussehen Geometrie visual object

Java3D Shape3D Shape3D() Shape3D(Geometry geometry) Shape3D(Geometry geometry, Appearance appearance ) void setGeometry(Geometry geometry) void setAppearance(Appearance appearance) ALLOW_GEOMETRY_READ | WRITE ALLOW_APPEARANCE_READ | WRITE ALLOW_COLLISION_BOUNDS_READ | WRITE

Java3D Klassenhierachie Appearance Geometry Material NodeComponent Texture ViewPlatform Attributes SceneGraphObject Sound Group Background Node Behavior Fog Leaf Light Morph Shape3D

Herstellung eines „visual Object“ Java3D Herstellung eines „visual Object“ 1. public class VisualObject extends Shape3D{ 2. 3. private Geometry voGeometry; 4. private Appearance voAppearance; 5. 6. // create Shape3D with geometry and appearance 7. // the geometry is created in method createGeometry 8. // the appearance is created in method createAppearance 9. public VisualObject() { 10. 11. voGeometry = createGeometry(); 12. voAppearance = createAppearance(); 13. this.setGeometry(voGeometry); 14. this.setAppearance(voAppearance); 15. } 16. 17. private Geometry createGeometry() { 18. // code to create default geometry of visual object 19. } 20. 21. private Appearance createAppearance () { 22. // code to create default appearance of visual object 23. } 24. 25. } // end of class VisualObject

Einfügen eines „visual Object“ in den „scene graph“ Java3D Einfügen eines „visual Object“ in den „scene graph“ objRoot.addChild( new VisualObject() ); (objRoot ist von Group abgeleitet)

Java3D Vorprogrammierte (utility) Klassen für geometrische „Primitive“ geometrische Primitive können sein: Würfel, Kugel, Kegel, Zylinder nur Aussehen (appearance) nicht die Geometrie änderbar Paket: com.sun.j3d.utils.geometry

Klassenhierarchie für geometrische „Primitive“ Java3D Klassenhierarchie für geometrische „Primitive“ java.lang.Object javax.media.j3d.SceneGraphObject javax.media.j3d.Node javax.media.j3d.Group com.sun.j3d.utils.geometry.Primitive com.sun.j3d.utils.geometry.Box com.sun.j3d.utils.geometry.Cone com.sun.j3d.utils.geometry.Cylinder com.sun.j3d.utils.geometry.Sphere

Java3D Klasse Primitive Definiert alle Eigenschaften, die Box, Sphere, Cone, Cylinder gemeinsam sind z.B. default Zahl der Polygone die benutzt werden, um Flächen darzustellen -> 3D Flächendarstellung

Java3D Gemeinsame Methoden von „Box“, „Cylinder“, „Cone“ Shape3D getShape(int id) „Box“, „Cylinder“, „Cone“ setzen sich aus weiteren Shape3D Objekten zusammen (z.B. die Flächen des Würfels) Diese Objekte haben eigene Geometrie KnotenKomponenten getShape(int id) holt die Fläche mit der Nummer id void setAppearance(Appearance appearance) Aussehen aller inneren Objekte wird gesetzt

y Java3D Konstruktoren für „Box“ Erzeugt 2m x 2m x 2m Würfel zwischen (-1,-1,-1) und (1,1,1) (m = Meter) Box(float x, float y, float z, Appearance appearance) Erzeugt xm x ym x zm Würfel im Ursprung y Konstruktoren für „Cone“ 2m Cone() 1m (umgebender Würfel im Ursprung) Cone(float radius, float height)

y Java3D Konstruktoren für „Cylinder“ 2m 1m (umgebender Würfel im Ursprung) Cylinder(float radius, float height) Cylinder(float radius, float height, Appearance appearance) Konstruktoren für „Sphere“ Sphere() Radius = 1m Sphere(float radius) Sphere(float radius, Appearance appearance)

Java3D Beispiel: Herstellen eines JoJo

Java3D View branch graph Warum dieser BG ? BG BG TG TG Jojo Objekt Warum diese TG‘s ? TG TG cone Objekt cone Objekt G G S S S S Geometry Geometry Geometry Geometry Appearance Appearance

Java3D BG Wäre dies nicht eine Vereinfachung ? View branch graph BG TG Jojo Objekt TG cone Objekt G Appearance S S Geometry Geometry

Java3D Wäre nicht zumindest dies möglich ? View branch graph BG BG TG TG Jojo Objekt TG TG cone Objekt G S S Geometry Geometry Appearance

Java3D Programmierbeispiel „ConeYoyo“

Java3D Mathematische Klassen Viele Geometrie Unterklassen beschreiben Primitive, die auf Vertizes (Eckpunkten) basieren, z.B. Punkte, Linien, gefüllte Polygone Im Paket javax.vecmath.* sind mathematische Klassen zur Beschreibung von Vertex basierten Daten zusammengefasst

Java3D Tupel Tupel: (zahl, nochNeZahl, weitereZahl, ...) Im vecmath Paket sind Tupel* Klassen Oberklassen, von denen die eigentlichen „Nutz“ Klassen abgeleitet werden: Tuple3b Tuple3f Tuple3d Tuple4b Tuple4f Tuple4d Tuple2f Tuple2d Dabei bezeichnet die Zahl die Anzahl der Zahlen im Tupel Der Buchstabe ist der Datentyp im Tupel: b = byte, f = single precision float, d = double precision float

Java3D Unterklassen Von den Tupelklassen sind jeweils folgende Klassen abgeleitet: Point* Color* Vector* <- für Texturen TexCoord*

Java3D Konstruktoren Beispielhaft für die Konstruktoren der Tupelklassen Tuple2f Konstruiert ein Tupel (0,0) Tuple2f() Tuple2f(float x, float y) Tuple2f(float[] t) Tuple2f(Tuple2f t) klont Tuple Tuple2f(Tuple2d t)

Java3D Methoden Beispielhaft für die Methoden der Tupelklassen (höhere Dimensionalität ist entsprechend anzupassen): void set(float x, float y) void set(float[] t) boolean equals(Tuple2f t1) this = this+t1 final void add(Tuple2f t1) void add(Tuple2f t1, Tuple2f t2) this = t1+t2 void sub(Tuple2f t1, Tuple2f t2) this = t1-t2 void sub(Tuple2f t1) this = this-t1 negate Vektor in place ? void negate(Tuple2f t1) void negate() void absolute(Tuple2f t1) jede Komponente wird auf ihr Absolutes gesetzt

Java3D Punktklasse Punktklassen beschreiben - die Koordinaten eines Eckpunkts oder die Position - eines Rasterbilds, - einer Punktlichtquelle, - eines Geräuschs etc. Beispielhaft hier Point3f: float distance(Point3f p1) float distanceSquared(Point3f p1) abs(x1-x2)+ abs(y1-y2)+ abs(z1-z2) float distanceL1(Point3f p1)

Color4* zusätzlich Transparenz Java3D Farbklassen Color3* RGB System Color4* zusätzlich Transparenz Byte: 0 bis 255 Single Precision Float: 0.0 bis 1.0 Kein double Precision Float Gegenüber Tuple3* bzw. Tuple4* keine zusätzlichen Methoden, d.h. erben alle Methoden von den Tuple Klassen class ColorConstants{ 4. public static final Color3f red = new Color3f(1.0f,0.0f,0.0f); 5. public static final Color3f green = new Color3f(0.0f,1.0f,0.0f); 6. public static final Color3f blue = new Color3f(0.0f,0.0f,1.0f); 7. public static final Color3f yellow = new Color3f(1.0f,1.0f,0.0f); 8. public static final Color3f cyan = new Color3f(0.0f,1.0f,1.0f); 9. public static final Color3f magenta = new Color3f(1.0f,0.0f,1.0f); 10. public static final Color3f white = new Color3f(1.0f,1.0f,1.0f); 11. public static final Color3f black = new Color3f(0.0f,0.0f,0.0f); 12.}

Nicht ererbte Methoden: Java3D Vektorklassen Oberflächennormale, Richtung von Lichtquellen Geräuschausbreitung Nicht ererbte Methoden: float length() float lengthSquared() void cross(Vector3f v1, Vector3f v2) float dot(Vector3f v1) void normalize() void normalize(Vector3f v1) float angle(Vector3f v1) Winkel in radian zwischen 0 und 

Java3D TexCoord Klassen Textur Koordinaten bei einem Vertex Es gibt nur TexCoord2f und TexCoord3f Keine nicht ererbte Methoden

Java3D Geometrie Klassen Geometry ist eine abstrakte Oberklasse Jedes Shape3D Objekt sollte seine setGeometry() Methode benutzen um sich mit einem (und nur einem) Geometry Objekt zu verbinden

Java3D Geometrie Klassen: Klassenhierarchie Geometry ist eine abstrakte Oberklasse Jedes Shape3D Objekt sollte seine setGeometry() Methode benutzen um sich mit einem (und nur einem) Geometry Objekt zu verbinden Geometry Objekte fallen in drei Unterklassen: - vertex basierte Geometrien ohne Index: jeder Vertex wird beim zeichnen eines visual objects nur einmal benutzt - vertex basierte Geometrien mit Index: die Vertizes werden beim zeichnen eines visual objects mehrfach verwendet - übrige (die Klassen Raster, Text3D, compressedGeometry)

Java3D Geometrie Klassen: Klassenhierarchie

Java3D GeometryArray Klassen In einem GeometryArray Objekt gibt es mehrere „data arrays“: - Ein Array für Vertizes (Koordinatentripel bzw. Eckpunkte) - Ein Array für die zu den Eckpunkten gehörenden Farben - Ein Array für die zu den Eckpunkten gehörenden Oberflächen- normalen - Ein Array für die zugehörigen Textur Koordinaten Größe des Arrays = Zahl der Eckpunkte der Geometrie

Java3D GeometryArray Klassen 3 Schritte im Leben eines Geometry Objekts: 1. Objekt erzeugen 2. Objekt mit Daten füllen 3. Objekt mit zugehörigem Shape3D Objekt assoziieren

GeometryArray Klassen Schritt 1 Angeben: Inhalt programmieren GeometryArray Klassen Schritt 1 Angeben: - Zahl der Eckpunkte zu was ? - Welche Daten werden an jedem Eckpunkt zusätzlich angegeben („vertex format“) Konstruktor (Vorsicht - GeometryArray ist abstract): GeometryArray(int vertexCount, int vertexFormat) COORDINATES Muss gesetzt werden ! NORMALS COLOR_3 COLOR_4 Farben mit Transparenz ! TEXTURE_COORDINATE_2 2D Textur Koordinaten TEXTURE_COORDINATE_3 3D Textur Koordinaten bitweisesOR

GeometryArray Klassen Schritt 2 Methoden zum Füllen mit Daten: Inhalt programmieren GeometryArray Klassen Schritt 2 Methoden zum Füllen mit Daten: void setCoordinate(int index, float[] coordinate) void setCoordinate(int index, double[] coordinate) void setCoordinate(int index, Point* coordinate) void setCoordinates(int index, float[] coordinates) void setCoordinates(int index, double[] coordinates) void setCoordinates(int index, Point*[] coordinates) void setColor(int index, float[] color) void setColor(int index, byte[] color) void setColor(int index, Color* color) void setColors(int index, float[] colors) void setColors(int index, byte[] colors) void setColors(int index, Color*[] colors)

GeometryArray Klassen Schritt 2 Methoden zum Füllen mit Daten: Inhalt programmieren GeometryArray Klassen Schritt 2 Methoden zum Füllen mit Daten: void setNormal(int index, float[] normal) void setNormal(int index, Vector* normal) void setNormals(int index, float[] normals) void setNormals(int index, Vector*[] normals) void setTextureCoordinate(int index, float[] texCoord) void setTextureCoordinate(int index, Point* coordinate) void setTextureCoordinates(int index, float[] texCoords) void setTextureCoordinates(int index, Point*[] texCoords)

GeometryArray Klassen Schritt 3 Inhalt programmieren GeometryArray Klassen Schritt 3 Objekt mit zugehörigem Shape3D Objekt assoziieren axisBG.addChild(new Shape3D(<GeometryArray Objekt>)); Unter-Klassen von GeometryArray

Inhalt programmieren Unter-Klassen von GeometryArray Unterschiedliche Verbindung der Vertizes: „quadrilaterals“: Vorsicht: muss konvex, planare, ohne Selbstüberschneidung

Unter-Klassen von GeometryStripArray Streifen = z.B. Inhalt programmieren Unter-Klassen von GeometryStripArray Streifen = z.B. die 4 Flächen beim Jojo Unterschiedliche Verbindung der Vertizes: (für Linien im 3dim) Wie geht‘s hier weiter ? (Wie wird v5 verbunden?) Konstruktor Beispiel (TriangleStripArray, TriangleFanArray genauso) LineStripArray(int vtxCount, int vertexFormat, int stripVertexCounts[]) Zahl der Vertizes für einen Strip. Summe der stripVertexCounts = vtxCount !

stripVertexCounts[] : die nächste Anzahl (stripVertexCounts[i]) Inhalt programmieren stripVertexCounts[] : die nächste Anzahl (stripVertexCounts[i]) gehört zu einer Fläche. Die Rand Vertizes müssen wieder auftauchen. stripVertexCounts[] v1 3 v2 6 v3 3 v4 v5 v6 v7 v8 v9 v10 v11 v12

Inhalt programmieren Ein Jojo kann mit TriangleFanArray erzeugt werden 4 Flächen mit je einem Zentralpunkt Pro Fläche 18 Vertizes, d.h. stripVertexCounts = {18,18,18,18} setCoordinates(0, coords) Ordnung in coords: Zentralpunkt, 17 übrige Punkte, Zentralpunkt, 17 übrige Punkte u.s.w. In Java3D keine gefüllten Primitive mit mehr als 4 Seiten ! -> Verwendung von z.B. der Triangulater utility Klasse um komplexe Polygone in Dreiecke bzw. Fächer (Fans) zu zerlegen

Mehrfachverwendung von Vertizes Inhalt programmieren Mehrfachverwendung von Vertizes IndexedXXArray (int vtxCount, int vtxFormat, int indexCount) IndexedXXStripArray(int vtxCount, int vtxFormat, int stripVtxCounts[], int indexCount) - Performanz schlechter - Berechnung der Normalen

Inhalt programmieren Das Erscheingunsbild („Appearance“) Geometry genügt nicht, um das vollständige Aussehen des visual object zufriedenstellend zu beschreiben Shape3D kann noch ein Appearance Objekt referenzieren Appearance Objekt „bündelt“ die Erscheinungsinformationen

Das Erscheingunsbild („Appearance“) Inhalt programmieren Das Erscheingunsbild („Appearance“) Attribut Klassen, die die Erscheinung eigentlich beschreiben: . PointAttributes . LineAttributes . PolygonAttributes . ColoringAttributes . TransparencyAttributes . RenderingAttributes . Material . TextureAttributes . Texture . TexCoordGeneration So wird „gebündelt“: ColoringAttributes ca = new ColoringAttributes(); ca.setColor (1.0, 1.0, 0.0); Appearance app = new Appearance(); app.setColoringAttributes(ca); Aliasing Polygon: culling(2.4.6.), stitching Rendering Attributes: hidden surface removal

Inhalt programmieren Weiterer interessante Punkte Kapitel 2 Aliasing Polygon: culling(2.4.6.), stitching Rendering Attributes: hidden surface removal twisted Strip Back Face Culling Exercises