PDA

View Full Version : [Java 3D] BoundingBox


mauriziop81
14-03-2009, 15:05
Salve,

qualcuno sa come dare al BoundingBox le stesse dimensioni di un Box?io ho provato nel seguente modo:



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?

PGI-Bis
14-03-2009, 16:01
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.

mauriziop81
14-03-2009, 16:40
ho cambiato come segue


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);


ancora non va.
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?

PGI-Bis
14-03-2009, 20:07
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.

mauriziop81
14-03-2009, 22:49
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:muro:

mauriziop81
14-03-2009, 23:52
ma è possibile sapere se l'oggeto collide con il cubo e non con il suo Bounds?