java 3d - hs-fulda.de · // create a simple shape leaf node, add it to the scene graph. 6. //...

22
Java 3D Java 3D Linien, Flächen und Objekte Linien, Flächen und Objekte Axel Bartsch, Okt. 2002 Axel Bartsch, Okt. 2002

Upload: doanduong

Post on 04-Jun-2018

238 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java 3D - hs-fulda.de · // 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

Java 3DJava 3DLinien, Flächen und ObjekteLinien, Flächen und Objekte

Axel Bartsch, Okt. 2002Axel Bartsch, Okt. 2002

Page 2: Java 3D - hs-fulda.de · // 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

VirtualVirtual World Koordinaten SystemWorld Koordinaten System

Page 3: Java 3D - hs-fulda.de · // 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

Grundlagen zur Definition visueller ObjekteGrundlagen zur Definition visueller Objekte

Shape3D Shape3D –– Unterklasse der Unterklasse der LeafLeaf--KlasseKlasseEigenschaften des visuellen Objektes sind Eigenschaften des visuellen Objektes sind in in NodeComponentNodeComponent Objekten gespeichertObjekten gespeichertOptional ist ein Optional ist ein AppearanceAppearance Objekt Objekt zugeordnet zugeordnet

Page 4: Java 3D - hs-fulda.de · // 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

KlassenhierarchieKlassenhierarchiejavax

javax.vecmathjavax.media.j3d

Node

SceneGraphObject

Leaf

Shape3D

NodeComponent

Geometry

GeometryArray

Tuple*

Appearence

Point*

Vector*

Color*

Page 5: Java 3D - hs-fulda.de · // 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

Color Color CubeCube -- KlasseKlasse

KonstrukturenKonstrukturennn ColorCubeColorCube()()nn ColorCube(doubleColorCube(double scalescale))

BeispielBeispiel1. public BranchGroup createSceneGraph() {2. // Create the root of the branch graph3. BranchGroup objRoot = new BranchGroup();4.5. // Create a simple shape leaf node, add it to the scene graph.6. // ColorCube is a Convenience Utility class7. objRoot.addChild(new ColorCube(0.4));8.9. return objRoot;10. } // end of createSceneGraph method

Page 6: Java 3D - hs-fulda.de · // 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

GeometricGeometric Utility Klassen Utility Klassen -- BoxBox

Kreiert einen KastenKreiert einen KastenKantenlänge jeweils 2 MeterKantenlänge jeweils 2 MeterZentrum im UrsprungZentrum im UrsprungBox Box KonstruktorenKonstruktorennn Box()Box() –– Default BoxDefault Boxnn Box(floatBox(float xdimxdim, float , float ydimydim, float , float zdimzdim, Appearance , Appearance appearanceappearance))

Page 7: Java 3D - hs-fulda.de · // 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

GeometricGeometric Utility Klassen Utility Klassen -- ConeCone

Kreiert einen KegelKreiert einen KegelRadius: 1.0 Radius: 1.0 –– Höhe: 2.0Höhe: 2.0Zentrum der verdrängten RaumsZentrum der verdrängten Raumsist im Ursprungist im UrsprungConeCone KonstruktorenKonstruktorennn ConeCone()() –– Default Default ConeConenn Cone(floatCone(float radius, radius,

Appearance Appearance appearanceappearance))

Page 8: Java 3D - hs-fulda.de · // 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

GeometricGeometric Utility Klassen Utility Klassen -- CylinderCylinder

Kreiert einen ZylinderKreiert einen ZylinderRadius: 1.0 Radius: 1.0 –– Höhe: 2.0Höhe: 2.0Zentrum der zentralen AchsenZentrum der zentralen Achsenist im Ursprungist im UrsprungCylinderCylinder KonstruktorenKonstruktorennn CylinderCylinder()() –– Default Default CylinderCylindernn Cylinder(floatCylinder(float radius, float height)radius, float height)nn Cylinder(floatCylinder(float radius, float height,radius, float height,

Appearance Appearance appearanceappearance))

Page 9: Java 3D - hs-fulda.de · // 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

GeometricGeometric Utility Klassen Utility Klassen -- SphereSphere

Kreiert einen KugelKreiert einen KugelRadius: 1.0 Radius: 1.0 Zentrum ist im UrsprungZentrum ist im UrsprungSphereSphere KonstruktorenKonstruktorennn SphereSphere()() –– Default Default SphereSpherenn SphereSphere(float radius)(float radius)nn SphereSphere(float radius,(float radius,

Appearance appearance)Appearance appearance)

Page 10: Java 3D - hs-fulda.de · // 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

Weiteres zu Geometrischen PrimitivenWeiteres zu Geometrischen Primitiven

Keine zugewiesene Farbe sondern…Keine zugewiesene Farbe sondern…nn Referenz zu Referenz zu AppearanceAppearance nodenode KomponenteKomponente

Ohne Ohne AppearanceAppearance nodenode –– Farbe Farbe WeissWeissAnzahl Polygone auch änderbar, jedoch Anzahl Polygone auch änderbar, jedoch meistens nicht notwendigmeistens nicht notwendig

Page 11: Java 3D - hs-fulda.de · // 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

Mathematische KlassenMathematische Klassen

Punkte Punkte –– Point*Point*Farben Farben –– Color*Color*Vektoren (Normalen) Vektoren (Normalen) –– Vector*Vector*Textur Koordinaten Textur Koordinaten –– TextCoordTextCoord**

Page 12: Java 3D - hs-fulda.de · // 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

Geometrische (Geometrische (SubSub) Klassen) Klassen

Drei Kategorien von Geometrie SubklassenDrei Kategorien von Geometrie Subklassen

nn NichtNicht--Indizierte PunktIndizierte Punkt--Basierte GeometrieBasierte Geometrienn Indizierte PunktIndizierte Punkt--Basierte GeometrieBasierte Geometrienn Andere Visuelle Objekte (Text3D…)Andere Visuelle Objekte (Text3D…)

Page 13: Java 3D - hs-fulda.de · // 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

GeometryArrayGeometryArray KlasseKlasse

Nicht indizierte PunktNicht indizierte Punkt--Basierte GeometrieBasierte GeometrieFestlegung von Punkten, Linien und Festlegung von Punkten, Linien und PolygonenPolygonenZusätzliche Arrays für Farben, Zusätzliche Arrays für Farben, Oberflächen Normalen oder Textur Oberflächen Normalen oder Textur KoordinatenKoordinaten

Entwicklungsweg …. Drei Schritte …..Entwicklungsweg …. Drei Schritte …..

Page 14: Java 3D - hs-fulda.de · // 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

Schritt 1 Schritt 1 -- KonstruktionKonstruktionGeometryArray(intGeometryArray(int vertexCountvertexCount, , intint vertexFormatvertexFormat))

VertexFormatVertexFormatnn COORDINATES:COORDINATES:

SpezifiziertSpezifiziert die die KoordinatenKoordinaten. Muss . Muss gesetztgesetzt seinsein. . nn NORMALS:NORMALS:

SpezifiziertSpezifiziert die die NormalenNormalennn COLOR_3:COLOR_3:

SpezifiziertSpezifiziert die die FarbenFarben ((ohneohne TransparenzTransparenz) ) nn COLOR_4:COLOR_4:

SpezifiziertSpezifiziert die die FarbenFarben ((mitmit TransparenzTransparenz) ) nn TEXTURE_COORDINATE_2:TEXTURE_COORDINATE_2:

SpezifiziertSpezifiziert die 2D die 2D TexturTextur KoordinatenKoordinatennn TEXTURE_COORDINATE_3: TEXTURE_COORDINATE_3:

SpezifiziertSpezifiziert die 3D die 3D TexturTextur KoordinatenKoordinaten

Page 15: Java 3D - hs-fulda.de · // 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

Schritt 2 Schritt 2 –– „Füllen mit Daten“„Füllen mit Daten“

void void setCoordinate(intsetCoordinate(int index, index, float[] coordinate)float[] coordinate)

void void setColor(intsetColor(int index, index, float[] float[] colorcolor))

void void setNormal(intsetNormal(int index, index, float[] normal)float[] normal)

void void setTextureCoordinate(intsetTextureCoordinate(intindex, float[] index, float[] texCoordtexCoord))

Page 16: Java 3D - hs-fulda.de · // 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

Schritt 3 Schritt 3 -- InstanzierenInstanzieren

InstanzierenInstanzieren des des GeometryArrayGeometryArray Objektes Objektes durch ein neues Shape3D Objekt.durch ein neues Shape3D Objekt.

Page 17: Java 3D - hs-fulda.de · // 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

Beispiele Beispiele GeometryArrayGeometryArray

PointArrayPointArray LineArrayLineArray TriangleArrayTriangleArray QuadArrayQuadArray

PointArray(intPointArray(int vertexCountvertexCount, , intint vertexFormatvertexFormat))LineArray(intLineArray(int vertexCountvertexCount, , intint vertexFormatvertexFormat))TriangleArray(intTriangleArray(int vertexCountvertexCount, , intint vertexFormatvertexFormat))QuadArray(intQuadArray(int vertexCountvertexCount, , intint vertexFormatvertexFormat))

Page 18: Java 3D - hs-fulda.de · // 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

GeometryStripArrayGeometryStripArray KlasseKlasse

Wiederbenutzung von Punkten (Wiederbenutzung von Punkten (verticesvertices))àà Bessere Bessere renderingrendering PerformancePerformance

LineStripArrayLineStripArray TriangleStripArrayTriangleStripArray TriangleFanArrayTriangleFanArray

Page 19: Java 3D - hs-fulda.de · // 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

IndexedGeometryArrayIndexedGeometryArray

Page 20: Java 3D - hs-fulda.de · // 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

AppearenceAppearence und Attributeund Attribute

PointAttributesPointAttributesLineAttributesLineAttributesPolygonAttributesPolygonAttributesColoringAttributesColoringAttributesTransparencyAttributesTransparencyAttributesRenderingAttributesRenderingAttributesMaterialMaterialTextureAttributesTextureAttributesTextureTextureTexCoordGenerationTexCoordGeneration

Page 21: Java 3D - hs-fulda.de · // 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

AppearanceAppearance defaultdefault WerteWerte

falseline antialiasing enable

falsepoint antialiasing enable

1.0line width

1.0point size

CULL_BACKcull face

FASTESTtransparency mode

falsetransparency enable

POLYGON_FILLpolygon mode

SHADE_GOURAUDshade model

truedepth test enable

white (1, 1, 1)texture environment color

TEXENV_REPLACEtexture environment mode

white (1, 1, 1)color

Default valueAppearance object

Page 22: Java 3D - hs-fulda.de · // 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

Eigene Visual Eigene Visual ObjectObject KlassenKlassen1. public class VisualObject extends Shape3D{2.3. private Geometry voGeometry;4. private Appearance voAppearance;5.6. // create Shape3D with geometry and appearance7. // the geometry is created in method createGeometry8. // the appearance is created in method createAppearance9. 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 Geometry17. private Geometry createGeometry() {18. // code to create default geometry of visual object19. }20.21. private Appearance createAppearance () {22. // code to create default appearance of visual object23. }24.25. } // end of class VisualObject