Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

© Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Einfacher scene graph BG S Shape3D Knoten Aussehen Geometrie View branch graph visual object.

Ähnliche Präsentationen


Präsentation zum Thema: "© Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Einfacher scene graph BG S Shape3D Knoten Aussehen Geometrie View branch graph visual object."—  Präsentation transkript:

1 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Einfacher scene graph BG S Shape3D Knoten Aussehen Geometrie View branch graph visual object

2 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung 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 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Klassenhierachie SceneGraphObject NodeComponent Node Group Leaf Background Behavior Fog Light Morph Shape3D Sound ViewPlatform Attributes Texture Material Geometry Appearance

4 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Herstellung eines visual Object 1. public class VisualObject extends Shape3D{ private Geometry voGeometry; 4. private Appearance voAppearance; // 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() { voGeometry = createGeometry(); 12. voAppearance = createAppearance(); 13. this.setGeometry(voGeometry); 14. this.setAppearance(voAppearance); 15. } private Geometry createGeometry() { 18. // code to create default geometry of visual object 19. } private Appearance createAppearance () { 22. // code to create default appearance of visual object 23. } } // end of class VisualObject

5 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Einfügen eines visual Object in den scene graph objRoot.addChild( new VisualObject() ); ( objRoot ist von Group abgeleitet)

6 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung 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 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung 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.Sphere com.sun.j3d.utils.geometry.Box com.sun.j3d.utils.geometry.Cone com.sun.j3d.utils.geometry.Cylinder

8 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung 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

9 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung 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) getShape(int id) holt die Fläche mit der Nummer id Diese Objekte haben eigene Geometrie KnotenKomponenten void setAppearance(Appearance appearance) Aussehen aller inneren Objekte wird gesetzt

10 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Konstruktoren für Box Box(float x, float y, float z, Appearance appearance) Box() Erzeugt 2m x 2m x 2m Würfel zwischen (-1,-1,-1) und (1,1,1) (m = Meter) Erzeugt x m x y m x z m Würfel im Ursprung Konstruktoren für Cone Cone(float radius, float height) Cone() 1m 2m (umgebender Würfel im Ursprung) y

11 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Konstruktoren für Cylinder Cylinder(float radius, float height, Appearance appearance) Cylinder() Konstruktoren für Sphere Sphere(float radius) Sphere() 1m 2m (umgebender Würfel im Ursprung) y Cylinder(float radius, float height) Radius = 1m Sphere(float radius, Appearance appearance)

12 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Beispiel: Herstellen eines JoJo

13 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D BG View branch graph BG TG G S Geometry S cone Objekt G S Geometry S cone Objekt Appearance Jojo Objekt Warum dieser BG ? Warum diese TGs ?

14 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D BG View branch graph BG TG G S Geometry S cone Objekt Appearance Jojo Objekt Wäre dies nicht eine Vereinfachung ?

15 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D BG View branch graph BG TG G S Geometry S cone Objekt Appearance Jojo Objekt TG Wäre nicht zumindest dies möglich ?

16 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Programmierbeispiel ConeYoyo

17 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung 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 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Tupel Tupel: (zahl, nochNeZahl, weitereZahl,...) Im vecmath Paket sind Tupel* Klassen Oberklassen, von denen die eigentlichen Nutz Klassen abgeleitet werden: Tuple2f Tuple2d Tuple3b Tuple3f Tuple3d Tuple4b Tuple4f Tuple4d 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 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Unterklassen Von den Tupelklassen sind jeweils folgende Klassen abgeleitet: Point* Vector* Color* TexCoord* <- für Texturen

20 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Konstruktoren Beispielhaft für die Konstruktoren der Tupelklassen Tuple2f Tuple2f() Konstruiert ein Tupel (0,0) Tuple2f(float x, float y) Tuple2f(float[] t) Tuple2f(Tuple2f t) klont Tuple Tuple2f(Tuple2d t)

21 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung 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) final void add(Tuple2f t1) void add(Tuple2f t1, Tuple2f t2) void sub(Tuple2f t1, Tuple2f t2) this = this+t1 this = t1+t2 this = t1-t2 void sub(Tuple2f t1) this = this-t1 void negate(Tuple2f t1) negate Vektor in place ? void negate() void absolute(Tuple2f t1) jede Komponente wird auf ihr Absolutes gesetzt

22 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung 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) float distanceL1(Point3f p1) abs(x1-x2)+ abs(y1-y2)+ abs(z1-z2)

23 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung 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 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Vektorklassen Oberflächennormale, Richtung von Lichtquellen Geräuschausbreitung float length() float lengthSquared() void cross(Vector3f v1, Vector3f v2) float dot(Vector3f v1) void normalize() void normalize(Vector3f v1) float angle(Vector3f v1) Nicht ererbte Methoden: Winkel in radian zwischen 0 und

25 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D TexCoord Klassen Es gibt nur TexCoord2f und TexCoord3f Keine nicht ererbte Methoden Textur Koordinaten bei einem Vertex

26 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Geometrie Klassen Jedes Shape3D Objekt sollte seine setGeometry() Methode benutzen um sich mit einem (und nur einem) Geometry Objekt zu verbinden Geometry ist eine abstrakte Oberklasse

27 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Geometrie Klassen: Klassenhierarchie Jedes Shape3D Objekt sollte seine setGeometry() Methode benutzen um sich mit einem (und nur einem) Geometry Objekt zu verbinden Geometry ist eine abstrakte Oberklasse 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 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Geometrie Klassen: Klassenhierarchie

29 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung 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 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung 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 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Inhalt programmieren GeometryArray Klassen Schritt 1 Angeben: - Zahl der Eckpunkte - Welche Daten werden an jedem Eckpunkt zusätzlich angegeben (vertex format) zu was ? 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 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung 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 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung 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 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Inhalt programmieren GeometryArray Klassen Schritt 3 Objekt mit zugehörigem Shape3D Objekt assoziieren axisBG.addChild(new Shape3D( )); Unter-Klassen von GeometryArray

35 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Inhalt programmieren Unter-Klassen von GeometryArray Unterschiedliche Verbindung der Vertizes: quadrilaterals: Vorsicht: muss konvex, planare, ohne Selbstüberschneidung

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

37 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Inhalt programmieren stripVertexCounts[] : die nächste Anzahl (stripVertexCounts[i]) gehört zu einer Fläche. Die Rand Vertizes müssen wieder auftauchen. v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v stripVertexCounts[]

38 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Inhalt programmieren 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 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.

39 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Inhalt programmieren IndexedXXArray (int vtxCount, int vtxFormat, int indexCount) IndexedXXStripArray(int vtxCount, int vtxFormat, int stripVtxCounts[], int indexCount) Mehrfachverwendung von Vertizes - Performanz schlechter - Berechnung der Normalen

40 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung 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 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Inhalt programmieren Das Erscheingunsbild (Appearance) Attribut Klassen, die die Erscheinung eigentlich beschreiben: So wird gebündelt:. PointAttributes. LineAttributes. PolygonAttributes. ColoringAttributes. TransparencyAttributes. RenderingAttributes. Material. TextureAttributes. Texture. TexCoordGeneration 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 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Inhalt programmieren Aliasing Polygon: culling(2.4.6.), stitching Rendering Attributes: hidden surface removal Weiterer interessante Punkte Kapitel 2 twisted Strip Back Face Culling Exercises


Herunterladen ppt "© Prof. Dr. H. Gläser, Graphische Datenverarbeitung Java3D Einfacher scene graph BG S Shape3D Knoten Aussehen Geometrie View branch graph visual object."

Ähnliche Präsentationen


Google-Anzeigen