import javax.media.j3d.*; import javax.vecmath.*; public class BasicUniverse extends Object { VirtualUniverse universe; Locale locale; BranchGroup viewPlatformRoot; TransformGroup viewPlatformTransform; ViewPlatform viewPlatform; View view; Canvas3D canvas; float zViewDistance; public BasicUniverse(Canvas3D extCanvas, float zViewDist) { canvas = extCanvas; zViewDistance = zViewDist; initUniverse(); } private void initUniverse() { universe = new VirtualUniverse(); locale = new Locale(universe); viewPlatformRoot = new BranchGroup(); viewPlatformTransform = new TransformGroup(); viewPlatformTransform.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); viewPlatformTransform.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); setupViewPlatform(); viewPlatformRoot.addChild(viewPlatformTransform); setupView(canvas); view.attachViewPlatform(viewPlatform); locale.addBranchGraph(viewPlatformRoot); } private void setupView(Canvas3D extCanvas) { view = new View(); view.addCanvas3D(extCanvas); view.setPhysicalBody(new PhysicalBody()); view.setPhysicalEnvironment(new PhysicalEnvironment()); // Use the virtual eye coordinate system for clipping view.setFrontClipPolicy(View.VIRTUAL_EYE); view.setBackClipPolicy(View.VIRTUAL_EYE); } private void setupViewPlatform() { viewPlatform = new ViewPlatform(); setViewingDistance(zViewDistance); viewPlatformTransform.addChild(viewPlatform); } public void setViewingDistance(float viewDistance) { zViewDistance = viewDistance; Transform3D transform = new Transform3D(); transform.set(new Vector3f(0.0f, 0.0f, zViewDistance)); viewPlatformTransform.setTransform(transform); } public void addBranchGraph(BranchGroup bg) { locale.addBranchGraph(bg); } public TransformGroup getViewPlatformTransform() { return viewPlatformTransform; } public View getView() { return view; } }