Java 3D - Dipartimento di Informaticaig/lezioni/13-Java3D-geometria.pdf · // Create a simple shape...
-
Upload
phungkhuong -
Category
Documents
-
view
220 -
download
4
Transcript of Java 3D - Dipartimento di Informaticaig/lezioni/13-Java3D-geometria.pdf · // Create a simple shape...
Introduction to Java3D 1
Java 3DClassi delle primitive geometricheCome definire oggetti visualiCome specificare l'aspetto di un oggetto
Introduction to Java3D 2
Sistema di coordinateUna istanza della classe VirtualUniverse serve come radice dello scene graphIl termine virtual universe si riferisce ad uno spazio virtuale tridimensionale popolato di oggetti 3DCiascun oggetto Local stabilisce un sistema di coordinate cartesiane nel mondo virtualeUn oggetto SimpleUniverse crea uno scene graphcontenente un oggetto VirtualUniverse, un oggetto Locale ed un completo view branch graph : definisce un sistema di coordinate nel mondo virtuale
Introduction to Java3D 3
ColorCubeGli esempi HelloJava3D usano la classe ColorCube
La classe ColorCube estende la classe Shape3D: èun Leaf node
Il costruttore ColorCube() costruisce un cubo standard, centrato nell’origine e di lato 2 (metri)Il costruttore Color Cube(double scale) costruisce un cubo di lato ridimensionato del fattore scale
Un oggetto ColorCube è un oggetto visuale, costituito da un cubo avente un colore differente su ciascuna faccia
Introduction to Java3D 4
Classi delle primitive geometricheEsistono tre modi per definire la geometria di un oggetto visuale:
usare le classi di utility per box, coni, cilindri e sferespecificare le coordinate dei vertici per punti, linee e superficiusare le classi loader di geometrie
Introduction to Java3D 5
Classe Shape3DUn nodo Shape3D definisce un oggetto visualeE' una sottoclasse di Leaf, quindi un oggetto Shape3D può essere solo una foglia in uno scene graphNon contiene informazioni su forma o colore di un oggettoTali informazioni sono negli oggetti NodeComponentcollegati al nodo Shape3D
Un nodo Shape3D può riferirsi ad un componente Geometry ed ad un componente Appearance
Introduction to Java3D 6
Shape3D
Introduction to Java3D 7
Shape3D
CostruttoriShape3D()
Costruisce ed inizializza un oggetto visuale senza componenti geometry e appearance
Shape3D( Geometry geometry)Costruisce ed inizializza un oggetto visuale con una
specificata geometriaShape3D( Geometry geometry, Appearanceappearance)
Costruisce ed inizializza un oggetto visuale con una specificata geometria ed apparenza
Introduction to Java3D 8
Shape3D
Finché un oggetto Shape3D non è live e non è stato compilato, possono essere cambiati i riferimenti ad i suoi componenti -Geometry ed Appearance
Se il nodo Shape3D è vivo o compilato i suoi riferimenti posso essere cambiati solo se sono state impostate le rispettive capability
Introduction to Java3D 9
CapabilityEsempi di capability per un nodo Shape3D sono:
ALLOW_GEOMETRY_READALLOW_GEOMETRY_WRITEALLOW_APPEARANCE_READALLOW_APPEARANCE_WRITEALLOW_COLLISION_BOUNDS_READALLOW_COLLISION_BOUNDS_WRITE
Introduction to Java3D 10
Definire un oggetto visualeSe un particolare oggetto visuale deve apparire più volte in un universo virtuale conviene introdurre una classe per poterlo creare più volte con facilità
Vediamo un esempio per progettare una classe di un oggetto visuale
Introduction to Java3D 11
Definire un oggetto visualepublic class VisualObject extends Shape3D{private Geometry voGeometry;private Appearance voAppearance;// crea un nodo Shape3D con una geometria ed una apparenzapublic VisualObject(){voGeometry = createGeometry(); // la geometria è creata con il metodo createGeometryvoAppearance = createAppearance(); // l’apparenza è creta con il nodo Appearancethis.setGeometry(voGeometry);this.setAppearance(voAppearance);}private Geometry createGeometry(){// codice per creare la geometria dell'oggetto}private Appearance createAppearance (){// codice per creare l'aspetto dell'oggetto}}
Introduction to Java3D 12
Definire un oggetto visualeSi può creare un nuovo oggetto visuale estendendo la classe Shape3D Un oggetto visuale può essere utilizzato esattamente come è stato utilizzato un oggetto di classe ColorCubeUna volta creato un oggetto visuale può essere inserito in qualsiasi gruppo dello scene graph esattamente come il ColorCube
Introduction to Java3D 13
SceneGraph –esempioHelloJava3Da
Introduction to Java3D 14
Metodo createSceneGraph per la classe HelloJava3Da
1. public BranchGroup createSceneGraph() {2. // Create the root of the branch graph3. BranchGroup objRoot = new BranchGroup();4. // Create a simple shape leaf node, add it to the
scene graph.5. // ColorCube is a Convenience Utility class6. objRoot.addChild(new ColorCube(0.4));7. return objRoot;8. } // end of createSceneGraph method of
HelloJava3Da
Introduction to Java3D 15
Definire un oggetto visualeUn altro modo per creare nuovi oggetti visuali è definire una classe contenitore non derivata dalle classi Java3DIn questo approccio l'oggetto visuale dovrà:
contenere un oggetto (root) Node o Shape3Ddefinire almeno un metodo che restituisce in riferimento all'oggetto root
Questa tecnica è leggermente più difficile, ma offre maggiore flessibilità
Introduction to Java3D 16
Definire un oggetto visuale – classe primitive
Un ulteriore modo per creare oggetti visuali è quello di utilizzare le classi Box, Cone, Cylinder e Sphere definite nel package
com.sun.j3d.utils.geometryOgni classe estende la classe Primitiveche (a sua volta) estende Group
Introduction to Java3D 17
Classi di utility per la geometria
Classi di utility per crearebox
conicilindri sfere
Introduction to Java3D 18
Classe BoxCrea un “box” 3DLe dimensioni di default per lunghezza, larghezza ed altezza sono di 2 metri, con il centro posto nell'origineLa figura di default è un cubo con gli spigoli a ( -1, -1, -1) e ( 1, 1, 1)Le dimensioni xdim, ydim, zdim posso essere specificate all'atto della creazione
Box(float xdim, float ydim, float zdim, Appearanceappearance)
Introduction to Java3D 19
Classe ConeDefinisce un cono “chiuso” centrato nell'origine con asse allineato lungo l'asse y
Il raggio e l'altezza di default sono 1.0 e 2.0Il centro del cono è il centro del suo “bounding box”Cone(float radius, float height, Appearance appearance)
Introduction to Java3D 20
Classe CylinderCrea un cilindro “chiuso” centrato nell'origine con asse allineato lungo l'asse y
il raggio e l'altezza di default sono 1.0 e 2.0Cylinder(float radius, float height, Appearance appearance)
Introduction to Java3D 21
Classe SphereCrea una sfera centrata nell'origine
il raggio di default è 1.0Sphere(float radius, Appearanceappearance)
Introduction to Java3D 22
Esempio ConoYoyo
traslazionerotazione
Introduction to Java3D 23
Esempio ConoYoyoIn default un cono è posizionato in modo da avere
il bounding box centrato nell’originel’orientazione dell’asse lungo l’asse y
L’oggetto yoyo è formato da 2 coni ruotati intorno l’asse z e traslati lungo l’asse xin modo da avere le 2 estremitànello stesso punto
Introduction to Java3D 24
Class ConeYoyo//classe Yoyoclass ConeYoyo_a1{private BranchGroup yoyoBG;public ConeYoyo_a1(){ // crea un oggetto visuale con la geometria e l’apparenzayoyoBG=new BranchGroup();Appearance app=new Appearance();Transform3D translate=new Transform3D();Transform3D rotate=new Transform3D();//Crea il primo cono//Crea una traslazione per spostare il cono e poi una rotazione per
posizionare la punta del cono nell'origine
Introduction to Java3D 25
Class ConeYoyotranslate.set(new Vector3f(0.1f,0.0f,0.0f));TransformGroup yoyoTGT1=new TransformGroup(translate);yoyoBG.addChild(yoyoTGT1);rotate.rotZ(Math.PI/2.0d);
TransformGroup yoyoTGR1=new TransformGroup(rotate);Cone cone1=new Cone(0.6f,0.2f);cone1.setAppearance(app);yoyoTGR1.addChild(cone1);yoyoTGT1.addChild(yoyoTGR1);//Crea la seconda meta' dello Yoyo//Il procedimento è speculare al precedentetranslate.set(new Vector3f(-0.1f,0.0f,0.0f));TransformGroup yoyoTGT2=new TransformGroup(translate);yoyoBG.addChild(yoyoTGT2);
Introduction to Java3D 26
Class ConeYoyorotate.rotZ(-Math.PI/2.0d);TransformGroup yoyoTGR2=new TransformGroup(rotate);Cone cone2=new Cone(0.6f,0.2f);cone2.setAppearance(app);yoyoTGR2.addChild(cone2);yoyoTGT2.addChild(yoyoTGR2);//Compila l'oggettoyoyoBG.compile();
}public BranchGroup getBG(){ return yoyoBG;}}
Introduction to Java3D 27
Classe ConeEsempi - esercitazione 4
ConeAppConeYoyoApp_1ConeYoyoApp_2
Introduction to Java3D 28
Classi di utility per la geometria
Le classi di utility per le geometrie non definiscono il colore o l'aspetto di un oggetto
Tali informazioni derivano dal nodo Appearance
Senza un riferimento ad un nodo Appearance l'oggetto potrebbe non essere visualizzato o essere visualizzato bianco
La classe Primitive definisce molti valori comuni alle classi Box, Cone, Cylinder e Sphere
Ad esempio definisce il numero di poligoni utilizzati per rappresentare le superfici
Introduction to Java3D 29
Classi matematiche-javax.vecmath
Per la creazione di oggetti visuali è necessario usare la classe Geometry od una sua sottoclasseLe sottoclassi della classe Geometry descrivono primitive basate sui vertici come punti, linee e poligoniPer poter studiare tali classi bisogna prima introdurre alcune classi matematiche:
Point*Color*Vector*TexCoord*
L’asterisco rappresenta variazioni del nome della classe
Introduction to Java3D 30
Classi matematiche-javax.vecmath
Ogni vertice di un oggetto visuale può specificare fino a quattro oggetti matematici rappresentanti:
coordinate (Point*)colori (Color*)normali (Vector*)coordinate di texture (TexCoord*)
Introduction to Java3D 31
PointGli oggetti (Point*) rappresentano le coordinate di un vertice – possono anche rappresentare la posizione di una immagine raster o di una sorgente luminosaLe coordinate sono necessarie per posizionare ogni vertice e non possono essere omesse; gli altri dati sono opzionaliAd esempio:
si può definire un colore (Color*) su ogni verticeper abilitare le risposte alle luci sono necessarie le normali (Vector*)per il texture mapping sono necessarie le coordinate di texture (TexCoord*)
Introduction to Java3D 32
Classe PointGli oggetti Point* solitamente rappresentano le coordinate dei verticiPossono rappresentare anche:
la posizione di una sorgente di lucela posizione di una sorgente sonoraaltri dati posizionali
Introduction to Java3D 33
Classe ColorUn oggetto Color* rappresenta un colore per un vertice, o per una proprietà del materiale, o per un oggetto visualeI colori posso essere specificati con Color3*o Color4*Con gli oggetti Color3* bisogna specificare
le componenti RGBCon gli oggetti Color4* bisogna specificare anche un valore di trasparenza
Introduction to Java3D 34
Classe ColorConstants
1. import javax.vecmath.*;2. // crea le costanti di colore red, green,….3. class ColorConstants{4. public static final Color3f red = new Color3f(1.0f,0.0f,0.0f);5. public static final Color3f green = new Color3f(0.0f,1.0f,0.0f);6. public static final Color3f blue = new Color3f(0.0f,0.0f,1.0f);7. public static final Color3f yellow = new Color3f(1.0f,1.0f,0.0f);8. public static final Color3f cyan = new Color3f(0.0f,1.0f,1.0f);9. public static final Color3f magenta = new Color3f(1.0f,0.0f,1.0f);10. public static final Color3f white = new Color3f(1.0f,1.0f,1.0f);11. public static final Color3f black = new Color3f(0.0f,0.0f,0.0f);12. }
Introduction to Java3D 35
Classe VectorGli oggetti Vector* sono utilizzati per rappresentare:
le normali superficiali nei verticila direzione di una sorgente di lucela direzione di una sorgente sonorauna traslazione di una trasformazione affine
Introduction to Java3D 36
Classe TexCoordGli oggetti TexCoord* rappresentano le coordinate di una texture ad un verticeEsistono solo due classi TexCoord*
TexCoord2fTexCoord3f
TexCoord2f conserva le coordinate in una coppia (s, t)TexCoord3f conserva le coordinare in una tripla (s, t, r)
Introduction to Java3D 37
Classe GeometryNella rappresentazione poligonale un oggetto visuale (da un semplice triangolo ad una automobile..) è modellato con dati “vertex-based”
In Java3D, ogni oggetto Shape3D dovrebbe chiamare il suo metodo setGeometry() per referenziare una o più istanze di Geometry
Geometry è una superclasse astratta e gli oggetti referenziati sono istanze di sue sottoclassi
Introduction to Java3D 38
Classe GeometryLe sottoclassi di Geometry possono essere suddivise in tre categorie:
“non-indexed vertex-based” (ogni volta che un oggetto visuale è renderizzato, i suoi vertici sono utilizzati solo una volta)“indexed vertex-based” (ogni volta che un oggetto visuale è renderizzato, i suoi vertici possono essere usati più volte)altre classi ( Raster, Text3D e CompressedGeometry)
Introduction to Java3D 39
Classe GeometryArrayLe sottoclassi di Geometry posso essere usate per specificare punti, linee e poligoni pieni (triangoli e quadrilateri)
Queste primitive “vertex-based” sono sottoclassi della classe GeometryArray
La classe GeometryArray conserva i suoi dati in array
Introduction to Java3D 40
Classe GeometryArrayPer esempio, per specificare un triangolo un oggetto GeometryArray utilizza un array di tre elementi: uno per ogni vertice
Ogni elemento di questo array conserva le coordinate del suo vertice (che possono essere definite ad esempio con un oggetto Point*)
Possono essere definiti altri tre array per memorizzare
ColoreNormale superficialeCoordinate delle texture
Introduction to Java3D 41
Ciclo di vita di un oggetto GeometryArrayIl ciclo di vita di un oggetto GeometryArray ècaratterizzato da tre passi:
costruzione di un oggetto vuotoimpostazione dei dati dell'oggettoreferenziamento dell'oggetto da uno (o più) oggetti Shape3D
Introduction to Java3D 42
Ciclo di vita di un oggetto GeometryArrayCostruzione di un oggetto vuoto
Quando si costruisce un oggetto GeometryArray devono essere specificati due dati:
il numero di vertici – elementi dell’arrayil “vertex format” ovvero
il tipo di dati (coordinate, colore, normale e coordinate di texture) che devono essere memorizzati per ogni vertice
Introduction to Java3D 43
Costruttore della classe geometryArray
Introduction to Java3D 44
Ciclo di vita di un oggetto GeometryArrayImpostazione dei dati dell'oggetto
Dopo avere costruito l'oggetto bisogna assegnare i valori agli array come stabilito dal vertex format scelto
Questa operazione può essere fatta vertice per vertice oppure utilizzando un array per assegnare più valori con una sola chiamata
Introduction to Java3D 45
GeometryArrayEsempi - esercitazione 4
AxisApp
Introduction to Java3D 46
Sottoclassi di GeometryArrayLa figura mostra alcuni esempi delle sottoclassi PointArray, LineArray, TriangleArray, QuadArray
Notare che nessuno dei vertici è condiviso:Ogni linea o poligono è renderizzatoindipendentemente da ogni altro
Introduction to Java3D 47
Sottoclassi di GeometryArrayLe sottoclassi di GeometryArray non permettono il riuso dei vertici
Il riuso permetterebbe anche migliori risultati di rendering e performance
Introduction to Java3D 48
Sottoclassi di GeometryStripArray
La figura mostra alcuni esempi delle sottoclassi di GeometryStripArrayNotare il riutilizzo dei vertici
Introduction to Java3D 49
Sottoclassi di GeometryStripArray
Il costruttore della classe GeometryStripArray ha tre parametri
numero di vertici “vertex format”“numero di vertici per strip”
L’ultimo parametro rappresenta il numero di vertici che ogni singolo strip contiene
Introduction to Java3D 50
Sottoclassi di GeometryArrayEsempi - esercitazione 4
ConoYoyoApp_b1
Introduction to Java3D 51
Sottoclassi di IndexedGeometryArray
Le sottoclassi di GeometryArray fanno un uso dispendioso dei verticiSolo le sottoclassi di GeometryStripArrayeffettuano un minimo riuso dei verticiPer esempio per definire un cubo sarebbero sufficienti solo 8 verticiEppure la GeometryArray ci costringere a specificare 24 vertici (con 16 vertici ridondanti)
Introduction to Java3D 52
Sottoclassi di IndexedGeometryArrayLa classe IndexedGeometryArray introduce il concetto di indicizzazione dei verticiE' ancora necessario fornire gli array di informazioni vertex-based, ma è possibile:
memorizzare i vertici in un ordine qualsiasiriusarli a piacimento tutte le volte che servono indirizzandoli tramite un “index array”
Gli index array possono avere più riferimenti allo stesso vertice
Introduction to Java3D 53
Sottoclassi di IndexedGeometryArrayI valori degli index array determinano l'ordine in cui i vertici vengono elaborati durante il renderingSvantaggi:
l'aggiunta di un ulteriore array che contiene gli indici dei verticiL'aumento del lavoro da svolgere dal processo di rendering e quindi un calo di prestazioni
Le geometrie indicizzate sono utili quando la velocità non è fondamentale
Introduction to Java3D 54
Sottoclassi di IndexedGeometryArray
Introduction to Java3D 55
Aspetto e attributiUn oggetto Shape3D può fare riferimento sia ad un oggetto Geometry sia ad un oggetto AppearanceL’ oggetto Geometry specifica le informazioni spaziali e (opzionale) di colore sui verticiTuttavia i dati della classe Geometry sono spesso insufficienti per descrivere l'aspetto di un oggetto: è necessario utilizzare un oggetto Appearance
Introduction to Java3D 56
Aspetto e attributiUn oggetto Appearance non contiene le informazioni sull'aspetto di uno Shape3DPiuttosto sa dove trovare tali informazioni
Un oggetto Appearance può referenziarsi a molteplici oggetti sottoclassi di NodeComponent (detti “attributi”), dove sono memorizzate informazioni sull'aspetto
Introduction to Java3D 57
Aspetto e attributi
Introduction to Java3D 58
Aspetto e AttributiGli oggetti a cui può referenziarsi un Appearance sono molteplici, i principali sono:
PointAttributes/LineAttributesPolygonAttributesColoringAttributes/TransparencyAttributesRenderingAttributes/MaterialTextureAttributes/Texture/TexCoordGeneration
Per ogni attributo esiste un metodo per impostare/recuperare il suo valore
Introduction to Java3D 59
Condividere aspetti ed attributiE' possibile (e spesso utile) che piùoggetti facciano riferimento allo stesso oggetto AppearanceAnalogamente è possibile (ed utile) che più Appearance facciano riferimento agli stessi attributiLa condivisione può migliorare le performance
Introduction to Java3D 60
Condividere aspetti ed attributi
Introduction to Java3D 61
Attributi: PointAttributesL'oggetto PointAttributes gestisce come devono essere renderizzati i punti
In default se un vertice è renderizzato come un punto allora viene riempito un solo pixelE' possibile usare il metodo setPointSize() per rendere il punto più grande
In default punti più grandi hanno l'aspetto di un quadrato, a meno di non usare il metodo setPointAntialiasingEnable()
Introduction to Java3D 62
Attributi: LineAttributesL'oggetto LineAttributes gestisce come devono essere renderizzate le lineeL'oggetto LineAttributes decide come
renderizzare le linee tramite tre parametriIn default un linea è tracciata continua, di spessore uno e senza antialiasing
Questi attributi possono essere modificati chiamando i metodi setLinePattern(),setLineWidth() e setLineAntialiasingEnable()
Introduction to Java3D 63
Attributi: PolygonAttributesL'oggetto PolygonAttributes gestisce come devono essere renderizzati i poligoniL'oggetto PolygonAttributes decide come renderizzare i poligoni tramite due parametri:
come il poligono è rasterizzatose alcune sue parti non devono essere renderizzate
Introduction to Java3D 64
Attributi: PolygonAttributesPer default un poligono è renderizzato pieno, ma il metodo setPolygonMode() può cambiare tale modalità (attivando la rappresentazione wireframe o solo dei vertici)Il metodo setCullFace() può essere usato per ridurre il numero di poligoni da renderizzareSe setCullFace() è impostato su CULL_FRONT o CULL_BACK allora in media la metà dei poligoni non sarà renderizzata
Introduction to Java3D 65
Attributi: ColoringAttributesL'oggetto ColoringAttributes controlla come qualsiasi primitiva è colorataIl metodo setColor() imposta un colore che (in alcuni casi) specifica il colore della primitivaIl metodo setShadeModel() determina come interpolare i colori tra le varie primitive
Introduction to Java3D 66
Attributi: ColoringAttributesPoiché i colori possono essere definiti anche su ogni vertice di un oggetto Geometry, ci potrebbe essere un conflitto con il colore definito da ColoringAttributes
In tali situazioni prevale il colore definito con GeometryAnalogamente se sono state attivate delle luci il ColoringAttributes viene ignorato
Introduction to Java3D 67
Attributi: TrasparencyAttributes
L'oggetto TransparencyAttributes gestisce la trasparenza di qualsiasi primitivaIl metodo setTransparency() definisce il valore di trasparenza (0.0 opaco, 1.0 trasparente)Il metodo setTransparencyMode() abilita la trasparenza ed imposta la tecnica di trasparenza usata (SCREEN_DOOR, BLENDED e NONE)
Introduction to Java3D 68
Attributi: TrasparencyAttributes
La tecnica SCREEN_DOOR seleziona (in modo random) alcuni pixel e li rende totalmente opachi, il resto dei pixel è reso totalmente trasparente; la percentuale di pixel trasparenti èuguale al valore di trasparenza impostatoLa tecnica BLENDED imposta la trasparenza di ogni pixel al valore di trasparenza impostato
Lo SCREEN_DOOR è più veloce del BLENDED, ma (ovviamente) al costo di una minore qualità del rendering
Introduction to Java3D 69
Attributi: RenderingAttributesL'oggetto RenderingAttributes controlla molte operazioni di rendering:
effettua il “depth buffer test”effettua l'“alpha test”controlla se ignorare o meno i colori dei vertici della Geometrycontrolla se rendere invisibile un oggetto
Solitamente non è necessario modificare i valori di default di questo oggetto, quindi non ce ne occuperemo in dettaglio
Introduction to Java3D 70
Attributi: valori di default
Introduction to Java3D 71
Attributi: valori di default
Introduction to Java3D 72
AttributiEsempi – esercitazione 5
TwistStripApp
Introduction to Java3D 73
Bound e scopeUn bound definisce uno spazio (o regione) dove un nodo (una luce, un behavior, ecc.) agisceUn bound è definito usando le classi
BoundingSphere – sferaBoundingBox – parallelepipedo BoundingPolytope – poliedro
Ad esempio una sorgente di luce deve definire una regione di influenza ed un oggetto sarà illuminato solo se interseca tale regione
Introduction to Java3D 74
Bound e scopeLo “scope” è una collezione di oggetti Group(BranchGroup, TransformGroup, ecc.) sui quali un certo nodo fa sentire la sua influenzaBound e scope forniscono una funzionalitàsimile, ma in modo diverso:
un bound specifica regioni spazialiuno scope specifica raggruppamenti di oggetti
Bound e scope sono usati da molti oggetti: luci, behavior, suoni, ecc.
Introduction to Java3D 75
BoundI Bound permettono al programmatore di modificare azioni, aspetto, suoni, ecc.Se opportunamente usati i boundpermettono anche di incrementare le performance, riducendo il lavoro svolto dal motore di renderingPer tale motivo i bound dovrebbero essere scelti piccoli e semplici
Introduction to Java3D 76
BoundingBoxUn BoundingBox definisce un parallelepipedo, mediante due punti:
Il punto avente coordinate (x,y,z) minime della regioneIl punto avente coordinate (x,y,z) massime
I lati sono paralleli agli assi del sistema di riferimento. In tal modo
il calcolo delle intersezioni tra bound risulta piùsemplice
Il costruttore in default crea un cubo centrato nell’origine con lato 2
Introduction to Java3D 77
BoundingSphereUn oggetto BoundingSphere definisce una “bounding region” – sfericaIl costruttore in default crea una sfera centrata nell'origine con raggio 1E' il bound che fornisce le migliori performance di rendering
Introduction to Java3D 78
Bounding LeafUtilizzando un oggetto bound per specificare una bounding region, l'oggetto stesso si muoverà con l'oggetto che lo referenziaQuesto comportamento è il più comune, ma non l'unicoCi sono situazioni in cui sarebbe meglio che la bounding region si muova indipendentemente dagli oggetti che la usano
Introduction to Java3D 79
Bounding LeafPer esempio consideriamo una luce fissa che illumina oggetti in movimento: la regione di bounding della luce deve includere gli oggetti stessi
Una soluzione è di utilizzare una regione sufficientemente grande da includere tutti i punti dove gli oggetti si possono trovareUn’altra soluzione è usare un oggetto BoundingLeaf
Introduction to Java3D 80
Bounding LeafUn BoundingLeaf è un oggetto inseribile all'interno di uno scene graph e referenziabile da chi ne ha bisogno
Essendo inserito nello scene graph esso si muove insieme ad altri oggetti ed indipendentemente dagli oggetti che lo referenziano
Nel nostro esempio la luce referenzierà un BoundingLeaf che però si muoverà insieme agli oggetti nella scena
Introduction to Java3D 81
BoundingLeaf
Introduction to Java3D 82
Aspetti AlternatiIn alcuni casi è necessario che l'aspetto di un oggetto cambi in funzione della posizione che l'oggetto stesso assume
Ad esempio nel film “La Maledizione della Prima Luna” il volto del pirata diventa scheletrico non appena entra nel raggio di luce della luna
La classe AlternateAppearance permette di ottenere questi effetti associando un Appearance ad una regione di influenza e/o ad uno scope
Introduction to Java3D 83
Apetti alternatiEsempi –esercitazione 4
AlternateAppearanceAppAppearanceExplorer
Introduction to Java3D 84
ReferencesGetting starting with Java3D API (Dennis J Bouvier) „ The Java3D Tutorial of Sun“Java websitehttp://java.sun.com/products/javamedia/3Dhttp://www.sun.com/desktop/java3dhttp://java.sun.com/javase/technologies/desktop/
http://wiki.java.net/bin/view/Javadesktop/Java3D