|
|
|
|
Strumenti |
14-03-2009, 15:05 | #1 |
Junior Member
Iscritto dal: Feb 2009
Messaggi: 8
|
[Java 3D] BoundingBox
Salve,
qualcuno sa come dare al BoundingBox le stesse dimensioni di un Box?io ho provato nel seguente modo: Codice:
float x=.0f; float y=.0f; float z=9f; float xdim=0.5f; float ydim=0.5f; float zdim=0.1f; Appearance appearance = new Appearance(); Material material = new Material(); material.setEmissiveColor(new Color3f(1, 0, 0)); appearance.setMaterial(material); Box box = new Box(xdim, ydim, zdim, Box.GENERATE_NORMALS, appearance); Transform3D transf = new Transform3D(); TransformGroup tg = new TransformGroup(); Vector3f posizione = new Vector3f(x,y,z); transf.setTranslation(posizione); tg.setTransform(transf); box.setBoundsAutoCompute(false);//per non prendere quello generato dal box,che ha i limiti più grande del box //definizione bound Bounds bounds = new BoundingBox(new Point3d(x,y,z),new Point3d(x+xdim,y+ydim,z+zdim); //bounds.transform(transf); box.setBounds(bounds); ma non ho traccia di questo Bound, usando il metodo intersect non riesco a trovarlo. Qualcuno di voi sa dove sbaglio? |
14-03-2009, 16:01 | #2 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Se non erro Box è centrato rispetto all'origine quindi la regione che lo include dovrebbe essere
lower = x - xdim / 2, y - ydim / 2, z - zdim / 2 upper = x + xdim / 2 ... eccetera A parte questo non vedo altro. Controlla magari la geometria che usi per l'intersezione. A me a volte capitava di usare un BoundinBox per verificare l'intersezione e non funzionava perchè invertivo upper con lower, creando un box che non riportava intersezioni.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
14-03-2009, 16:40 | #3 |
Junior Member
Iscritto dal: Feb 2009
Messaggi: 8
|
ho cambiato come segue
Codice:
Point3d a = new Point3d(x - xdim / 2, y - ydim / 2, z - zdim / 2); Point3d b = new Point3d(x + xdim / 2, y + ydim / 2, z +zdim / 2); Bounds bounds = new BoundingBox(a,b); Quando imposto box.setBoundsAutoCompute(true); riesco a trovare il punto di intersezione col Bound ,quindi penso di sbagliare in altro. Non esiste nessun modo per vedere come vengono disegnati i Bound? Ultima modifica di mauriziop81 : 14-03-2009 alle 16:43. |
14-03-2009, 20:07 | #4 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Non c'è un modo per disegnare i bounds. Dovresti creare un quadArray a partire dal bounds. Prova a stampare il "suo" bounds e il tuo con System.out.println. Dovrebbe darti il punto minimo e massimo di entrambi. Magari da lì si capisce dove sia la stranezza.
Potrebbe essere una questione di trasformazioni. Tieni conto che se "muovi" il nodo a cui è collegata il primitivo il suo bounds resta fermo.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
14-03-2009, 22:49 | #5 |
Junior Member
Iscritto dal: Feb 2009
Messaggi: 8
|
ho disegnato due sfere con le cordinate dei due punti calcolati per il BoundigBox ed effettivamente si visualizzano rispettivamente uno nel angolo basso e l'atro nell'angolo più alto.
E come se non mi trovassi con l'unità di misura..perchè se comincio ad aumentare i valori dell'angolo più grande comincia intersecare il Baound ,non per tutta la superficie del cubo ma solo per un pezzetto |
14-03-2009, 23:52 | #6 |
Junior Member
Iscritto dal: Feb 2009
Messaggi: 8
|
ma è possibile sapere se l'oggeto collide con il cubo e non con il suo Bounds?
|
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:47.