Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Hinrich Morgensen Geändert vor über 10 Jahren
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
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. voGeometry = createGeometry(); voAppearance = createAppearance(); this.setGeometry(voGeometry); this.setAppearance(voAppearance); 15. } 16. 17. private Geometry createGeometry() { // code to create default geometry of visual object 19. } 20. 21. private Appearance createAppearance () { // code to create default appearance of visual object 23. } 24. 25. } // end of class VisualObject
5
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)
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
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
8
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
9
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
10
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)
11
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)
12
Java3D Beispiel: Herstellen eines JoJo
13
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
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) Tuple2f(Tuple2f t) klont Tuple 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 wird auf 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
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.}
24
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
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
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_ Farben mit Transparenz ! TEXTURE_COORDINATE_2 2D Textur Koordinaten TEXTURE_COORDINATE_3 3D Textur Koordinaten bitweisesOR
32
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)
33
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)
34
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
35
Inhalt programmieren Unter-Klassen von GeometryArray Unterschiedliche Verbindung der Vertizes: „quadrilaterals“: Vorsicht: muss konvex, planare, ohne Selbstüberschneidung
36
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 !
37
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
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
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
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
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
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
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.