Java 3D Linien, Flächen und Objekte Axel Bartsch, Okt. 2002 Virtual World Koordinaten System Grundlagen zur Definition visueller Objekte Shape3D – Unterklasse der Leaf-Klasse Eigenschaften des visuellen Objektes sind in NodeComponent Objekten gespeichert Optional ist ein Appearance Objekt zugeordnet Klassenhierarchie javax javax.media.j3d javax.vecmath SceneGraphObject Tuple* NodeComponent Point* Appearence Node Leaf Shape3D Vector* Color* Geometry GeometryArray Color Cube - Klasse Konstrukturen n n ColorCube() ColorCube(double scale) Beispiel 1. public BranchGroup createSceneGraph() { 2. // Create the root of the branch graph 3. BranchGroup objRoot = new BranchGroup(); 4. 5. // Create a simple shape leaf node, add it to the scene graph. 6. // ColorCube is a Convenience Utility class 7. objRoot.addChild(new ColorCube(0.4)); 8. 9. return objRoot; 10. } // end of createSceneGraph method Geometric Utility Klassen - Box Kreiert einen Kasten Kantenlänge jeweils 2 Meter Zentrum im Ursprung Box Konstruktoren n n Box() – Default Box Box(float xdim, float ydim, float zdim, Appearance appearance) Geometric Utility Klassen - Cone Kreiert einen Kegel Radius: 1.0 – Höhe: 2.0 Zentrum der verdrängten Raums ist im Ursprung Cone Konstruktoren n n Cone() – Default Cone Cone(float radius, Appearance appearance) Geometric Utility Klassen - Cylinder Kreiert einen Zylinder Radius: 1.0 – Höhe: 2.0 Zentrum der zentralen Achsen ist im Ursprung Cylinder Konstruktoren n n n Cylinder() – Default Cylinder Cylinder(float radius, float height) Cylinder(float radius, float height, Appearance appearance) Geometric Utility Klassen - Sphere Kreiert einen Kugel Radius: 1.0 Zentrum ist im Ursprung Sphere Konstruktoren n n n Sphere() – Default Sphere Sphere(float radius) Sphere(float radius, Appearance appearance) Weiteres zu Geometrischen Primitiven Keine zugewiesene Farbe sondern… n Referenz zu Appearance node Komponente Ohne Appearance node – Farbe Weiss Anzahl Polygone auch änderbar, jedoch meistens nicht notwendig Mathematische Klassen Punkte – Point* Farben – Color* Vektoren (Normalen) – Vector* Textur Koordinaten – TextCoord* Geometrische (Sub) Klassen Drei Kategorien von Geometrie Subklassen n n n Nicht-Indizierte Punkt-Basierte Geometrie Indizierte Punkt-Basierte Geometrie Andere Visuelle Objekte (Text3D…) GeometryArray Klasse Nicht indizierte Punkt-Basierte Geometrie Festlegung von Punkten, Linien und Polygonen Zusätzliche Arrays für Farben, Oberflächen Normalen oder Textur Koordinaten Entwicklungsweg …. Drei Schritte ….. Schritt 1 - Konstruktion GeometryArray(int vertexCount, int vertexFormat) VertexFormat n COORDINATES: Spezifiziert die Koordinaten. Muss gesetzt sein. n NORMALS: Spezifiziert die Normalen n COLOR_3: Spezifiziert die Farben (ohne Transparenz) n COLOR_4: Spezifiziert die Farben (mit Transparenz) n TEXTURE_COORDINATE_2: Spezifiziert die 2D Textur Koordinaten n TEXTURE_COORDINATE_3: Spezifiziert die 3D Textur Koordinaten Schritt 2 – „Füllen mit Daten“ void setCoordinate(int index, float[] coordinate) void setColor(int index, float[] color) void setNormal(int index, float[] normal) void setTextureCoordinate(int index, float[] texCoord) Schritt 3 - Instanzieren Instanzieren des GeometryArray Objektes durch ein neues Shape3D Objekt. Beispiele GeometryArray PointArray LineArray TriangleArray QuadArray PointArray(int vertexCount, int vertexFormat) LineArray(int vertexCount, int vertexFormat) TriangleArray(int vertexCount, int vertexFormat) QuadArray(int vertexCount, int vertexFormat) GeometryStripArray Klasse Wiederbenutzung von Punkten (vertices) à Bessere rendering Performance LineStripArray TriangleStripArray TriangleFanArray IndexedGeometryArray Appearence und Attribute PointAttributes LineAttributes PolygonAttributes ColoringAttributes TransparencyAttributes RenderingAttributes Material TextureAttributes Texture TexCoordGeneration Appearance default Werte Appearance object Default value color white (1, 1, 1) texture environment mode TEXENV_REPLACE texture environment color white (1, 1, 1) depth test enable true shade model SHADE_GOURAUD polygon mode POLYGON_FILL transparency enable false transparency mode FASTEST cull face CULL_BACK point size 1.0 line width 1.0 point antialiasing enable false line antialiasing enable false Eigene Visual Object Klassen 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. 11. voGeometry = createGeometry(); 12. voAppearance = createAppearance(); 13. this.setGeometry(voGeometry); 14. this.setAppearance(voAppearance); 15. } 16. Getting Started with the Java 3D API Chapter 2. Creating Geometry 17. private Geometry createGeometry() { 18. // code to create default geometry of visual object 19. } 20. 21. private Appearance createAppearance () { 22. // code to create default appearance of visual object 23. } 24. 25. } // end of class VisualObject