Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Geometrie Programmierung beginnend bei 0 ist

Ähnliche Präsentationen


Präsentation zum Thema: "Geometrie Programmierung beginnend bei 0 ist"—  Präsentation transkript:

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

2 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

3 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

4 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) ??

5 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

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

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

8 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)

9 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

10 = (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

11 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

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

13 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

14 Aktivierungsbereich Scene Graph: Konstruktor: BoundingLeaf(Bounds region)

15 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

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


Herunterladen ppt "Geometrie Programmierung beginnend bei 0 ist"

Ähnliche Präsentationen


Google-Anzeigen