1 / 52

Seminararbeit Computergrafik Thema: Szenengraphen und Java3D von Florian Valentin

Seminararbeit Computergrafik Thema: Szenengraphen und Java3D von Florian Valentin. Florian Valentin – Szenengraphen und Java3D. Inhalt der Präsentation. Einführung Szenengraphen Java3D API Beispielprogramm. Florian Valentin – Szenengraphen und Java3D. Einführung - Übersicht.

dima
Télécharger la présentation

Seminararbeit Computergrafik Thema: Szenengraphen und Java3D von Florian Valentin

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. Seminararbeit ComputergrafikThema:Szenengraphen und Java3Dvon Florian Valentin Florian Valentin – Szenengraphen und Java3D

  2. Inhalt der Präsentation • Einführung • Szenengraphen • Java3D API • Beispielprogramm Florian Valentin – Szenengraphen und Java3D

  3. Einführung - Übersicht Einführung • Geschichte • Ziele • Einsatzmöglichkeiten Florian Valentin – Szenengraphen und Java3D

  4. Einführung - Geschichte • 1994 Entwicklung eines Standards für 3D Techniken • WEB 3D Konsortium • Entstehung des VRML Standards (Silicon Graphics) • 1997 Vorstellung der Java3D API auf der SIGGRAPH(Special Interest Group on Graphics and Interactive Techniques) • Kooperation von Sun, Silicon Graphics, Intel und Apple • aktuelle Version 1.3.1 Florian Valentin – Szenengraphen und Java3D

  5. Einführung - Ziele • höchstmögliche Performance • maximale Plattformunabhängigkeit • große Anzahl von 3D Features • Objektorientierte Entwicklung (Wiederverwendbarkeit) • Konzept des Szenenmanagement • Konzept des Szenengraphen Florian Valentin – Szenengraphen und Java3D

  6. Einführung - Einsatz • Internetanwendungen (Applets) • Spiele • CAD – Systeme • Virtual Reality • Autorensysteme • Visualisierung von Daten in Forschung und Wirtschaft • … Florian Valentin – Szenengraphen und Java3D

  7. Szenengraphen - Übersicht Szenengraphen • Einführung • Klassen im Szenengraphen • Klassenhierarchie • Zustände und Capabilities • Rendermodi Florian Valentin – Szenengraphen und Java3D

  8. Szenengraphen – Einführung I Florian Valentin – Szenengraphen und Java3D

  9. Szenengraphen – Einführung II • Konzept zur Erstellung einer 3D Szene • zentrales Element in der Java3D API • hierarchische Datenstruktur • gerichteter azyklischer Graph (DAG) • Knoteninhalte: • 3D Objekte • Zustandsinformationen • Transformationen / Rotationen • Licht • weitere Attribute Florian Valentin – Szenengraphen und Java3D

  10. Szenengraphen – Einführung III • Beziehungen zwischen Knoten • Vater – Kind – Beziehung (parent-child link) • Referenz Beziehung (reference link) • Vorteil der Struktur • Hierarchischer Aufbau • Wiederverwendung von Teilbäumen • einfache Implementierung • Picking Unterstützung • Kollisionserkennung • Behavior Modell Florian Valentin – Szenengraphen und Java3D

  11. Szenengraphen – Einführung IV • Nachteile • Erzeugung von ungültigen Szenengraphen • Komplexität bei großen Szenen Florian Valentin – Szenengraphen und Java3D

  12. Szenengraphen – Klassen I • Klassen des Szenengraphen • Virtuelles Universum (VirtualUnivers) • Wurzel des Szenengraphen • enthält Referenz auf Locale – Objekt • Lokale (Locale) • Container für Teilbäume • BranchGroup Knoten ist Wurzel eines Teilbaumes • 2 Arten von Teilbäumen • Inhaltsteilbaum (content branch graph) • Ansichtsteilbaum (view branch graph) Florian Valentin – Szenengraphen und Java3D

  13. Szenengraphen – Klassen II • Knoten (Node) • Gruppe (Group) - Positionierung von Objekten - TransformGroup (Transformationen, Rotationen) • Blatt (Leaf) • - Shape3D (Geometrie) • - ViewPlatform • Ereignisse (Behavior)- Interaktion, Animation - Picking Florian Valentin – Szenengraphen und Java3D

  14. Szenengraphen – Klassen III • Knotenkomponenten (Nodecomponent) • Referenzen • Geometrie • Aussehen (Appearance) • Ansichtsgraph Komponenten (view branch) • Canvas3D • PhysicalBody • PhysicalEnvironment Florian Valentin – Szenengraphen und Java3D

  15. Szenengraphen – Klassen IV Florian Valentin – Szenengraphen und Java3D

  16. Szenengraphen - Hierarchie Florian Valentin – Szenengraphen und Java3D

  17. Szenengraphen – Capabilities I • Szenengraph nach dem Kompilieren starr • spezielle Einstellung um Graphen zu ändern (Animation) • Szenengraph auf „Lebendigkeit“ testen • Möglichkeit zur Modifikation der Knoten • Zugriffsparameter = Capabilities • setCapability( int bit ) • clearCapability( int bit ) • boolean getCapability( int bit ) Florian Valentin – Szenengraphen und Java3D

  18. Szenengraphen – Capabilities II • Knoten Eigenschaften • ALLOW_TRANSFORM_READ • ALLOW_TRANSFORM_WRITE • ALLOW_CHILDREN_EXTEND • ALLOW_CHILDREN_READ • ALLOW_CHILDREN_WRITE • Shape Eigenschaften • ALLOW_GEOMETRY_READ • ALLOW_GEOMETRY_WRITE • ALLOW_APPEARANCE_READ • ALLOW_APPEARANCE_WRITE • ALLOW_COLLISION_BOUNDS_READ • ALLOW_COLLISION_BOUNDS_WRITE Florian Valentin – Szenengraphen und Java3D

  19. Szenengraphen - Rendermodi • 3 verschiedene Rendermodi • Retained • Entwickler erstellt Szene • Java3D rendert Szene ununterbrochen • Szenengraph uneingeschränkt manipulierbar • Compiled Retained • Performanzoptimierte Struktur ( compile() ) • schnellster Modus • Änderungen nur bei markierten Knoten möglich • Immediate • Pure Mode • Mix Mode Florian Valentin – Szenengraphen und Java3D

  20. Java3D - Übersicht Java3D API • Allgemein • Geometrie • erweiterte Geometrie • Objectloader • Textobjekte • Aussehen ( Appearance ) • Transformation / Rotation • Lichteffekte • Animation / Interaktion Florian Valentin – Szenengraphen und Java3D

  21. Java3D - Allgemein • Erweiterung der Java2 Plattform • OpenGL / DirectX • Kernklassen (core classes, javax.media.j3d) • Basisklassen für primitive Körper • Klassen für Szenengraphen • Audioengine • Loader • Zubehörklassen (utility classes, com.sun.j3d.utils) • mathematische Klassen (javax.vecmath) Florian Valentin – Szenengraphen und Java3D

  22. Java3D – Geometrie I • verschiedene Möglichkeiten zur Szenenmodellierung • Basisklassen in Package com.sun.j3d.utils.geometry • Quader (Box) • Kegel (Cone) • Zylinder (Cylinder) • Kugel (Sphere) • ColorCube Florian Valentin – Szenengraphen und Java3D

  23. Java3D – Geometrie II • verschiedene Konstruktoren • Beispiel Zylinder • Cylinder() erzeugt Zylinder mit Radius einer Längeneinheit und Höhe von zwei Längeneinheiten • Cylinder( float radius, float height ) erzeugt Zylinder mit vorgegebenen Werten • Cylinder( float radius, float height, Appearance appearance ) erzeugt Zylinder mit vorgegebenen Werten und bestimmten Aussehen • ähnlich bei den anderen Objekten (Sphere, Cone, Box) Florian Valentin – Szenengraphen und Java3D

  24. Java3D – erweiterte Geometrie I • Konstruktion von eigenen Objekten • Grundlage für alle Objekte  Punkt (Point3f, Point3d) • GeometryArray • PointArray (Menge von Punkten) • LineArray (2 Punkte werden mit Linie verbunden) • TriangleArray (3 Punkte bilden ein Dreieck) • QuadArray (4 Punkte bilden ein Viereck) • Unterklasse GeometryStripArray • LineStripArray • TriangleStripArray • TriangleFanArray Florian Valentin – Szenengraphen und Java3D

  25. Java3D – erweiterte Geometrie II TriangleFanArray LineStripArray Florian Valentin – Szenengraphen und Java3D

  26. Java3D – erweiterte Geometrie III • GeometryInfo • Objekte werden aus verschiedenen geometrischen Figuren zusammen gebaut • Klasse Shape3D • Konstruktor Shape3D( Geometry geo, Appearance app) • Methoden • void setGeometry(Geometry geo) • void setAppearance(Appearance app) • Beispiel Bauer1 Florian Valentin – Szenengraphen und Java3D

  27. Java3D – ObjectLoader I • Loader – Klassen com.sun.j3d.loaders • Funktionen zum Einlesen von Dateien • Lw3DLoader – Lightwave 3D Dateien • ObjectFileLoader - .obj Dateien • andere Loader frei verfügbar Florian Valentin – Szenengraphen und Java3D

  28. Java3D – ObjectLoader II • Rezept: 1. Finde einen Loader  oder schreibe einen eigenen 2. Importieren der Loader – Klassen 3. Importiere alle notwendigen Klassen 4. Deklariere eine Scene Variable 5. Erzeuge ein Loader Objekt 6. Lade die Datei Scene = loader.load(String file); 7. Füge Scene in den Szenengraph einaddChild(Scene.getSceneGroup()); • Beispiel Galeone Florian Valentin – Szenengraphen und Java3D

  29. Java3D - Textobjekte • com.sun.utils.geometry.Text2D oder Text3D • 2D Text mit Parametern Text, Schriftfarbe, -größe, -stil • Text2D(String text, Color3f color, String fontName, int fontSize, int FontStyle) • 3D Text • Klasse Font3DFont3D(Font font, FontExtrusion extrudePath) • Text3DText3D(Font3D font3d, String string, Point3f position) • Beispiel 3D Text Florian Valentin – Szenengraphen und Java3D

  30. Java3D – Appearance I • Aussehen eines geometrischen Objekts oder Shape3D • Appearance-Bundle  Attribute für Aussehen • PointAttributes (Antialiasing, Size) • LineAttributes (Antialiasing, Pattern, Line Width) • PolygonAttributes (Cull_Face, Mode, Offset, Normal_Fip) • ColoringAttributes (Color, Shader) • TransparencyAttributes (Mode, Value) Florian Valentin – Szenengraphen und Java3D

  31. Java3D – Appearance II • RenderingAttributes (Alpha_Test_Function, Allow_Alpha_Test_Value, Allow_Depth_Enable) • Material (Ambient, Diffuse, Emissive, Specular Color, Lighting, Shininess) • TextureAttributes (Blend_Color, Mode, Transform) • Texture (Boundary_Color, Enable, Filter, Image, MipMap_Mode) • TexCoordGeneration (Enable, Format, Mode, Plane) Florian Valentin – Szenengraphen und Java3D

  32. Java3D - Texturen • Rezept zur Anwendung von Texturen 1. Textur vorbereiten 2. Bild ladenTexture texture = new TextureLoader(“Bild.jpg”, this). getTexture(); 3. Setze Textur in ein Appearance – Bundle Appearance app = new Appearance(); app.setTexture(texture); 4. Spezifiziere Texturkoordinaten des Objektes Box textureCube = new Box(0.4f, 0.4f, 0.4f, Box.GENERATE_TEXTURE_COORDS, app); • Beispiel TextureImage Florian Valentin – Szenengraphen und Java3D

  33. Java3D - Transformationen • Beschreibung der Position der Objekte in der Szene • mathematische Klassen (Matrix3f, 3d, 4f, 4d) • Klasse Transform3D • Transform3D • Transform3D( Matrix4f m1) • Methoden • void mul(Transform3D t1) • void setScale(Vector3D scale) • void setTranslation(Vector3D trans) • … Florian Valentin – Szenengraphen und Java3D

  34. Java3D - Rotationen • Objekt der Klasse Transform3D • Methoden • void setRotation( Matrix3f m1) • void rotX( double angle ) • void rotY(double angle ) • … Florian Valentin – Szenengraphen und Java3D

  35. Java3D – Lichteffekte I • Beleuchtung einer Szene (Phongmodell) • javax.media.j3d.light • Ambient Light AmbientLight(boolean lightOn, Color3f color) • Directional Light DirectionalLight(boolean lightOn, Color3f color, Vector3f direction) • Point Light PointLight(Color3f color, Point3f position, Point3f attenuation) Florian Valentin – Szenengraphen und Java3D

  36. Java3D – Lichteffekte II • Spot Light SpotLight(Color3f color, Point3f position, Point3f attenuation, Vector3f direction, float spreadAngle, float concentration) • Methoden für Einstellung des Lichts • void setInfluenceingBounds(Bounds region) • void setColor(Color3f color) • void addScope(Group scope) • Generierung der Normalen bei Objekten • Parameter primflags • Beispiel Sphere Florian Valentin – Szenengraphen und Java3D

  37. Java3D – Interaktion I • Veränderung eines Objektes durch den Benutzer • Maus- / Tastenaktionen, Picking Florian Valentin – Szenengraphen und Java3D

  38. Java3D – Interaktion III • OrbitBehavior • Bewegung der Ansicht um ein Objekt • OrbitBehavior orbit = new OrbitBehavior ( canvas3D, OrbitBehavior.STOP_ZOOM ); • MouseNavigatorBehavior MouseRotate mrot = new MouseRotate (MouseBehavior.INVERT_INPUT); mrot.setTransformGroup(tfgroup); Florian Valentin – Szenengraphen und Java3D

  39. Java3D – Interaktion II • KeyNavigatorBehavior • Aktionen bei Tastenevents • KeyNavigatorBehavior keynav = new KeyNavigatorBehavior( TransformGroup trans ); Florian Valentin – Szenengraphen und Java3D

  40. Java3D – Interaktion III • Picking • Implementierung eigener Behavior • Maus-Event Auslöser Florian Valentin – Szenengraphen und Java3D

  41. Java3D – Interaktion IV • Rezept für eigene Behavior 1. Erstelle Klasse die von der Klasse Behavior erbt 2. Implementiere einen Konstruktor mit Referenz auf ein Objekt Festlegen des Initial – Trigger (WakeUp Kriterium) 3. Überschreibe void initalization() Initialisierung beim Auftreten des Trigger - Events 4. Überschreibe void processStimulus() Implementierung der Aktion Florian Valentin – Szenengraphen und Java3D

  42. Java3D – Animation I • Zeitlich bedingte Veränderungen der Objekte • Alpha • Timing für zeitbasierte Animation • alpha – value zwischen 0..1 • loopCount ( -1 = unendlich ) • mode INCREASING_ENABLE, DECREASING_ENABLE • Interpolator • benötigt Alpha – Objekt • verschiedene Animationstypen Florian Valentin – Szenengraphen und Java3D

  43. Java3D – Animation II • Rezept für eigene Animation 1. Erstelle das zu animierende Objekt 2. Erstelle Alpha-Objekt (Steuerung) 3. Erstelle Interpolator (Referenz auf Zielobjekt + Alpha) 4. Lege Region für Animation fest 5. Füge Interpolator in den Szenengraphen ein Florian Valentin – Szenengraphen und Java3D

  44. Beispielprogramm - Übersicht Beispielprogramm • Rezept zum Erstellen einer Szene • Einfaches Beispiel Florian Valentin – Szenengraphen und Java3D

  45. Beispielprogramm – Rezept I • Erzeuge ein Canvas3D Objekt • Erzeuge ein VirtualUniverse Objekt • Erzeuge ein Locale Objekt und verbinde es mit dem VirtualUniverse Objekt • Konstruiere den View Ast a. Erzeuge ein View Objekt b. Erzeuge ein ViewPlatform Objekt c. Erzeuge ein Physical Body Objekt d. Erzeuge ein PhysicalEnvironment Objekt e. Verbinde die Objekte ViewPlatform, PhysicalBody, PhysicalEnvironment und Canvas3D mit dem View Objekt Florian Valentin – Szenengraphen und Java3D

  46. Beispielprogramm – Rezept II • 5. Konstruiere den/die Content Ast/Äste • 6. Kompiliere die Äste • 7. Hänge die Äste an das Locale Objekt • Beispiel ColorCube Florian Valentin – Szenengraphen und Java3D

  47. Beispielprogramm – Rotated Cube I public class SampleCubeRotate extends JFrame { /* Konstruktor */ public SampleCubeRotate() { Container contentPane = this.getContentPane(); /* Erstelle Zeichenfläche */ contentPane.setLayout(new BorderLayout()); GraphicsConfiguration newConfig = SimpleUniverse.getPreferredConfiguration(); Canvas3D newCanvas = new Canvas3D(newConfig); /* Erstelle Simple Univers */ SimpleUniverse newUnivers = new SimpleUniverse(newCanvas); /* Setze Zeichenfläche */ contentPane.add(newCanvas, BorderLayout.CENTER); newUnivers.getViewingPlatform(). setNominalViewingTransform(); Florian Valentin – Szenengraphen und Java3D

  48. Beispielprogramm – Rotated Cube II /* Erzeuge Text und ColorCube */ BranchGroup newColorCube = createSceneGraph(); /* Füge Zweige an das Universum an */ newUnivers.addBranchGraph(newColorCube); setTitle("Rotated ColorCube"); setSize(300, 300); } Florian Valentin – Szenengraphen und Java3D

  49. Beispielprogramm – Rotated Cube III BranchGroup createSceneGraph() { // Erstelle Wurzel des Teilbaums BranchGroup objRoot = new BranchGroup(); // Rotationen Transform3D rotate = new Transform3D(); rotate.rotX(Math.PI/4.0d); // Erstelle Rotationsgruppe TransformGroup objRotate = new TransformGroup(rotate); // Erstelle neue TransformGroup TransformGroup objSpin = new TransformGroup(); // Darf verändert werden objSpin.setCapability (TransformGroup.ALLOW_TRANSFORM_WRITE); Florian Valentin – Szenengraphen und Java3D

  50. Beispielprogramm – Rotated Cube IV // füge beide Knoten zum Teilgraphen objRoot.addChild(objRotate); objRotate.addChild(objSpin); // Cube erstellen objSpin.addChild(new ColorCube(0.4)); // Erstelle Verhalten (Behavior) Transform3D yAxis = new Transform3D(); Alpha rotationAlpha = new Alpha(-1, 4000); RotationInterpolator rotator = new RotationInterpolator(rotationAlpha, objSpin, yAxis, 0.0f, (float) Math.PI*2.0f); // Erstelle Region für Verhalten BoundingSphere bounds = new BoundingSphere(); rotator.setSchedulingBounds(bounds); // Füge in Szenengraphen ein objSpin.addChild(rotator); // Gebe Teilbaum zurück return objRoot; } Florian Valentin – Szenengraphen und Java3D

More Related