private void createLoaderSceneGraph() { loaderBranchGroup = new BranchGroup(); loaderBranchGroup.setCapability(BranchGroup.ALLOW_DETACH); loaderTransformGroup = new TransformGroup(); loaderTransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); addLights(loaderBranchGroup); Appearance loaderAppearance = new Appearance(); Color3f loaderColor = new Color3f(0.5f, 0.5f, 0.5f); Material loaderMaterial = new Material(loaderColor, new Color3f(), loaderColor, loaderColor, 10); loaderMaterial.setLightingEnable(true); loaderAppearance.setMaterial(loaderMaterial); for (int i = 0; i < 20; i++) { Transform3D translate3d = new Transform3D(); translate3d.setTranslation(new Vector3f(0f, 0f, 0.9f)); TransformGroup translate = new TransformGroup(translate3d); Transform3D rotationY3d = new Transform3D(); rotationY3d.rotY((Math.PI * 2 * i) / 20); TransformGroup rotateY = new TransformGroup(rotationY3d); rotateY.addChild(translate); Box box = new Box(0.1f, 0.1f, 0.1f, loaderAppearance); translate.addChild(box); loaderTransformGroup.addChild(rotateY); } loaderBranchGroup.addChild(loaderTransformGroup); sceneBranchGroup.addChild(loaderBranchGroup); }
public BranchGroup createSceneGraph() { // Create the root of the branch graph BranchGroup objRoot = new BranchGroup(); // Create the TransformGroup node and initialize it to the // identity. Enable the TRANSFORM_WRITE capability so that // our behavior code can modify it at run time. Add it to // the root of the subgraph. TransformGroup objTrans = new TransformGroup(); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objRoot.addChild(objTrans); // Create a simple Shape3D node; add it to the scene graph. objTrans.addChild(new ColorCube(0.4)); // Create a new Behavior object that will perform the // desired operation on the specified transform and add // it into the scene graph. Transform3D yAxis = new Transform3D(); Alpha rotationAlpha = new Alpha(-1, 4000); RotationInterpolator rotator = new RotationInterpolator(rotationAlpha, objTrans, yAxis, 0.0f, (float) Math.PI * 1.0f); BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0); rotator.setSchedulingBounds(bounds); objRoot.addChild(rotator); // Have Java 3D perform optimizations on this scene graph. objRoot.compile(); return objRoot; }
// In this method, the objects for the scene are generated and added to // the SimpleUniverse. public void createSceneGraph(SimpleUniverse su) { // *** The root of the graph containing the scene (with a cube and a sphere). *** BranchGroup theScene = new BranchGroup(); // Generate an Appearance. Color3f ambientColourShaded = new Color3f(0.0f, 0.4f, 0.4f); Color3f emissiveColourShaded = new Color3f(0.0f, 0.0f, 0.0f); Color3f diffuseColourShaded = new Color3f(0.0f, 0.7f, 0.7f); Color3f specularColourShaded = new Color3f(0.0f, 0.5f, 0.5f); float shininessShaded = 20.0f; Appearance shadedApp = new Appearance(); shadedApp.setMaterial( new Material( ambientColourShaded, emissiveColourShaded, diffuseColourShaded, specularColourShaded, shininessShaded)); float r = 0.3f; // The radius of the sphere. float boxHL = 0.7f * r; // Half the vertex length of the cube. float shift = 3.0f * r; // Distance between cube and sphere. // *** The sphere and its transformation group *** Sphere s = new Sphere(r, Sphere.GENERATE_NORMALS, 100, shadedApp); Transform3D tfSphere = new Transform3D(); tfSphere.setTranslation(new Vector3f(-0.95f + r, 0.0f, 0.0f)); TransformGroup tgSphere = new TransformGroup(tfSphere); tgSphere.addChild(s); theScene.addChild(tgSphere); // *** The cube and its transformation group *** Box b2 = new Box(boxHL, boxHL, boxHL, shadedApp); Transform3D tfBox2 = new Transform3D(); tfBox2.setTranslation(new Vector3f(-0.95f + r + shift, 0.0f, 0.0f)); Transform3D rotation = new Transform3D(); rotation.rotY(Math.PI / 4); Transform3D rotationX = new Transform3D(); rotationX.rotX(Math.PI / 6); rotation.mul(rotationX); tfBox2.mul(rotation); TransformGroup tgBox2 = new TransformGroup(tfBox2); tgBox2.addChild(b2); theScene.addChild(tgBox2); // Generate a white background. Background bg = new Background(new Color3f(1.0f, 1.0f, 1.0f)); BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), Double.MAX_VALUE); bg.setApplicationBounds(bounds); theScene.addChild(bg); theScene.compile(); // Add the scene to the universe. su.addBranchGraph(theScene); }
/** @see boogiepants.model.Displayable#display() */ public Node display() { Appearance a = new Appearance(); Group shape = new Sphere(.15f, a); a.setColoringAttributes(new ColoringAttributes(.5f, .5f, 1f, ColoringAttributes.NICEST)); a.setTransparencyAttributes(new TransparencyAttributes(TransparencyAttributes.NICEST, .3f)); Transform3D t = new Transform3D(); if (loPoint == null) { loPoint = new Point3d(0d, 0d, 0d); } t.set(new Vector3d(loPoint.x, loPoint.y, loPoint.z)); transformGroupLo = new TransformGroup(); transformGroupLo.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); transformGroupLo.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); transformGroupLo.setTransform(t); transformGroupLo.addChild(shape); loEndpoint = endpoint(loPoint, transformGroupLo); Shape3D geom = (Shape3D) shape.getChild(0); geom.setUserData(loEndpoint); a = new Appearance(); shape = new Sphere(.15f, a); a.setColoringAttributes(new ColoringAttributes(1f, .5f, .5f, ColoringAttributes.NICEST)); a.setTransparencyAttributes(new TransparencyAttributes(TransparencyAttributes.NICEST, .3f)); t = new Transform3D(); if (hiPoint == null) { hiPoint = new Point3d(0d, 0d, 0d); } t.set(new Vector3d(hiPoint.x, hiPoint.y, hiPoint.z)); transformGroupHi = new TransformGroup(); transformGroupHi.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); transformGroupHi.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); transformGroupHi.setTransform(t); transformGroupHi.addChild(shape); hiEndpoint = endpoint(hiPoint, transformGroupHi); geom = (Shape3D) shape.getChild(0); geom.setUserData(hiEndpoint); container = new BranchGroup(); container.setCapability(BranchGroup.ALLOW_DETACH); container.addChild(transformGroupHi); container.addChild(transformGroupLo); stickGroup = BoogiepantsDisplayWindow.getInstance().getStickGroup(); behavior = new ScaleInstrumentBehavior(oscaddress, loPoint, hiPoint, stickGroup); container.addChild(behavior); BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0); behavior.setSchedulingBounds(bounds); editGroup = new BranchGroup(); editGroup.setCapability(BranchGroup.ALLOW_DETACH); editGroup.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE); editGroup.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND); container.addChild(editGroup); behavior.computeLineLen(); return container; }
// In this method, the objects for the scene are generated and added to // the SimpleUniverse. public void createSceneGraph(SimpleUniverse su) { // Create the root of the branch group for the scene. BranchGroup theScene = new BranchGroup(); // Generate an Appearance for the sphere. Color3f ambientColourSphere = new Color3f(0.2f, 0.2f, 0.2f); Color3f emissiveColourSphere = new Color3f(0.0f, 0.0f, 0.0f); Color3f diffuseColourSphere = new Color3f(0.6f, 0.6f, 0.6f); Color3f specularColourSphere = new Color3f(0.5f, 0.5f, 0.5f); float shininessSphere = 20.0f; Appearance sphereApp = new Appearance(); sphereApp.setMaterial( new Material( ambientColourSphere, emissiveColourSphere, diffuseColourSphere, specularColourSphere, shininessSphere)); // n spheres with radius r will be shown. int n = 5; float r = 0.15f; float shift = 2 * r + 0.05f; // The distance between the centres of the spheres. // Arrays for the sphere, their transformations and their transformation groups // transformation groups (for positioning). Sphere[] spheres = new Sphere[n]; TransformGroup[] tg = new TransformGroup[n]; Transform3D[] tf = new Transform3D[n]; // Generate the sphere, their transformations and their // transformation groups. Add everyting to the scene. for (int i = 0; i < n; i++) { spheres[i] = new Sphere(r, Sphere.GENERATE_NORMALS, 4 + i * i * i, sphereApp); tf[i] = new Transform3D(); tf[i].setTranslation(new Vector3f(-0.95f + r + shift * i, 0.0f, 0.0f)); tg[i] = new TransformGroup(tf[i]); tg[i].addChild(spheres[i]); theScene.addChild(tg[i]); } // Generate a white background. Background bg = new Background(new Color3f(1.0f, 1.0f, 1.0f)); BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 1000.0); bg.setApplicationBounds(bounds); theScene.addChild(bg); theScene.compile(); // Add the scene to the universe. su.addBranchGraph(theScene); }
public void init() { // initialize our SimpleUniverse -> u u = new SimpleUniverse(this); // set viewing platform (the camera) vp = u.getViewingPlatform(); view = u.getViewer().getView(); view.setScreenScalePolicy(View.SCALE_EXPLICIT); view.setBackClipPolicy(View.VIRTUAL_EYE); view.setFrontClipPolicy(View.VIRTUAL_EYE); view.setBackClipDistance(FARTHEST); view.setFrontClipDistance(CLOSEST); fieldOfView = view.getFieldOfView(); view.setDepthBufferFreezeTransparent(false); cameraTG = vp.getViewPlatformTransform(); cameraT3D = new Transform3D(); cameraTG.getTransform(cameraT3D); // initialize root of our scene -> BranchGroup kainBG and TransformGroup kainTG kainBG = new BranchGroup(); kainBG.setCapability(BranchGroup.ALLOW_CHILDREN_READ); kainBG.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE); kainBG.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND); background = new Background(new Color3f(0, 0, 0)); background.setCapability(Background.ALLOW_COLOR_READ); background.setCapability(Background.ALLOW_COLOR_WRITE); background.setCapability(Background.ALLOW_IMAGE_READ); background.setCapability(Background.ALLOW_IMAGE_WRITE); background.setApplicationBounds(new BoundingSphere(new Point3d(0, 0, 0), FARTHEST)); background.setImageScaleMode(Background.SCALE_FIT_ALL); kainBG.addChild(background); kainTG = new TransformGroup(); kainTG.setCapability(TransformGroup.ALLOW_CHILDREN_EXTEND); kainTG.setCapability(TransformGroup.ALLOW_CHILDREN_WRITE); kainBG.addChild(kainTG); // branch for axis lines axisBG = new BranchGroup(); axisBG.setCapability(BranchGroup.ALLOW_DETACH); axisLines = createAxisLines(); axisBG.addChild(axisLines); // branch for ground groundBG = new BranchGroup(); groundBG.setCapability(BranchGroup.ALLOW_DETACH); ground = createGround(); groundBG.addChild(ground); kainBG.compile(); u.addBranchGraph(kainBG); currentAppearance = Appearance3DChangerCookie.Appearance.WIREFRAME; }
private BranchGroup createSceneGraph() { BranchGroup root = new BranchGroup(); root.setCapability(BranchGroup.ALLOW_DETACH); createSpinTG(); root.addChild(spin); SimpleBehavior myRotationBehavior = new SimpleBehavior(spin); myRotationBehavior.setSchedulingBounds(new BoundingSphere()); root.addChild(myRotationBehavior); KeyNavigatorBehavior behavior = new KeyNavigatorBehavior(spin); BoundingSphere bounds = new BoundingSphere(); behavior.setSchedulingBounds(bounds); root.addChild(behavior); // mouse-directed rotation MouseRotate rotator = new MouseRotate(spin); rotator.setSchedulingBounds(bounds); root.addChild(rotator); // mouse-based translation MouseTranslate translator = new MouseTranslate(spin); translator.setSchedulingBounds(bounds); root.addChild(translator); // mouse-directed zoom MouseZoom zoom = new MouseZoom(); zoom.setSchedulingBounds(bounds); root.addChild(zoom); // make background blue Background background = new Background(Colors.blue); background.setApplicationBounds(bounds); root.addChild(background); // light AmbientLight light = new AmbientLight(true, new Color3f(Color.red)); light.setInfluencingBounds(bounds); root.addChild(light); PointLight ptlight = new PointLight(new Color3f(Color.red), new Point3f(0f, 0f, -5f), new Point3f(1f, 0f, 0f)); ptlight.setInfluencingBounds(bounds); root.addChild(ptlight); PointLight ptlight2 = new PointLight( new Color3f(Color.orange), new Point3f(-2f, 2f, 2f), new Point3f(1f, 0f, 0f)); ptlight2.setInfluencingBounds(bounds); root.addChild(ptlight2); // let Java3d perform optimization on this scene graph root.compile(); return root; }
public void createSceneGraph(DrawModel drawing) { // Branch group which can be deattached for changing scene; view = new BranchGroup(); view.setCapability(BranchGroup.ALLOW_DETACH); // BranchGroup for rotation rotation = new TransformGroup(); rotation.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); rotation.setCapability(TransformGroup.ALLOW_CHILDREN_WRITE); view.addChild(rotation); bounds = new BoundingSphere(); DirectionalLight lightD = new DirectionalLight(); lightD.setDirection(new Vector3f(0.0f, 0.0f, -0.7f)); lightD.setInfluencingBounds(bounds); view.addChild(lightD); AmbientLight lightA = new AmbientLight(); lightA.setInfluencingBounds(bounds); view.addChild(lightA); Background background = new Background(); background.setColor(1.0f, 1.0f, 1.0f); background.setApplicationBounds(bounds); view.addChild(background); // MouseRotate myMouseRotate = new MouseRotate(); // myMouseRotate.setTransformGroup(rotation); // myMouseRotate.setSchedulingBounds(bounds); // root.addChild(myMouseRotate); // // MouseTranslate myMouseTranslate = new MouseTranslate(); // myMouseTranslate.setTransformGroup(rotation); // myMouseTranslate.setSchedulingBounds(new BoundingSphere()); // root.addChild(myMouseTranslate); // MouseZoom myMouseZoom = new MouseZoom(); // myMouseZoom.setTransformGroup(rotation); // myMouseZoom.setSchedulingBounds(new BoundingSphere()); // root.addChild(myMouseZoom); // PickMouse pick = new PickMouse(this, view, bounds); view.addChild(pick); addKeyListener(new KeyListener()); angleV = (float) Math.PI / 4; angleH = (float) Math.PI / 5; draw(drawing); zoomAll(); }
private void createSceneGraph() throws PluginException, IfcModelInterfaceException { buildingTransformGroup = new TransformGroup(); Set<Class<? extends IfcRoot>> classesToConvert = new HashSet<Class<? extends IfcRoot>>(); classesToConvert.add(IfcWall.class); classesToConvert.add(IfcWallStandardCase.class); classesToConvert.add(IfcWindow.class); classesToConvert.add(IfcOpeningElement.class); classesToConvert.add(IfcSlab.class); classesToConvert.add(IfcRoof.class); classesToConvert.add(IfcColumn.class); classesToConvert.add(IfcSpace.class); classesToConvert.add(IfcDoor.class); classesToConvert.add(IfcRailing.class); classesToConvert.add(IfcFurnishingElement.class); classesToConvert.add(IfcStair.class); classesToConvert.add(IfcBeam.class); classesToConvert.add(IfcFlowTerminalType.class); classesToConvert.add(IfcDistributionFlowElement.class); classesToConvert.add(IfcSite.class); // classesToConvert.add(IfcProxy.class); for (IdEObject idEObject : model.getValues()) { if (classesToConvert.contains(idEObject.eClass().getInstanceClass())) { setGeometry((IfcRoot) idEObject); } } buildingBranchGroup = new BranchGroup(); addLights(buildingBranchGroup); buildingBranchGroup.addChild(buildingTransformGroup); showLoader = false; sceneBranchGroup.removeChild(loaderBranchGroup); sharedGroup.addChild(buildingBranchGroup); // for (int x = 0; x < 5; x++) { // for (int y = 0; y < 5; y++) { Link link1 = new Link(sharedGroup); Transform3D t3d1 = new Transform3D(); // t3d1.setTranslation(new Vector3f(x * 20, y * 20, 0f)); BranchGroup x1 = new BranchGroup(); TransformGroup t1 = new TransformGroup(t3d1); x1.addChild(t1); t1.addChild(link1); sceneBranchGroup.addChild(x1); // } // } reInitView(); }
private void labelAxes() // Place numbers along the X- and Z-axes at the integer positions { Vector3d pt = new Vector3d(); for (int i = -FLOOR_LEN / 2; i <= FLOOR_LEN / 2; i++) { pt.x = i; floorBG.addChild(makeText(pt, "" + i)); // along x-axis } pt.x = 0; for (int i = -FLOOR_LEN / 2; i <= FLOOR_LEN / 2; i++) { pt.z = i; floorBG.addChild(makeText(pt, "" + i)); // along z-axis } } // end of labelAxes()
public BranchGroup createSceneGraph(URL url) { try { Loader loader = new com.sun.j3d.loaders.objectfile.ObjectFile(); Scene scene = loader.load(url); BranchGroup bg = scene.getSceneGroup(); System.out.println(bg); TransformGroup[] views = scene.getViewGroups(); if (views != null) { for (int i = 0; i < views.length; i++) { System.out.print(views[i]); } if (views.length > 0) viewStart = views[0]; } return bg; } catch (Exception ex) { // in case there was a problem, print the stack out ex.printStackTrace(); // System.out.println(ex); add("South", new Label(ex.toString())); System.out.println("URL: " + url); BranchGroup bg = new BranchGroup(); bg.addChild(new ColorCube()); System.out.println(bg); return bg; } }
private void loadSheep() { VrmlLoader loader = new VrmlLoader(); Scene myScene = null; try { myScene = loader.load("models" + File.separator + "Sheep.wrl"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IncorrectFormatException e) { e.printStackTrace(); } catch (ParsingErrorException e) { e.printStackTrace(); } BranchGroup bg = new BranchGroup(); TransformGroup offset = new TransformGroup(); Transform3D t3d = new Transform3D(); t3d.setRotation(new AxisAngle4d(1.0, 0.0, 0.0, Math.PI / 2)); t3d.setTranslation(new Vector3d(0.0, 0.0, 0.025)); offset.setTransform(t3d); bg.addChild(offset); offset.addChild(myScene.getSceneGroup()); sheepObject = new ModelObject(bg); viewer.addObject(sheepObject); }
/** set up canvas to display all faces. */ protected void setupWholeSphere() { if (allView && allGroup != null) allGroup.detach(); allGroup = new BranchGroup(); int nfaces = 12; try { theMap = theMap.regrade(nside); } catch (Exception e) { new Exception("Regrading failed", e); } // Find map min and max double min = theMap.getMin(); double max = theMap.getMax(); System.out.println("********** #Min(0)=" + min); System.out.println("********** #Max(0)=" + max); HealpixBase index = null; try { index = new HealpixBase(theMap.nside(), Scheme.NESTED); } catch (Exception e) { e.printStackTrace(); } for (int f = 0; f < nfaces; f++) { HealSphere face = new DataSphere(f, theMap, 0, min, max, index); setAppearance(face); allGroup.addChild(face); } allGroup.setCapability(BranchGroup.ALLOW_DETACH); objTrans.addChild(allGroup); if (!allView) allGroup.detach(); }
/** * Ad block with default size of 50cm x 50cm x 50cm * * @param material - name of material. Must be rom World._availableMaterials list. * @param startCoordinates - given in cells unit */ public void addNewBlock(Model.Material material, Vector3d startCoordinates, Point3d blocSize) { BranchGroup childBG = new BranchGroup(); TransformGroup tg = new TransformGroup(); Transform3D transform = new Transform3D(); Vector3d vector = new Vector3d(startCoordinates.x, startCoordinates.y, startCoordinates.z); transform.setTranslation(vector); tg.setTransform(transform); Appearance app = new Appearance(); Color3f cellColor = new Color3f(); // float transparency = 0.8f; cellColor = material.get_color(); float transparency = material.get_transparency(); ColoringAttributes coloringAttributes = new ColoringAttributes(cellColor, ColoringAttributes.NICEST); app.setColoringAttributes(coloringAttributes); app.setTransparencyAttributes( new TransparencyAttributes(TransparencyAttributes.FASTEST, transparency)); tg.addChild( new Box( (float) (blocSize.x / 2), (float) (blocSize.z / 2), (float) (blocSize.y / 2), Box.ENABLE_APPEARANCE_MODIFY, app)); tg.getChild(0).setCapability(Box.ENABLE_APPEARANCE_MODIFY); childBG.addChild(tg); _startsOfBlocks.add(vector); childBG.setCapability(BranchGroup.ALLOW_DETACH); _contents.addChild(childBG); }
public void setGround(boolean groundOn) { if (!groundOn) { kainBG.removeChild(groundBG); groundState = false; } else { kainBG.addChild(groundBG); groundState = true; } }
public void setAxisLines(boolean axisOn) { if (!axisOn) { kainBG.removeChild(axisBG); axisState = false; } else { kainBG.addChild(axisBG); axisState = true; } }
/** * Simple algorithm to add or remove an edge from the selection Ideas: 1. Use one shape per quad * => easy, but can become very fast too big to fit in memory. => pb: flicker when adding / * removing because the scene is detached 2. Use only one shape, modify geometry TODO: pre-create * an empty shape to avoid initial flicker * * @param on * @param p * @param u * @param v * @param groupIdx2 */ protected void toggleSelectedEdge(boolean on, SelectionEdge se) { if (on) { // add the given edge to the list if (edgeSelection.contains(se)) return; // already in edgeSelection.add(se); } else { // remove the given edge from the list if (!edgeSelection.contains(se)) return; // not present edgeSelection.remove(se); if (edgeSelection.size() == 0) { LineArray la = (LineArray) edgeSelectionShape.getGeometry(); la.setValidVertexCount(0); return; } } // Use in-memory arrays instead of NIO because edgeSelection should not // be too big // => faster LineArray la = new LineArray( edgeSelection.size() * 2, GeometryArray.COORDINATES | GeometryArray.COLOR_3 | GeometryArray.BY_REFERENCE); double[] coords = new double[edgeSelection.size() * 2 * 3]; float[] colors = new float[edgeSelection.size() * 2 * 3]; for (int i = 0; i < coords.length; i += 6) { SelectionEdge edge = edgeSelection.get(i / 6); edge.updateCoords(grid, coords, i); edge.updateColors(colors, i); } la.setCoordRefDouble(coords); la.setColorRefFloat(colors); la.setCapability(GeometryArray.ALLOW_COUNT_WRITE); // update edgeSelection Shape with the new edgeSelection list if (edgeSelectionShape == null) { Appearance a = new Appearance(); // PolygonAttributes pa = new // PolygonAttributes(PolygonAttributes.POLYGON_LINE, // PolygonAttributes.CULL_NONE, 0); // pa.setPolygonOffset(1); // above edges // pa.setPolygonOffsetFactor(1); LineAttributes lat = new LineAttributes(); lat.setLineWidth(2.0f); lat.setLineAntialiasingEnable(true); a.setLineAttributes(lat); // a.setPolygonAttributes(pa); edgeSelectionShape = new Shape3D(la, a); edgeSelectionShape.setUserData(this); edgeSelectionShape.setPickable(false); edgeSelectionShape.setCapability(Shape3D.ALLOW_GEOMETRY_WRITE); edgeSelectionShape.setCapability(Shape3D.ALLOW_GEOMETRY_READ); BranchGroup bg = new BranchGroup(); bg.addChild(edgeSelectionShape); addChild(bg); } else edgeSelectionShape.setGeometry(la); }
private void addLights(BranchGroup transformGroup) { BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100000.0); AmbientLight ambientLight = new AmbientLight(new Color3f(0.5f, 0.5f, 0.5f)); ambientLight.setInfluencingBounds(bounds); transformGroup.addChild(ambientLight); Color3f lightColor = new Color3f(1.0f, 1.0f, 1.0f); Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f); DirectionalLight light1 = new DirectionalLight(true, lightColor, light1Direction); light1.setInfluencingBounds(bounds); transformGroup.addChild(light1); light1Direction.negate(); DirectionalLight light2 = new DirectionalLight(true, lightColor, light1Direction); light2.setInfluencingBounds(bounds); transformGroup.addChild(light2); }
public BranchGroup createSceneGraph() { BranchGroup root = new BranchGroup(); // Create the root of the branch graph if (geometry_ == null) { int NUM_PARTICLES = 10; geometry_ = new Java3DParticlesGeometry(NUM_PARTICLES); } root.addChild(createPointShape(geometry_)); return root; }
public static void main(String args[]) { JFrame frame = new JFrame("Box and Sphere"); GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas = new Canvas3D(config); canvas.setSize(400, 400); SimpleUniverse universe = new SimpleUniverse(canvas); universe.getViewingPlatform().setNominalViewingTransform(); BranchGroup group = new BranchGroup(); group.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND); // group.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND); universe.addBranchGraph(group); frame.setSize(500, 400); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(new BorderLayout()); frame.getContentPane().add(canvas, BorderLayout.CENTER); frame.setVisible(true); Sphere sphere = new Sphere(1.1f, Sphere.GENERATE_NORMALS | Sphere.GENERATE_TEXTURE_COORDS, null); BranchGroup b = new BranchGroup(); b.addChild(sphere); group.addChild(b); { Sphere sphere2 = new Sphere(1.0f, Sphere.GENERATE_NORMALS | Sphere.GENERATE_TEXTURE_COORDS, null); b = new BranchGroup(); b.addChild(sphere2); Util3D.enablePicking(b); group.addChild(b); } }
public void draw(DrawModel d) { view.detach(); rotation.removeAllChildren(); drawModel = d; if (drawModel.getPicture() == null) return; Integer i = 0; for (VisualShape v : drawModel.getPicture()) { TransformGroup shapeGroup = new TransformGroup(); rotation.addChild(shapeGroup); BranchGroup faces = v.getFaces2(BranchGroup.class); BranchGroup edges = v.getEdges2(BranchGroup.class); BranchGroup text = v.getText2(BranchGroup.class); if (faces == null && edges == null) continue; i++; if (faces != null) { faces.detach(); rotation.addChild(faces); faces.setPickable(true); faces.setUserData(v); faces.setCapability(TransformGroup.ENABLE_PICK_REPORTING); faces.setName(i.toString()); } if (edges != null) { edges.detach(); rotation.addChild(edges); edges.setPickable(true); edges.setUserData(v); edges.setCapability(TransformGroup.ENABLE_PICK_REPORTING); edges.setName(i.toString()); } if (text != null) { text.detach(); rotation.addChild(text); text.setPickable(false); if (text instanceof BranchGroup) { BranchGroup bg = (BranchGroup) text; for (int j = 0; j < bg.numChildren(); j++) { Node child = bg.getChild(j); if (child instanceof TransformGroup) { TransformGroup tg = (TransformGroup) child; tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); tg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); textLabels.add(tg); } } } // edges.setUserData(v); // edges.setCapability(TransformGroup.ENABLE_PICK_REPORTING); // edges.setName(i.toString()); } } root.addChild(view); }
public void showCategory(String categoryName) { if (displayedMenuItems.numChildren() != 0) displayedMenuItems.removeAllChildren(); BranchGroup category = menuBranches.get(categoryName); displayedMenuItems.addChild(category); Enumeration<MenuItem> children = category.getAllChildren(); while (children.hasMoreElements()) { MenuItem child = (MenuItem) children.nextElement(); child.armBehavior(); } }
private BranchGroup setApperancePackInBranchGroup(Shape3D shape, Node handle) { shape.setUserData(this); shape.setCapability(Shape3D.ALLOW_APPEARANCE_WRITE); BranchGroup bg = new BranchGroup(); bg.setCapability(BranchGroup.ALLOW_DETACH); bg.addChild(handle); bg.compile(); return bg; }
public MyMousePickBehavior(Canvas3D canvas, BranchGroup root, Bounds bounds, JTextArea jta) { super(canvas, root, bounds); this.jta = jta; this.setSchedulingBounds(bounds); root.addChild(this); pickCanvas.setMode(PickTool.GEOMETRY); appear = new Appearance(); mater = new Material(); mater.setDiffuseColor(new Color3f(Color.red)); appear.setMaterial(mater); }
public ObjectViewer(URL url) { setLayout(new BorderLayout()); Canvas3D canvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration()); add("Center", canvas3D); BoundingSphere bounds = new BoundingSphere(new Point3d(), 1000); BranchGroup root = new BranchGroup(); BranchGroup scene = createSceneGraph(url); scene.setBoundsAutoCompute(true); System.out.println(scene.getBounds()); BoundingSphere sceneBounds = new BoundingSphere(scene.getBounds()); SimpleUniverse univ = new SimpleUniverse(canvas3D); ViewingPlatform view = univ.getViewingPlatform(); view.setNominalViewingTransform(); Transform3D t = new Transform3D(); TransformGroup viewTransform = view.getViewPlatformTransform(); t.set(new Vector3d(0, 0, 3 * sceneBounds.getRadius())); viewTransform.setTransform(t); BranchGroup lights = new BranchGroup(); Light light = new AmbientLight(); light.setInfluencingBounds(bounds); lights.addChild(light); light = new DirectionalLight(); light.setInfluencingBounds(bounds); lights.addChild(light); root.addChild(lights); TransformGroup tg = new TransformGroup(); tg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); tg.addChild(scene); root.addChild(tg); MouseRotate mouse = new MouseRotate(); mouse.setTransformGroup(tg); mouse.setSchedulingBounds(bounds); root.addChild(mouse); MouseZoom mousezoom = new MouseZoom(); mousezoom.setTransformGroup(tg); mousezoom.setSchedulingBounds(bounds); root.addChild(mousezoom); Background background = new Background(1, 1, 1); background.setApplicationBounds(bounds); root.addChild(background); root.compile(); univ.addBranchGraph(root); }
// Some light is added to the scene here. public void addLight(SimpleUniverse su) { BranchGroup bgLight = new BranchGroup(); BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), Double.MAX_VALUE); // Directional light. Color3f lightColour = new Color3f(1.0f, 1.0f, 1.0f); Vector3f lightDir = new Vector3f(1.0f, -1.0f, -1.0f); DirectionalLight light = new DirectionalLight(lightColour, lightDir); light.setInfluencingBounds(bounds); bgLight.addChild(light); // Ambient light. Color3f ambientLightColour = new Color3f(0.5f, 0.5f, 0.5f); AmbientLight ambLight = new AmbientLight(ambientLightColour); ambLight.setInfluencingBounds(bounds); bgLight.addChild(ambLight); su.addBranchGraph(bgLight); }
/** * Simple algorithm to add or remove a quad from the selection Ideas: 1. Use one shape per quad => * easy, but can become very fast too big to fit in memory. => pb: flicker when adding / removing * because the scene is detached 2. Use only one shape, modify geometry TODO: pre-create an empty * shape to avoid initial flicker * * @param on * @param p * @param u * @param v * @param groupIdx2 */ protected void toggleSelectedQuad(boolean on, SelectionQuad sq) { LOGGER.finest("on=" + on + " selectionQuad=" + sq); if (on) { // add the given quad to the list if (selection.contains(sq)) return; // already in selection.add(sq); } else { // remove the given quad from the list if (!selection.contains(sq)) return; // not present selection.remove(sq); if (selection.size() == 0) { QuadArray qa = (QuadArray) selectionShape.getGeometry(); qa.setValidVertexCount(0); return; } } // Use in-memory arrays instead of NIO because selection should not be // too big // => faster QuadArray qa = new QuadArray( selection.size() * 4, GeometryArray.COORDINATES | GeometryArray.COLOR_3 | GeometryArray.BY_REFERENCE); float[] coords = new float[selection.size() * 4 * 3]; float[] colors = new float[selection.size() * 4 * 3]; for (int i = 0; i < coords.length; i += 12) { SelectionQuad quad = selection.get(i / 12); quad.updateCoords(grid, coords, i); quad.updateColors(colors, i); } qa.setCoordRefFloat(coords); qa.setColorRefFloat(colors); qa.setCapability(GeometryArray.ALLOW_COUNT_WRITE); // update selection Shape with the new selection list if (selectionShape == null) { Appearance a = new Appearance(); PolygonAttributes pa = new PolygonAttributes(PolygonAttributes.POLYGON_FILL, PolygonAttributes.CULL_NONE, 0); pa.setPolygonOffset(0.5f); // between faces and edges pa.setPolygonOffsetFactor(0.5f); a.setPolygonAttributes(pa); selectionShape = new Shape3D(qa, a); selectionShape.setUserData(this); selectionShape.setPickable(false); selectionShape.setCapability(Shape3D.ALLOW_GEOMETRY_WRITE); selectionShape.setCapability(Shape3D.ALLOW_GEOMETRY_READ); BranchGroup bg = new BranchGroup(); bg.addChild(selectionShape); addChild(bg); } else selectionShape.setGeometry(qa); }
public CheckerFloor() // create tiles, add origin marker, then the axes labels { ArrayList blueCoords = new ArrayList(); ArrayList greenCoords = new ArrayList(); floorBG = new BranchGroup(); boolean isBlue; for (int z = -FLOOR_LEN / 2; z <= (FLOOR_LEN / 2) - 1; z++) { isBlue = (z % 2 == 0) ? true : false; // set colour for new row for (int x = -FLOOR_LEN / 2; x <= (FLOOR_LEN / 2) - 1; x++) { if (isBlue) createCoords(x, z, blueCoords); else createCoords(x, z, greenCoords); isBlue = !isBlue; } } floorBG.addChild(new ColouredTiles(blueCoords, blue)); floorBG.addChild(new ColouredTiles(greenCoords, green)); addOriginMarker(); labelAxes(); } // end of CheckerFloor()
public BranchGroup addTriangle(Simplex simplex, Color3f color) { int[] p = simplex.getPoints(); BranchGroup bgTriangle = new BranchGroup(); bgTriangle.setCapability(BranchGroup.ALLOW_DETACH); javax.vecmath.Point3d[] coords = new javax.vecmath.Point3d[6]; TriangleArray ta = new TriangleArray(6, TriangleArray.COORDINATES | TriangleArray.COLOR_3); Point3d p0 = (Point3d) complex.getPoints().get(simplex.getPoints()[0]); Point3d p1 = (Point3d) complex.getPoints().get(simplex.getPoints()[1]); Point3d p2 = (Point3d) complex.getPoints().get(simplex.getPoints()[2]); coords[0] = new javax.vecmath.Point3d(p0.getX(), p0.getY(), p0.getZ()); coords[1] = new javax.vecmath.Point3d(p1.getX(), p1.getY(), p1.getZ()); coords[2] = new javax.vecmath.Point3d(p2.getX(), p2.getY(), p2.getZ()); coords[3] = new javax.vecmath.Point3d(p0.getX(), p0.getY(), p0.getZ()); coords[4] = new javax.vecmath.Point3d(p2.getX(), p2.getY(), p2.getZ()); coords[5] = new javax.vecmath.Point3d(p1.getX(), p1.getY(), p1.getZ()); ta.setCoordinates(0, coords); Color3f[] colors = new Color3f[6]; for (int i = 0; i < 3; i++) colors[i] = Colors.black; for (int i = 3; i < 6; i++) colors[i] = Colors.yellow; ta.setColors(0, colors); Appearance ap = new Appearance(); ap.setCapability(Appearance.ALLOW_LINE_ATTRIBUTES_READ); ap.setCapability(Appearance.ALLOW_LINE_ATTRIBUTES_WRITE); ap.setCapability(Appearance.ALLOW_COLORING_ATTRIBUTES_READ); ap.setCapability(Appearance.ALLOW_COLORING_ATTRIBUTES_WRITE); ap.setLineAttributes(new LineAttributes(2, LineAttributes.PATTERN_SOLID, false)); ap.setMaterial(new Material()); ap.setTransparencyAttributes( new TransparencyAttributes(TransparencyAttributes.SCREEN_DOOR, 0.5f)); Shape3D shape = new Shape3D(ta, ap); shape.setCapability(Shape3D.ALLOW_APPEARANCE_READ); shape.setCapability(Shape3D.ALLOW_APPEARANCE_WRITE); simplex.setTriangle(shape); // simplex.bgTriangle = bgTriangle; TransformGroup tgTriangle = new TransformGroup(); tgTriangle.addChild(shape); bgTriangle.addChild(tgTriangle); spin.addChild(bgTriangle); return bgTriangle; }
// Directional light rotating around the scene and some ambient light. public void addLight(SimpleUniverse su) { BranchGroup bgLight = new BranchGroup(); BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), Double.MAX_VALUE); // Directional light (to be rotated). Color3f lightColour = new Color3f(1.0f, 1.0f, 1.0f); Vector3f lightDir = new Vector3f(0.0f, 0.0f, -1.0f); DirectionalLight light = new DirectionalLight(lightColour, lightDir); light.setInfluencingBounds(bounds); // The transformation group for the directional light and its rotation. TransformGroup tfmLight = new TransformGroup(); tfmLight.addChild(light); // The Alpha for the rotation. Alpha alphaLight = new Alpha(-1, 4000); // The rotation RotationInterpolator rot = new RotationInterpolator( alphaLight, tfmLight, new Transform3D(), 0.0f, (float) Math.PI * 2); rot.setSchedulingBounds(bounds); tfmLight.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); tfmLight.addChild(rot); bgLight.addChild(tfmLight); // Ambient light. Color3f ambientLightColour = new Color3f(0.5f, 0.5f, 0.5f); AmbientLight ambLight = new AmbientLight(ambientLightColour); ambLight.setInfluencingBounds(bounds); bgLight.addChild(ambLight); su.addBranchGraph(bgLight); }