Bonjour tout le monde
J'ai créer un environnement java3d avec plusieurs sphère et j'aimerais pouvoir centrer la vue sur une de ces sphère. J'ai donc créer une classe ViewGraph qui me permet premièrement de créer la vue et deuxièmement de centrer la vue sur un point (le centre d'une de mes spheres).
Voilà le code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
 
import javax.media.j3d.BoundingLeaf;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.PhysicalBody;
import javax.media.j3d.PhysicalEnvironment;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.media.j3d.View;
import javax.media.j3d.ViewPlatform;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;
 
import com.sun.j3d.utils.behaviors.keyboard.KeyNavigatorBehavior;
 
public class ViewGraph{
 
		private BranchGroup viewBranch ;
		private TransformGroup viewXfmGroup;
 
		public ViewGraph (Canvas3D c){
		viewBranch = new BranchGroup();
		Transform3D viewXfm=new Transform3D();
		viewXfm.set(new Vector3f(0.0f,0.0f,10.0f));
		viewXfmGroup =new TransformGroup(viewXfm);
		viewXfmGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
		viewXfmGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
 
		BoundingSphere movingBounds=new BoundingSphere(new Point3d(0.0,0.0,0.0),100.0);
		BoundingLeaf boundLeaf = new BoundingLeaf(movingBounds);
 
		ViewPlatform myViewPlatform=new ViewPlatform();
		viewXfmGroup.addChild(boundLeaf);
		PhysicalBody myBody=new PhysicalBody();
		PhysicalEnvironment myEnvironment = new PhysicalEnvironment();
		viewXfmGroup.addChild(myViewPlatform);
		viewBranch.addChild(viewXfmGroup);
		View myView=new View();
		myView.addCanvas3D(c);
		myView.attachViewPlatform(myViewPlatform);
		myView.setPhysicalBody(myBody);
		myView.setPhysicalEnvironment(myEnvironment);
 
		KeyNavigatorBehavior keyNav=new KeyNavigatorBehavior(viewXfmGroup);
		keyNav.setSchedulingBounds(movingBounds);
		viewBranch.addChild(keyNav);
		}
 
		public BranchGroup getViewBranch(){
			return viewBranch;
		}
 
		public void centerViewOn(Point3d Pt){
			BoundingSphere mybounds =(BoundingSphere)viewBranch.getBounds();
			double t[]=new double[3];
			mybounds.getCenter(Pt);
			Pt.get(t);
 
			/* we center the camera on the point */
			TransformGroup cameraPosition=viewXfmGroup;
 
			Transform3D trans =new Transform3D();
			trans.setTranslation(new Vector3f((float)t[0],(float)t[1],(float)t[2]+(float) mybounds.getRadius()*3));
			cameraPosition.setTransform(trans);
 
		}
}

Le problème est que sa ne fait absolument pas ce que je veux...
Si quelqu'un pouvait m'aider se serait super.