Einführung inEinführung inJava3DJava3D
Dipl.Dipl.--InformInform. Paul Grimm. Paul GrimmProfessur Graphische DatenverarbeitungProfessur Graphische Datenverarbeitung
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 2/93
Ziele des SeminarsZiele des Seminars
nn Wie kann ich Java3D benutzen?Wie kann ich Java3D benutzen?
nn Wo kann ich Informationen finden?Wo kann ich Informationen finden?
nn Wo finde ich Beispiele?Wo finde ich Beispiele?
nn Welche Konzepte setzt Java3D um?Welche Konzepte setzt Java3D um?
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 3/93
ÜberblickÜberblick
nn Einführung in Java 3DEinführung in Java 3Dnn BenutzungBenutzungnn DokumentationDokumentationnn AufbauAufbau
–– SzenengraphSzenengraph–– AnimationenAnimationen–– InteraktionInteraktion
nn AusblickAusblick
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 4/93
Einführung Einführung -- Was ist Java3D?Was ist Java3D?
nn Java Java PackagePackage für interaktive 3D Graphikfür interaktive 3D Graphik
nn HighHigh--levellevel 3D Graphik API3D Graphik API
nn Programmieren von interaktiven Programmieren von interaktiven
Anwendungen mit 3D InhaltenAnwendungen mit 3D Inhalten
nn Nahtlose Integration in JavaNahtlose Integration in Java
nn Kein Browser nötig und AppletKein Browser nötig und Applet--fähigfähig
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 5/93
Was macht Java3D?Was macht Java3D?
nn Übernahme der Bilderzeugung:Übernahme der Bilderzeugung:–– SzenenmanagementSzenenmanagement–– VerdeckungsrechnungVerdeckungsrechnung
nn Übernahme der BenutzerinteraktionÜbernahme der Benutzerinteraktion
nn PlattformunabhängigesPlattformunabhängiges APIAPI
nn Implementierung für verschiedene Implementierung für verschiedene LowLow--Level Level APIsAPIs (Open GL, Direct3D) (Open GL, Direct3D)
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 6/93
Was macht Java3D?Was macht Java3D?
nn Durchführung von OptimierungenDurchführung von Optimierungen
–– Paralleles Paralleles RendernRendern
–– Nutzung von HardwarebeschleunigungNutzung von Hardwarebeschleunigung
–– Reorganisation des SzenengraphenReorganisation des Szenengraphen
(=> Zusatzinformationen können (=> Zusatzinformationen können
angegeben werden, die bei der angegeben werden, die bei der
Optimierung ausgewertet werden)Optimierung ausgewertet werden)
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 7/93
Was macht Java3D?Was macht Java3D?
nn Bereitstellung einer KlassenbibliothekBereitstellung einer Klassenbibliothek–– Beschreibung des Beschreibung des attributiertenattributierten
SzenengraphenSzenengraphen–– AnimationAnimation–– Virtuelle KameraVirtuelle Kamera–– BenutzerinteraktionBenutzerinteraktion–– ......
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 8/93
AnwendungsbeispieleAnwendungsbeispiele
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 9/93
AnwendungsbeispieleAnwendungsbeispiele
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 10/93
AnwendungsbeispieleAnwendungsbeispiele
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 11/93
AnwendungsbeispieleAnwendungsbeispiele
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 12/93
Starten einerStarten einer Java3D Anwendung?Java3D Anwendung?
nn StandaloneStandalone–– Starten wie jede andere Java ApplikationStarten wie jede andere Java Applikation
nn AppletApplet–– Java Java PluginPlugin wird benötigt, dies installiert wird benötigt, dies installiert
ggf. auch Java3Dggf. auch Java3D–– Applet in eine WWWApplet in eine WWW--Seite einbindenSeite einbinden
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 13/93
Nutzung Nutzung von Javavon Java
nn Nutzung des JavaNutzung des Java--InterpretersInterpretersjava myprogramjava myprogram
nn Nutzung des JavaNutzung des Java--AppletviewersAppletviewersappletviewer myprogappletviewer myprog.html.html
nn Nutzung des JavaNutzung des Java--Compilers:Compilers:javac myprogramjavac myprogram..javajava
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 14/93
BeispielanwendungenBeispielanwendungen
nn Mitgelieferte Mitgelieferte Demo Demo sind im Verzeichnissind im Verzeichnis
… … // jdk1.2/jdk1.2/demosdemos/java3d/java3d
nn BeispieleBeispiele: : AppearanceTestAppearanceTestFourByFourFourByFour
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 15/93
Java3D in Web und Java3D in Web und LiteraturLiteratur
nn SUNs SUNs Java3D Java3D Homepage Homepage http://http://javajava..sunsun..comcom//productsproducts//javajava--media/3Dmedia/3D
–– DownloadDownload
–– Java3D TutorialJava3D Tutorial
–– Java3D API Java3D API SpezifikationSpezifikation
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 16/93
Java3D in Web und Java3D in Web und LiteraturLiteratur
nn J3D.orgJ3D.orghttp://http://wwwwww.j3d..j3d.org org
–– FAQsFAQs
–– Loader fLoader für ür unterschiedliche 3Dunterschiedliche 3D--FormateFormate
–– TutorialTutorial
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 17/93
Java3D VRML Java3D VRML ViewerViewer
nn VRML Library VRML Library forfor Java3DJava3D
http://http://wwwwww.j3d..j3d.orgorg//utilitiesutilities//loadersloaders//vrmlvrml/web3d./web3d.htmlhtml
–– VRML VRML ViewerViewer–– VRML VRML LoaderLoader
nn Entstanden durch X3D Entstanden durch X3D WorkinggroupWorkinggroup
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 18/93
Java Java ResourcenResourcen
nn Offizielle Offizielle Java HomepageJava Homepagehttp://java.sun.comhttp://java.sun.com
nn Downloads Downloads unter unter http://java.sun.com/products/http://java.sun.com/products/
nn Java TutorialJava Tutorialhttp://http://developerdeveloper..javajava..sunsun..comcom//developerdeveloper//infodocsinfodocs//
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 19/93
Fragen und AnmerkungenFragen und Anmerkungen
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 20/93
GrundlagenGrundlagen
nn GraphiksystemeGraphiksysteme
nn KoordinatensystemKoordinatensystem
nn SzenengraphSzenengraph
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 22/93
VersionenVersionen
nn 1998:1998: Java3D Version 1.0 Java3D Version 1.0
nn 1999:1999: Java3D Version 1.1.3Java3D Version 1.1.3
nn 2000:2000: Java3D Version 1.2Java3D Version 1.2
nn 2001:2001: Java3D Version 1.2.1Java3D Version 1.2.1
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 23/93
Das KoordinatensystemDas Koordinatensystem
nn Java3D benutzt ein rechthändiges Java3D benutzt ein rechthändiges KoordinatensystemKoordinatensystem
nn 3D 3D -- KoordinatenKoordinaten, z.B. , z.B. (2.0, 1.5, 7.21)(2.0, 1.5, 7.21)
x
y
z
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 24/93
Globale und lokale Globale und lokale KoordinatensystemeKoordinatensysteme
nn HierarchieHierarchie vonvon KoordinatensystemenKoordinatensystemen–– BspBsp. Gabel. Gabel eines Gabelstaplerseines Gabelstaplers
»» Koordinaten derKoordinaten der GabelGabel bzglbzgl. Stapler. Stapler»» KoordinatenKoordinaten des Staplersdes Staplers bzglbzgl.. derder WeltWelt
nn Spitze der HierarchieSpitze der Hierarchie:: WeltkoordinatenWeltkoordinaten
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 25/93
Der SzenengraphDer Szenengraph
nn StrukturStruktur der Szenenhierarchieder Szenenhierarchienn KantenKanten:: AbhängigkeitsrelationAbhängigkeitsrelationnn KnotenKnoten (( englengl. . Nodes Nodes ):):
–– GeometrienGeometrien–– TransformationenTransformationen–– MaterialeigenschaftenMaterialeigenschaften–– ......
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 26/93
Szenengraphen in Java3D (1)Szenengraphen in Java3D (1)
nn Java3D wertet Szenengraph Java3D wertet Szenengraph Beschreibung in separaten, Beschreibung in separaten, asynchronen asynchronen ThreadsThreads ausaus–– RenderingRendering von Graphikvon Graphik–– „„RenderingRendering“ von Sound“ von Sound–– AnimationAnimation–– Management der EingabegeräteManagement der Eingabegeräte–– EventEvent Erzeugung (z.B. bei Kollisionen)Erzeugung (z.B. bei Kollisionen)
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 27/93
RoadmapRoadmap
nn Aufbau einer einfachen Java3DAufbau einer einfachen Java3D--Anwendung mit einzelnen ObjektenAnwendung mit einzelnen Objekten
nn Gruppierung und TransformationGruppierung und Transformation
nn Aufbau einer komplexen Szene mit Aufbau einer komplexen Szene mit mehreren Objekten und mit mehreren Objekten und mit AnimationenAnimationen
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 28/93
Eine Applikation in KürzeEine Applikation in Kürze
nn Konstruktion einer virtuellen Welt, in der alle Konstruktion einer virtuellen Welt, in der alle 3D Daten enthalten sind3D Daten enthalten sind
nn Auswahl einer Kamera, um die 3D Daten zu Auswahl einer Kamera, um die 3D Daten zu betrachtenbetrachten
nn Einfügen der 3D Inhalte in die SzeneEinfügen der 3D Inhalte in die Szene–– Hierarchische Anordnung der Objekte in einem Hierarchische Anordnung der Objekte in einem
SzenengraphenSzenengraphen–– Beschreibung der InteraktionenBeschreibung der Interaktionen
nn Einbetten in eine Java Einbetten in eine Java -- AnwendungAnwendung
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 29/93
Aufbau eines SzenengraphenAufbau eines Szenengraphen
nn Erzeugen von KnotenErzeugen von KnotenShape3D myShape1 = Shape3D myShape1 = newnew Box();Box();Shape3D myShape2 = Shape3D myShape2 = newnew ConeCone();();
nn Gruppieren von KnotenGruppieren von KnotenBranchGroup myGroupBranchGroup myGroup = =
new BranchGroupnew BranchGroup( );( );myGroupmyGroup..addChildaddChild( ( myShapemyShape ););
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 30/93
Utility KlassenUtility Klassen
nn UtilitityUtilitity Klassen bauen auf Java3D aufKlassen bauen auf Java3D aufnn Vereinfachen oft auftretende Vereinfachen oft auftretende
Operationen:Operationen:–– Aufbau einer virtuellen WeltAufbau einer virtuellen Welt–– Setzen der KameraSetzen der Kamera
SimpleUniverse mySimpleSimpleUniverse mySimple = = new SimpleUniversenew SimpleUniverse( ( myCanvasmyCanvas ););
mySimplemySimple..addBranchGraphaddBranchGraph((myBranchmyBranch););
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 32/93
ViewingViewing--Modell in Java3DModell in Java3D
nn Die meisten Die meisten APIsAPIs transformieren die transformieren die SzeneSzene
nn Java3D transformiert das AugeJava3D transformiert das Augenn Der Inhalts Zweig der Szene wird nicht Der Inhalts Zweig der Szene wird nicht
verändert wenn sich der Betrachter verändert wenn sich der Betrachter bewegtbewegt
nn Saubere Trennung von physikalischer Saubere Trennung von physikalischer und virtueller Weltund virtueller Welt
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 33/93
Terminologie (1)Terminologie (1)nn Virtual universeVirtual universe
–– Menge von SzenengraphenMenge von Szenengraphen–– Ein Universum pro ApplikationEin Universum pro Applikation
nn LocaleLocale–– Position im Universum, an der Position im Universum, an der
Szenengraph eingefügt wirdSzenengraph eingefügt wird
nn BranchgraphBranchgraph–– Ein Szenengraph im Ein Szenengraph im LocaleLocale
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 34/93
Terminologie (2)Terminologie (2)
nn BranchgraphBranchgraph wird unterteilt inwird unterteilt in
–– Content branchContent branchz.B. Geometrien, z.B. Geometrien, Beleuchtung, ...Beleuchtung, ...
–– View branchView branchvirtuelle Kamera, virtuelle Kamera, i.d.R. eine Kamera i.d.R. eine Kamera pro Universum pro Universum
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 35/93
Eine Applikation in Kürze IIEine Applikation in Kürze II
nn Konstruiere ein Konstruiere ein VirtualVirtual UniverseUniverse, das alle 3D , das alle 3D Daten enthalten wirdDaten enthalten wird
nn Wähle ein Wähle ein ViewView, um zu beschreiben wie die , um zu beschreiben wie die 3D Daten betrachtet werden3D Daten betrachtet werden
nn Konstruiere einen Konstruiere einen Content BranchContent Branch um die um die 3D Inhalte der Szene zu beschreiben3D Inhalte der Szene zu beschreiben–– Plaziere diesen Zweig an ein Plaziere diesen Zweig an ein LocaleLocale–– Mehrere Zweige an verschiedenen Mehrere Zweige an verschiedenen LocalesLocales sind sind
möglichmöglich
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 36/93
Einbetten in eine Java Einbetten in eine Java Anwendung IAnwendung I
nn Folgende Schritte sind notwendig:Folgende Schritte sind notwendig:
1.1. Erzeugen eines Java AWT Erzeugen eines Java AWT FramesFrames
2.2. Setzen eine Java AWT LayoutsSetzen eine Java AWT Layouts
3.3. Erzeugen eines Canvas3DErzeugen eines Canvas3D
4.4. Einfügen des Canvas3DEinfügen des Canvas3D
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 37/93
Einbetten in eine Java Einbetten in eine Java AnwendungAnwendung
public static void mainpublic static void main( String[] ( String[] argsargs ) {) {Frame Frame frameframe = = newnew Frame( );Frame( );frameframe..setSizesetSize( 640, 480 );( 640, 480 );frameframe..setLayoutsetLayout( ( new BorderLayoutnew BorderLayout( ) );( ) );Canvas3D Canvas3D canvascanvas = = newnew Canvas3D( null );Canvas3D( null );frameframe..addadd( "Center", ( "Center", canvascanvas ););SimpleUniverse univSimpleUniverse univ = =
new SimpleUniversenew SimpleUniverse( ( canvascanvas ););BranchGroup sceneBranchGroup scene = = createSceneGraphcreateSceneGraph();();scenescene..compilecompile( );( );univuniv..addBranchGraphaddBranchGraph( ( scenescene ););
frameframe..showshow( );( );}}
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 38/93
Benötigte Java Benötigte Java PackagesPackages
nn Java Java PackagesPackagesimport javaimport java..awtawt.*;.*;
nn Java3D Java3D PackagesPackagesimport javaximport javax.media.j3d.*;.media.j3d.*;import javaximport javax..vecmathvecmath.*;.*;
nn Java3D Utility Java3D Utility PackagesPackagesimport comimport com..sunsun.j3d..j3d.utilsutils..universeuniverse.*;.*;import comimport com..sunsun.j3d..j3d.utilsutils..geometrygeometry.*;.*;
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 39/93
RückblickRückblick
nn Darstellung von Graphik PrimitivenDarstellung von Graphik Primitiven–– Beispiel 1: Beispiel 1: BoxBox–– Beispiel 2: Beispiel 2: ConeCone
nn Einbettung in eine JavaEinbettung in eine Java--ApplikationApplikation
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 40/93
3D3D--ModelleModelle
nn Modelle sind Beschreibungen von ObjektenModelle sind Beschreibungen von Objektennn Ein Shape3D Ein Shape3D -- Knoten besteht ausKnoten besteht aus
–– GeometrieGeometrie
–– AppearanceAppearance (Erscheinen)(Erscheinen)Shape3D( Shape3D( Geometry geometryGeometry geometry, ,
Appearance appearanceAppearance appearance ))
nn Geometrie kann aus mehreren Teilen Geometrie kann aus mehreren Teilen bestehenbestehen
nn AppearanceAppearance enthält verschiedene Attribute, enthält verschiedene Attribute, die beschreiben wie die Geometrie gezeichnet die beschreiben wie die Geometrie gezeichnet wirdwird
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 41/93
Elemente einer GeometrieElemente einer Geometrie
nn KoordinatenKoordinaten: : Position der Knoten im RaumPosition der Knoten im Raum
nn NormalenNormalen: : Nach außen orientierte Normale pro KnotenNach außen orientierte Normale pro Knoten
nn FarbenFarben: : Farbe pro KnotenFarbe pro Knoten
nn TexturTextur--KoordinatenKoordinaten: : TexelTexel Position im KnotenPosition im Knoten
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 42/93
GeometryArrayGeometryArray
nn GeometryArrayGeometryArray erbt von erbt von GeometryGeometrynn Ein Ein GeometryArrayGeometryArray Objekt hat vier Objekt hat vier
BasistypenBasistypen–– PunktePunkte–– LinienLinien–– DreieckeDreiecke–– ViereckeVierecke
nn GeometryArrayGeometryArray bietet bietet setset und und getgetMethodenMethoden
nn Es gibt IndexEs gibt Index-- und “Strip”und “Strip”--VersionenVersionen
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 43/93
GeometryArrayGeometryArray
nn GeometryArrayGeometryArray ist eine Basisklasse, ist eine Basisklasse,
konkrete Ausführungenkonkrete Ausführungen
–– LineArrayLineArray, , PointArrayPointArray, , QuadArrayQuadArray, ,
TriangleArrayTriangleArray
nn GeometryStripArrayGeometryStripArray (mit Erben (mit Erben
TriangleStripArrayTriangleStripArray, etc.), etc.)
nn IndexedGeometryArrayIndexedGeometryArray (mit Erben (mit Erben
IndexedTriangleArrayIndexedTriangleArray, etc.), etc.)
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 44/93
Modelle sind facettiertModelle sind facettiert
nn Ideale Dreiecke und ViereckeIdeale Dreiecke und Vierecke
nn Einseitige PrimitiveEinseitige Primitivenn Reihenfolge der Eckpunkte bestimmt Reihenfolge der Eckpunkte bestimmt
die Flächennormaledie Flächennormalenn Gegen den Uhrzeigersinn => nach Gegen den Uhrzeigersinn => nach
außen gerichtetaußen gerichtet(Beachtung der rechten Hand)(Beachtung der rechten Hand)
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 45/93
Beispiel eines WürfelsBeispiel eines Würfels
class class mymyCube extendsCube extends QuadArrayQuadArray { { private float[]private float[] vertsverts = {= { ... ... }; }; private float[] private float[] normalsnormals = { ... };= { ... };private float[]private float[] colorscolors = {= { ... ... };};myCubemyCube() {() {
super(super( 2424,,QuadArrayQuadArray.COORDINATES |.COORDINATES |QuadArrayQuadArray.NORMALS |.NORMALS |QuadArrayQuadArray.COLOR_3);.COLOR_3);
setCoordinatessetCoordinates(0,(0, vertsverts););setsetNormalsNormals(0,(0, vertsverts););setColorssetColors(0,(0, colorscolors); );
}}
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 46/93
Beispiel eines Beispiel eines WüfelsWüfels
private float[]private float[] vertsverts = = {{
// front face// front face1.0f, 1.0f, --1.0f, 1.0f1.0f, 1.0f,,1.0f, 1.0f, 1.0f,1.0f, 1.0f, 1.0f,--1.0f, 1.0f, 1.0f,1.0f, 1.0f, 1.0f,--1.0f, 1.0f, --1.0f, 1.0f,1.0f, 1.0f,......
}}
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 47/93
Normalen eines WürfelsNormalen eines Würfels
private float[] private float[] normalsnormals = = {{
// Front Face// Front Face0.0f, 0.0f, 1.0f,0.0f, 0.0f, 1.0f,0.0f, 0.0f, 1.0f,0.0f, 0.0f, 1.0f,0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f,0.0f, 1.0f,......
}}
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 48/93
Beispiel eines WürfelsBeispiel eines Würfels
class class mymyCube extendsCube extends QuadArrayQuadArray { { private float[]private float[] vertsverts = {= { ... ... }; }; private float[] private float[] normalsnormals = { ... };= { ... };private float[]private float[] colorscolors = {= { ... ... };};myCubemyCube() {() {
super(super( 2424,,QuadArrayQuadArray.COORDINATES |.COORDINATES |QuadArrayQuadArray.NORMALS |.NORMALS |QuadArrayQuadArray.COLOR_3);.COLOR_3);
setCoordinatessetCoordinates(0,(0, vertsverts););setsetNormalsNormals(0,(0, vertsverts););setColorssetColors(0,(0, colorscolors); );
}}
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 49/93
AppearanceAppearance
nn Kontrolle über den Kontrolle über den RenderingRendering--ProzeßProzeß–– FarbeFarbe–– TransparenzTransparenz–– BeleuchtungsmodellBeleuchtungsmodell–– LinieneigenschaftenLinieneigenschaften–– Und viele andere!Und viele andere!
nn Alle Eigenschaften sind in der Alle Eigenschaften sind in der AppearanceAppearance--Klasse und ihren Klasse und ihren Komponenten enthaltenKomponenten enthalten
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 50/93
Beispiel für verschiedene Beispiel für verschiedene AppearanceAppearance
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 51/93
FarbattributeFarbattribute
nn Ein Ein ColoringAttributColoringAttribut node componentnode componentObjekt regeltObjekt regelt–– Farbe (wenn kein Beleuchtungsmodell Farbe (wenn kein Beleuchtungsmodell
verwendet wird)verwendet wird)–– BeleuchtungsmodellBeleuchtungsmodell
nn Farbattribute werden verwendet wenn kein Farbattribute werden verwendet wenn kein Beleuchtungsmodell verwendet wirdBeleuchtungsmodell verwendet wird–– Emittierende Punkte, Linien, Polygone, etc.Emittierende Punkte, Linien, Polygone, etc.
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 52/93
FarbattributeFarbattribute
nn Konstruktor Konstruktor der Klasse der Klasse
public public ColoringAttributesColoringAttributes((float red,float red, float green,float green,float blue,float blue, int shadeModelint shadeModel))
nn Über Über setsetColoringAttributesColoringAttributes und und ggetetColoringAttributesColoringAttributes der Klasse der Klasse AppearanceAppearance werden die Farbattribute werden die Farbattribute gesetzt.gesetzt.
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 53/93
MaterialeigenschaftenMaterialeigenschaften
nn Ein Ein MaterialMaterial node componentnode component Objekt Objekt regeltregelt–– Ambiente, emittierte, diffuse und Ambiente, emittierte, diffuse und spekulärespekuläre
FarbenFarben–– GlanzlichtGlanzlicht--FaktorFaktor
nn Materialeigenschaften werden verwendet, Materialeigenschaften werden verwendet, wenn das Modell beleuchtet istwenn das Modell beleuchtet ist–– Die meisten SzenenDie meisten Szenen--ModelleModelle–– Gilt vor den FarbattributenGilt vor den Farbattributen
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 54/93
MaterialMaterial
nn KonstruktorKonstruktor der Klasse der Klasse MaterialMaterial::
Material( Color3f Material( Color3f ambientColorambientColor, , Color3f Color3f emissiveColoremissiveColor,,Color3f Color3f diffuseColordiffuseColor,,Color3f Color3f specularColorspecularColor,,float float shininessshininess))
nn Über die Methoden Über die Methoden setMaterialsetMaterial und und getMaterialgetMaterial der der AppearanceAppearance werden die werden die Materialeigenschaften gesetztMaterialeigenschaften gesetzt
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 55/93
Andere EigenschaftenAndere Eigenschaften
nn Das Das TransparencyAttributesTransparencyAttributesObjekt steuert die Objekt steuert die TranzparenzTranzparenz (0.0(0.0--1.0)1.0)
nn PointAttributesPointAttributes und und LineAttributesLineAttributesenthalten Punktgröße und Liniendickeenthalten Punktgröße und Liniendicke
nn PolygonAttributesPolygonAttributes regeln „regeln „cullingculling“ und “ und Fülleigenschaften (Punkt, Linien, Fläche)Fülleigenschaften (Punkt, Linien, Fläche)
nn RenderingAttributesRenderingAttributes steuern im steuern im DepthDepth--und Alphaund Alpha--BufferBuffer
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 56/93
TexturenTexturen
nn Java 3D hat zwei Typen von TexturenJava 3D hat zwei Typen von Texturen–– Texture2D für BilderTexture2D für Bilder–– Texture3D für VolumentexturenTexture3D für Volumentexturen
nn Beide Typen beinhaltenBeide Typen beinhalten–– TexturdatenTexturdaten–– FiltermodiFiltermodi–– WrappingmodiWrappingmodi–– Berandungsfarbe Berandungsfarbe
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 57/93
TexturenTexturen
TextureLoaderTextureLoader loader = new loader = new TextureLoaderTextureLoader("stripe.("stripe.jpgjpg", this);", this);
ImageComponent2D image =ImageComponent2D image =loader.loader.getImagegetImage();();
Texture2D texture = new Texture2D();Texture2D texture = new Texture2D();texture.texture.setImagesetImage(0, image);(0, image);Appearance appear = new Appearance();Appearance appear = new Appearance();appear.appear.setTexturesetTexture(texture);(texture);
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 58/93
Weiteres VorgehenWeiteres Vorgehen
nn Bis jetzt:Bis jetzt:Aufbau einzelner 3D Objekte Aufbau einzelner 3D Objekte
nn Ab jetzt:Ab jetzt:Integration mehrerer 3D Integration mehrerer 3D ObjekteObjekte–– Gruppierung von ObjektenGruppierung von Objekten–– Transformation von ObjektenTransformation von Objekten–– Bewegung von ObjektenBewegung von Objekten–– LichtquellenLichtquellen
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 59/93
Live Live NodesNodes
nn Branch graphBranch graph, der einem , der einem LocaleLocalehinzugefügt wird heißt hinzugefügt wird heißt livelive, d.h. er , d.h. er kann dargestellt werdenkann dargestellt werden
BranchGroup myBranchBranchGroup myBranch = = new new BranchGroupBranchGroup( );( );myBranchmyBranch..addChildaddChild( ( myShapemyShape ););myLocalemyLocale..addBranchGraphaddBranchGraph( ( myBranchmyBranch ););
nn boolean isLiveboolean isLive()()
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 60/93
Compiled NodesCompiled Nodes
nn BranchGroupBranchGroup kann kompiliert werdenkann kompiliert werdenvoid compilevoid compile();();
nn Beachte: Beachte: compilecompile bevor livebevor live
nn CapabilitiesCapabilities geben an, was in einem geben an, was in einem Szenengraph noch gelesen und verändert Szenengraph noch gelesen und verändert werden darf, nachdem der Szenengraph werden darf, nachdem der Szenengraph compiledcompiled oder live istoder live ist
nn CapabilitiesCapabilities wirken auf Optimierung wirken auf Optimierung
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 61/93
CapabilitiesCapabilities (1)(1)
nn Methoden für Methoden für SceneGraphObjectSceneGraphObjectvoid setCapabilityvoid setCapability( ( int bitint bit ) ) void clearCapabilityvoid clearCapability( ( int bitint bit ) ) boolean getCapabilityboolean getCapability( ( int bitint bit ) )
nn CapabilitiesCapabilities gibt es für jeden Knotengibt es für jeden Knoten
nn In jedem Knoten gibt es In jedem Knoten gibt es CapabilitiesCapabilities für die für die AttributeAttribute
nn Knoten erben die Knoten erben die CapabilitiesCapabilities der Vaterklasseder Vaterklasse
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 62/93
CapabilitiesCapabilities (2)(2)
nn Beispiele von Shape3D:Beispiele von Shape3D:–– ALLOW_APPEARANCE_READ ALLOW_APPEARANCE_READ –– ALLOW_APPEARANCE_WRITE ALLOW_APPEARANCE_WRITE –– ALLOW_GEOMETRY_READ ALLOW_GEOMETRY_READ –– ALLOW_GEOMETRY_WRITE ALLOW_GEOMETRY_WRITE
myShapemyShape..setCapabilitysetCapability( ( Shape3D.ALLOW_APPEARANCE_WRITE );Shape3D.ALLOW_APPEARANCE_WRITE );
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 63/93
Gruppen in Java 3DGruppen in Java 3D
nn Unterschiedliche TypenUnterschiedliche Typen–– GroupGroup–– BranchGroupBranchGroup–– OrderedGroupOrderedGroup / / DecalGroupDecalGroup–– SharedGroupSharedGroup–– SwitchSwitch–– TransformGroupTransformGroup
nn Alle Gruppen haben KinderAlle Gruppen haben Kinder–– Modelle, Lichtquellen, Geräusche, VerhaltenModelle, Lichtquellen, Geräusche, Verhalten
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 64/93
GroupGroup
nn Die Die GroupGroup Klasse ist der allgemeinste Klasse ist der allgemeinste der Gruppen Knotender Gruppen Knoten–– Hat Genau einen VaterHat Genau einen Vater–– Beliebig viele KinderBeliebig viele Kinder
nn Man Kinder anfügen, einfügen, Man Kinder anfügen, einfügen, löschen und auslesenlöschen und auslesen
nn Die Die RenderingRendering--Reihenfolge wird Reihenfolge wird normalerweise von Java3D bestimmtnormalerweise von Java3D bestimmt
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 65/93
BranchGroupBranchGroup
nn Ein Ein BranchGroupBranchGroup Objekt ist ein Objekt ist ein Teilbaum des SzenengraphenTeilbaum des Szenengraphen–– Kann an ein Kann an ein LocaleLocale angehängt werdenangehängt werden–– Kann Kann compiledcompiled werdenwerden–– Kann als Kind einer anderen Gruppe Kann als Kind einer anderen Gruppe
verwendet werdenverwendet werden–– Kann zur Laufzeit verschoben oder Kann zur Laufzeit verschoben oder
gelöscht werdengelöscht werden
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 66/93
OrderedOrdered / / DecalGroupDecalGroup
nn Ein Ein OrderedGroupOrderedGroup Objekt garantiert, Objekt garantiert, daßdaß die Kinder in der vorgegebenen die Kinder in der vorgegebenen Reihenfolge bearbeitet werdenReihenfolge bearbeitet werden
nn Ein Ein DecalGroupDecalGroup Objekt ist für den Objekt ist für den speziellen Fall von Objekten auf einem speziellen Fall von Objekten auf einem Hintergrund gedachtHintergrund gedacht–– Das HintergrundDas Hintergrund--Objekt ist Objekt ist
vorgeschriebenvorgeschrieben
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 67/93
SwitchSwitch
nn Ein Ein SwitchSwitch Objekt erlaubt die Objekt erlaubt die Auswahl der zu bearbeitenden KinderAuswahl der zu bearbeitenden Kinder
nn Es wird keine Reihenfolge vorgegebenEs wird keine Reihenfolge vorgegeben
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 68/93
TransformationTransformation
nn Alle Modelle werden bezüglich der Alle Modelle werden bezüglich der Weltkoordinaten Weltkoordinaten plaziertplaziert
nn Ein Ein TransformGroupTransformGroup Objekt erlaubt Objekt erlaubt die Verwendung eines neuen die Verwendung eines neuen KoordinatenKoordinaten--systems relativ zum Vatersystems relativ zum Vater
nn Verändert man die Verändert man die TransformGroupTransformGroup, so bewegen sich , so bewegen sich auch die Modelle in der Gruppeauch die Modelle in der Gruppe
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 69/93
TransformGroupTransformGroup
nn Transformationen sind Transformationen sind TranslationTranslation, , Rotation und SkalierungRotation und Skalierung
nn Transformationen akkumulieren sich Transformationen akkumulieren sich bei der bei der TraversierungTraversierung des des SzenengraphenSzenengraphen
nn Das ergibt die Das ergibt die Composite Modelling Composite Modelling TransformTransform (CMT)(CMT)
nn Die Transformationen tiefer im Graph Die Transformationen tiefer im Graph werden zuerst ausgeführtwerden zuerst ausgeführt
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 70/93
Transform3DTransform3D
nn Ein Transform3D Objekt beschreibt die Ein Transform3D Objekt beschreibt die Transformation einer Transformation einer TTransformGroupransformGroup
nn Dargestellt als 4x4 Double MatrixDargestellt als 4x4 Double Matrixnn MußMuß allerdings affin sein (keine allerdings affin sein (keine
perspektivischen Transformationen)perspektivischen Transformationen)
nn Beispiel:Beispiel:Transform3D t = Transform3D t = newnew Transform3D();Transform3D();t.t.setset((scalescale, , newnew Vector3d(Vector3d(xposxpos, , yposypos, ,
0.0));0.0));
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 71/93
SharedGroupsSharedGroups
nn Ein Ein SharedGroupSharedGroup Objekt dient zur Objekt dient zur Wiederverwendung von Teilen des Wiederverwendung von Teilen des Szenengraphen an mehreren StellenSzenengraphen an mehreren Stellen–– Wird nie direkt in den Szenengraph Wird nie direkt in den Szenengraph
eingefügteingefügt–– Wird über den Link Knoten Wird über den Link Knoten referenziertreferenziert
nn Veränderungen der Veränderungen der SharedGroupSharedGroupverändern alle Referenzenverändern alle Referenzen
nn Kann Kann compiledcompiled werdenwerden
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 72/93
Beispiel eines SzenengraphBeispiel eines Szenengraph
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 73/93
VerhaltenVerhalten
nn ProgrammierbarkeitProgrammierbarkeit–– Verhalten sind JavaVerhalten sind Java--MethodenMethoden
nn EffizienzEffizienz–– Java 3D führt Verhalten nur aus wenn nötigJava 3D führt Verhalten nur aus wenn nötig
nn KompositionKomposition–– Verhalten werden mir Objekten verbundenVerhalten werden mir Objekten verbunden–– Verhalten können nebeneinander existieren und Verhalten können nebeneinander existieren und
dynamisch verändert werdendynamisch verändert werden
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 74/93
VerhaltenVerhalten
nn Jedes Verhalten enthält:Jedes Verhalten enthält:–– Code zur Ausführung in einer Code zur Ausführung in einer processStimulusprocessStimulus MethodeMethode
–– „„WakeupWakeup“ Bedingungen, um zu steuern “ Bedingungen, um zu steuern
wann der Code durchgeführt wirdwann der Code durchgeführt wird
–– BoundingBounding Information für die AusführungInformation für die Ausführung
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 75/93
Verhalten Verhalten -- BoundsBounds
nn Verhalten werden nur durchgeführt, wenn Verhalten werden nur durchgeführt, wenn sich Sichtradius vom Betrachter und sich Sichtradius vom Betrachter und BoundingBounding--Objekt des Verhaltens schneidenObjekt des Verhaltens schneiden
nn BoundingBounding--ObjektObjekt–– Kugel, Würfel, Kugel, Würfel, PolyederPolyeder, etc, etc–– Default: Kein Default: Kein BoundingBounding Objekt (deswegen auch Objekt (deswegen auch
keine Durchführung des Verhaltens)keine Durchführung des Verhaltens)–– Die Position des Verhaltens im Szenengraph Die Position des Verhaltens im Szenengraph
bestimmt den Ursprung des bestimmt den Ursprung des BoundingBounding--ObjektsObjekts
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 76/93
Verhalten Verhalten -- WakeupWakeup
nn Ein Verhalten wird nur durchgeführt, Ein Verhalten wird nur durchgeführt, wenn die wenn die WakeupWakeup--Kriterien erfüllt sindKriterien erfüllt sind
–– Ein gewisse Zeit ist verstrichenEin gewisse Zeit ist verstrichen–– Ein Ein EventEvent wird generiertwird generiert–– Transformation wird durchgeführtTransformation wird durchgeführt–– Kollision oder NäheKollision oder Nähe
nn Kriterien können durch logische Kriterien können durch logische Operationen verbunden werdenOperationen verbunden werden
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 77/93
Beispiel eines Beispiel eines BehaviorsBehaviorspublic classpublic class MorphingBehaviorMorphingBehavior extendsextends BehaviorBehavior{{WakeupOnElapsedFramesWakeupOnElapsedFrames w = w =
newnew WakeupOnElapsedFramesWakeupOnElapsedFrames(0); (0);
public voidpublic void initializeinitialize() {() {alpha.alpha.setStartTimesetStartTime((
System.System.currentTimeMilliscurrentTimeMillis());());wakeupOnwakeupOn(w); (w);
} }
public voidpublic void processStimulusprocessStimulus(Enumeration (Enumeration criteria) {} criteria) {} public public MorphingBehaviorMorphingBehavior(Alpha a, Morph m) {}(Alpha a, Morph m) {}
}}
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 78/93
Rotation Rotation InterpolatorInterpolator
Alpha Alpha spinAlphaspinAlpha = = newnew Alpha( Alpha( --1,4000 );1,4000 );
RotationInterpolator spinnerRotationInterpolator spinner ==new RotationInterpolatornew RotationInterpolator( (
spinAlphaspinAlpha, , transtrans ););spinnerspinner..setSchedulingBoundssetSchedulingBounds((
new BoundingSpherenew BoundingSphere( ( newnew Point3d( ), 1000.0 ) );Point3d( ), 1000.0 ) );
transtrans..addChildaddChild( ( spinnerspinner ););
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 79/93
Vorgefertigte VerhaltenVorgefertigte Verhalten
nn InterpolatorenInterpolatoren–– AlphaAlpha–– RotationRotation–– PositionPosition–– PfadPfad
nn BillboardsBillboardsnn Level of Detail KnotenLevel of Detail Knotennn MousebehaviorMousebehavior
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 80/93
MouseBehaviorMouseBehavior
TransformGroup objTransTransformGroup objTrans = = new TransformGroupnew TransformGroup();();
MouseRotate behaviorMouseRotate behavior = = new MouseRotatenew MouseRotate();();behaviorbehavior..setTransformGroupsetTransformGroup((objTransobjTrans););objTransobjTrans..addChildaddChild((behaviorbehavior););behaviorbehavior..setSchedulingBoundssetSchedulingBounds((boundsbounds););
MouseZoomMouseZoom behavior2 = behavior2 = new MouseZoomnew MouseZoom();();MouseTranslateMouseTranslate behavior3 = behavior3 =
new MouseTranslatenew MouseTranslate();();
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 81/93
LichtquellenLichtquellen
nn Java3D bietet folgenden TypenJava3D bietet folgenden Typen–– Ambientes Licht:Ambientes Licht: AmbientLightAmbientLight–– Gerichtetes Licht:Gerichtetes Licht: DirectionalLightDirectionalLight–– Punktlichtquelle:Punktlichtquelle: PointLight PointLight –– SpotSpot
nn Attribute von allen LichtquellenAttribute von allen Lichtquellen–– Status (aus/an)Status (aus/an)–– FarbeFarbe–– BoundingBounding--VolumenVolumen
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 82/93
Definition von LichtquellenDefinition von Lichtquellen
nn Ambientes Licht:Ambientes Licht:AmbientLightAmbientLight(( Color3f Color3f colorcolor ) )
nn Gerichtetes Licht:Gerichtetes Licht:DirectionalLightDirectionalLight((boolean lightOnboolean lightOn,,Color3f Color3f colorcolor, Vector3f direction) , Vector3f direction)
nn Punktlichtquelle:Punktlichtquelle:PointLightPointLight(Color3f(Color3f colorcolor, Point3f , Point3f position, Point3f attenuation)position, Point3f attenuation)
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 83/93
Weitere Java3D FeaturesWeitere Java3D Features
nn Eingabegeräte und Eingabegeräte und PickingPicking
nn Einsatz von unterschiedlicher Einsatz von unterschiedlicher LoaderLoader
nn Einsatz von 3D SoundEinsatz von 3D Sound
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 84/93
EingabegeräteEingabegeräte
nn Zugriff auf EchtzeitZugriff auf Echtzeit--EingabegeräteEingabegeräte–– Joystick, 6DOF Geräte, Knöpfe und ReglerJoystick, 6DOF Geräte, Knöpfe und Regler
nn Einfache Integration in bestehende Einfache Integration in bestehende ApplikationenApplikationen
nn Eingabegeräte können virtuell seinEingabegeräte können virtuell sein
nn Alle Eingabegeräte sind Sensoren (für Alle Eingabegeräte sind Sensoren (für physikalische oder virtuelle Größen)physikalische oder virtuelle Größen)
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 85/93
PickingPicking
nn Java3D bietet Möglichkeiten zur Java3D bietet Möglichkeiten zur Auswahl von Objekten des Auswahl von Objekten des SzenegraphenSzenegraphen
nn Ein Ein PickShapePickShape wird mit wird mit BranchGroupsBranchGroups geschnittengeschnitten
nn BranchGroupsBranchGroups enthalten Methoden enthalten Methoden zur Auswertung des zur Auswertung des PickingPicking
nn Verschiedene Kriterien bei der AuswahlVerschiedene Kriterien bei der Auswahl
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 87/93
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 88/93
HintergrundHintergrund
nn Der Background Knoten bestimmt den Der Background Knoten bestimmt den Hintergrund der Szene und besteht ausHintergrund der Szene und besteht aus
–– Konstanter FarbeKonstanter Farbe–– BildBild–– GeometrieGeometrie–– BoundingBounding--InformationenInformationen
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 89/93
Beispiel eines HintergrundsBeispiel eines Hintergrunds
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 90/93
HintergrundHintergrund
import comimport com..sunsun.j3d..j3d.utilsutils.image..image.TextureLoaderTextureLoader;;BoundingSphere boundsBoundingSphere bounds ==
new BoundingSpherenew BoundingSphere((newnewPoint3d(0.0,0.0,0.0), 100.0);Point3d(0.0,0.0,0.0), 100.0);
// Set up // Set up the backgroundthe backgroundTextureLoader bgTextureTextureLoader bgTexture = = new new TextureLoaderTextureLoader((bgImagebgImage, , thisthis););Background Background bgbg = = newnewBackground(Background(bgTexturebgTexture..getImagegetImage());());bgbg..setApplicationBoundssetApplicationBounds((boundsbounds););objRootobjRoot..addChildaddChild((bgbg););
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 91/93
3D Sound und Geräusche3D Sound und Geräusche
nn Java3D unterstützt Audio Java3D unterstützt Audio ((CapabilitiesCapabilities beachten!)beachten!)
BackgroundSoundBackgroundSound sound1 = sound1 = new BackgroundSoundnew BackgroundSound();();
PointSound PointSound sound2 = sound2 = new PointSoundnew PointSound();();BoundingSphere soundBoundsBoundingSphere soundBounds = = new BoundingSpherenew BoundingSphere( ( newnew Point3d(0.0,0.0,0.0), 100.0); Point3d(0.0,0.0,0.0), 100.0);
sound1.sound1.setSchedulingBoundssetSchedulingBounds((soundBoundssoundBounds); ); objTransobjTrans..addChildaddChild(sound1);(sound1);
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 92/93
ZusammenfassungZusammenfassung
nn GrundlagenGrundlagen
nn Virtuelle Welt und Physikalische WeltVirtuelle Welt und Physikalische Welt
nn ModelleModelle
nn Gruppierung und TransformationGruppierung und Transformation
nn VerhaltenVerhalten
nn LichtquellenLichtquellen
April 2002 Einführung in Java3D, Paul Grimm, [email protected] 93/93
AusblickAusblick
nn Neue Features von Java3D Version 1.2Neue Features von Java3D Version 1.2–– Offscreen RenderingOffscreen Rendering–– Model Model clipping clipping planeplane–– OrientedShape3DOrientedShape3D--NodeNode–– Multiple Multiple Geometries Geometries in einem Shape3D in einem Shape3D
NodeNode–– Multitexture Multitexture und Textur Farbtabellenund Textur Farbtabellen–– Neue Neue Picking Picking MechanismenMechanismen