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