1 / 42

Java3D

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)

dylan-hunt
Download Presentation

Java3D

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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

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

  4. 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

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

  6. 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

  7. 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

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

  9. Java3D Gemeinsame Methoden von „Box“, „Cylinder“, „Cone“ Shape3D getShape(int id) „Box“, „Cylinder“, „Cone“ setzen sich aus weiteren Shape3DObjekten 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

  10. Java3D Konstruktoren für „Box“ 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)

  11. Java3D Konstruktoren für „Cylinder“ y 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)

  12. Java3D Beispiel: Herstellen eines JoJo

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

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

  15. 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

  16. Java3D Programmierbeispiel „ConeYoyo“

  17. 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

  18. 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

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

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

  21. 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 wirdauf ihr Absolutes gesetzt

  22. 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)

  23. 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.}

  24. 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 

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

  26. 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

  27. 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)

  28. Java3D Geometrie Klassen: Klassenhierarchie

  29. 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

  30. 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

  31. 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

  32. 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)

  33. 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)

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

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

  36. 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 !

  37. 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

  38. 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

  39. 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

  40. 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

  41. 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

  42. 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

More Related