Geometrie Programmierung beginnend bei 0 ist

Slides:



Advertisements
Ähnliche Präsentationen
Blue J.
Advertisements

Eine Seminararbeit von Gerd Mühlinghaus
Objektorientierte Programmierung
Java3D Einfacher scene graph View branch graph BG Shape3D Knoten S
Application Programming Interface Graphische Datenverarbeitung
Linien, Flächen & geometrische Figuren von Mario Linge
Stefan Dubois WS 02/03 Texturen in Java 3D. Übersicht Was sind Texturen? Klassenhierarchie fünf-Schritt-Plan Optionen für Texturen (Auswahl) TextureAttributes.
Java Beans von Raoul Schneider.
Ausnahmen HS Merseburg (FH) WS 06/07.
FH-Hof Texturen Richard Göbel. FH-Hof Anwendungen von Texturen Darstellung von 2D-Bildern Gestaltung von Oberflächen Simulation komplexer Geometrien...
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.
Java: Dynamische Datentypen
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...
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Processing: Arrays & Laden von Dateien Aufbauend auf dem Beispiel: File I/O LoadFile1.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung X1 Sitzung X1: Packages & Wiederholung.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Java 3D Carina Fleck Licht und Material.
Java3d „Licht und Material“
Einführung in die Programmierung mit Java
Diskrete Mathematik I Vorlesung Arrays-
Java-Kurs Grafik Julian Drerup.
Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen
EXCAVE ein 3D-Modell eines archäologischen Grabungsquadranten
Packages Vortrag : Cornelia Hardt 23. November 1999.
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
1DVG3 - anonyme Klassen Anonyme Klassen. DVG3 - anonyme Klassen 2 Syntax new BasisKlasse(Parameterliste) { Modifikationen und Erweiterungen der Basisklasse.
DVG Klassen und Objekte
© Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Benutzer Interaktion (interaction): die virtuelle Welt reagiert auf Benutzer Eingaben.
Einführung in die Programmierung Datensammlung
FH-Hof Konfiguration eines Universums Richard Göbel.
FH-Hof Licht Richard Göbel. FH-Hof Licht in Java3D - Basisideen Bereitstellung unterschiedlicher Lichtquellen Definition der Wirkung einer Beleuchtung.
Java programmieren mit JavaKara
FHP - Fachbereich Bauingenieurwesen
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
CuP - Java Elfte Vorlesung Montag, 11. November 2002.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Verhalten von Objekten in der Szene
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
Medizinische Visualisierung
Die Klasse String und ihre Methoden
EPROG Tutorium #4 Philipp Effenberger
EPROG Tutorium #5 Philipp Effenberger
Wilfried Imrich CuP - Java Erste Vorlesung Entspricht ungefähr Kapitel 1.1 des Skriptums Wilfried Imrich Montanuniversität Leoben Freitag, 4. Oktober 2002.
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
Java-Kurs - 7. Übung Besprechung der Hausaufgabe Referenzvariablen
Java-Kurs Übung Benutzeroberflächen und Graphik
Java-Kurs Übung Benutzeroberflächen und Graphik Frames (Fenster)
Diskrete Mathematik I Vorlesung 2 Arrays.
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Java-Kurs Übung Besprechung der Hausaufgabe
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Einführung in die Programmierung mit Java
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 5. Vorlesung WS 2002/2003.
Institut für Kartographie und Geoinformation Prof. Dr. L. Plümer, Dipl.-Ing. D. Dörschlag, Dr. G. Gröger Einführung in die Programmierung mit Java 13.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 9. Vorlesung WS 2001/2002.
Objektorientierte Programmierung (OOP)
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Java-Kurs Übung Grafik in Java - das Abstract Windowing Toolkit
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Implementieren von Klassen
 Präsentation transkript:

Geometrie Programmierung beginnend bei 0 ist sehr aufwendig Möglichkeit Geometrien von 3D Software (CAD Programme) einzulesen Neue Loader werden gesammelt bei www.Java3D.org

Laden von 3D Dateien in unterschiedlichen Formaten 0. loader suchen (Web) 1. importieren der loader Klasse 2. importieren weiterer notwendiger Klassen 3. deklarieren einer scene Variablen (nicht den Konstruktor benutzen) 4. erzeugen eines loader Objekts 5. laden des Files und zuweisen zu der scene Variablen 6. einsetzten von scene in den scene graph weiteres zu Loader erst mal ausgelassen

Die Klasse GeometryInfo Kein Loader ? - 3D Daten müssen eigentlich als Dreiecke oder Quadrilaterals eingegeben werden Möglichkeit kompliziertere Polygone einzugeben (nicht planar, konkav, Löcher) Dient als Grundlage für Utility Klassen Enthalten sind Informationen über: Vertizes Farben Normale StripCounts ContourCounts Textur Koordinaten

Die Klasse GeometryInfo Paket: com.sun.j3d.utils.geometry Konstruktor: GeometryInfo(int primitive) (nicht planar etc.) primitive = POLYGON_ARRAY QUAD_ARRAY (Dreiecke unabhängig) TRIANGLE_ARRAY TRIANGLE_FAN_ARRAY TRIANGLE_STRIP_ARRAY Methoden: Indexverwaltung void setColors(Color3f[] colors) void setColorIndices(int[] colorIndices) ?? void setContourCounts(int[] contourCounts)??? void setCoordinates(Point3d[] coordinates) void setCoordinateIndices(int[] coordinateIndices) void setNormals(Vector3f[] normals) void setNormalIndices(int[] normalIndices) ?? void setStripCounts(int[] stripCounts) void setTextureCoordinates(Point2f[] texCoords) void setTextureCoordinateIndices(int[] texCoordIndices) ??

Polygone dürfen nicht planar, konkav und löchrig sein. Triangulator wandelt komplex Polygone in isolierte Dreiecke um Performanzverbesserung: Stripifier Objekt wandelt Dreiecke zu Dreiecksstreifen Schattierung: es werden Flächennormale gebraucht: NormalGenerator

(Umwandlung mit Polygon Zerlegungstechniken) Der „Triangulator“ Konstruktor: Triangulator() Methode: void triangulate(GeometryInfo ginfo) (Umwandlung mit Polygon Zerlegungstechniken)

(Normalenberechnung sollte vorher stattfinden) Der Streifenmacher Konstruktor: Stripifier() Methode: void stripify(GeometryInfo ginfo) (Normalenberechnung sollte vorher stattfinden)

Der Normalen Berechner Konstruktor: NormalGenerator(double radians) Methode: void generateNormals(GeometryInfo gi) In Index Arrays kommt Vertex mehrfach vor: Winkel zwischen zwei Dreiecksnormalen > Knick Winkel Vertex gehört gleichzeitig zu verschiedenen Flächen -> zwei Normale gehören zum Vertex, Vertex liegt auf Kante sonst wird der Knick „flachgeklopft“ d.h. nur eine Normale (Mittelwert)

Anwenden der Utility Klassen Triangulator 1. GeometryInfo gi = new GeometryInfo( GeometryInfo.POLYGON_ARRAY); 2. gi.setCoordinates(coordinateData); 3. gi.setStripCounts(stripCounts); 4. 5. Triangulator tr = new Triangulator(); 6. tr.triangulate(gi); 7. 8. NormalGenerator ng = new NormalGenerator(); 9. ng.generateNormals(gi); 10. 11. Stripifier st = new Stripifier(); 12. st.stripify(gi); 13. 14. Shape3D part = new Shape3D(); 15. part.setAppearance(appearance); 16. part.setGeometry(gi.getGeometryArray()); NormalGenerator Stripifier GeometryInfo

= (transparentes) Polygon + Textur Text2d = (transparentes) Polygon + Textur Unterklasse von Shape3D Pakete: java.awt.font com.sun.j3d.utils.geometry.Text2d Text2D text2D = new Text2D("2D text is a textured polygon", new Color3f(0.9f, 1.0f, 1.0f), "Helvetica", 18, Font.ITALIC)); Manipulationen am Polygon Appearance app = text2DObject.getAppearance(); app.setPolygonAttributes(polyAttrib); Text - Textur anwendbar auf beliebige visual objects

Text3D Text3d = „Ausziehen“ des Fonts Unterklasse von Geometry Font3D Objekt wird benötigt Font3D font3d = new Font3D(new Font("Helvetica", Font.PLAIN, 10), new FontExtrusion()); Text3D textGeom = new Text3D(font3d, new String("3DText"), new Point3f(­2.0f, 0.0f, 0.0f)); Position

- Geometrie wird auf eine Einheitskugel abgebildet und Hintergrund Geometrie Bild setGeometry(BranchGroup bg) Farbe setImage(ImageComponent2D img) setColor(Color3f clr) Background backg = new Background(); //black background backg.setGeometry(createBackGraph()); // add BranchGroup of background backg.setApplicationBounds(new BoundingSphere( new Point3d(), 100.0)); objRoot.addChild(backg); - Geometrie wird auf eine Einheitskugel abgebildet und beim Zeichnen auf unendlich gesetzt - Mehrere Backgrounds möglich

Aktivierungsbereich Beispiel: eine feste Lichtquelle beleuchtet sich bewegende Objekte Wie weit ist der Aktivierungsbereich (Bounds Objekt) des Lichts auszudehnen ? 1. Möglichkeit: alle möglichen Orte der Objekte einschließen - zu groß 2. Möglichkeit: Aktivierungsbereich des Lichts an die beweglichen Objekte anschließen, unabhängig von (dem Ort der) Lichtquelle. Was spricht gegen ein Bounds Objekt für diesen Zweck ? Ein Bounds Objekt würde sich nur mit der Lichtquelle bewegen -> neue Klasse: BoundingLeaf

Aktivierungsbereich Scene Graph: Konstruktor: BoundingLeaf(Bounds region)

BoundingLeaf an eine ViewingPlatform angehängt -> trifft immer zu (z.B. für Amaturenbrett im Flugsimulator) void createSceneGraph (SimpleUniverse su) { BoundingLeaf boundingLeaf = new BoundingLeaf(); PlatformGeometry platformGeom = new PlatformGeometry(); platformGeom.addChild(boundingLeaf); platformGeom.compile(); simpleUniv.getViewingPlatform().setPlatformGeometry (platformGeom); BranchGroup contentRoot = new BranchGroup(); Background backg = new Background(1.0f, 1.0f, 1.0f); backg.setApplicationBoundingLeaf(boundingLeaf); contentRoot.addChild(backg); bewirkt immer gleichen Hintergrund

Jedes von SceneGraphObject abgeleitete Objekt, kann Benutzer Daten mit folgenden Methoden speichern: void setUserData(Object userData) Object getUserData() Anwendungen ?