package elte.java2_utikalauz5.java3d; import java.awt.*; import javax.vecmath.*; import javax.media.j3d.*; import java.util.BitSet; /** Csoportkezelés. @link.forrásfájl {@docRoot}/../data/java3d/src SwitchDemo.java @link.letöltés {@docRoot}/../data/java3d SwitchDemo.jar @since Java 2 Útikalauz programozóknak 5.0 */ class SwitchDemo extends Frame { /** Verziószám */ private final static long serialVersionUID = 15L; public static void main(String[] args) { new SwitchDemo(); } public SwitchDemo() { super("SwitchDemo"); enableEvents(java.awt.AWTEvent.WINDOW_EVENT_MASK); GraphicsConfiguration config = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getBestConfiguration(new GraphicsConfigTemplate3D()); Canvas3D c = new Canvas3D(config); add(c); UniverseBuilder u = new UniverseBuilder(c); BranchGroup scene = createSceneGraph(); u.addBranchGraph(scene); setSize(400,300); setVisible(true); } /** Ablakesemény feldolgozása, bezáráskor kilépés. @param esemény A fellépett esemény */ @Override protected void processWindowEvent(java.awt.event.WindowEvent esemény) { if (esemény.getID() == esemény.WINDOW_CLOSING) System.exit(0); super.processWindowEvent( esemény ); } public BranchGroup createSceneGraph() { BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0); Color3f lColor1 = new Color3f(0.8f, 0.8f, 0.8f); Vector3f lDir1 = new Vector3f(-0.2f, 0.0f, -1.0f); Color3f alColor = new Color3f(0.4f, 0.4f, 0.4f); AmbientLight aLgt = new AmbientLight(alColor); aLgt.setInfluencingBounds(bounds); DirectionalLight lgt1 = new DirectionalLight(lColor1, lDir1); lgt1.setInfluencingBounds(bounds); BranchGroup branchGroup = new BranchGroup(); branchGroup.addChild(aLgt); branchGroup.addChild(lgt1); Transform3D tr1 = new Transform3D(); tr1.set(0.8,new Vector3d(-2.0,0.0,0.0)); TransformGroup trGroup1 = new TransformGroup(tr1); Transform3D tr2 = new Transform3D(); tr2.set(1.0,new Vector3d(0.7,0.0,0.0)); TransformGroup trGroup2 = new TransformGroup(tr2); Transform3D tr3 = new Transform3D(); tr3.set(0.8,new Vector3d(3.0,0.0,1.0)); TransformGroup trGroup3 = new TransformGroup(tr3); Appearance appearance2 = new Appearance(); Material material2 = new Material(); material2.setDiffuseColor(new Color3f(0.0f,0.5f,1.0f)); appearance2.setMaterial(material2); Appearance appearance3 = new Appearance(); Material material3 = new Material(); material3.setDiffuseColor(new Color3f(1.0f,0.0f,1.0f)); appearance3.setMaterial(material3); TransparencyAttributes transparency3 = new TransparencyAttributes(); transparency3.setTransparency(0.6f); transparency3.setTransparencyMode(TransparencyAttributes.BLENDED); appearance3.setTransparencyAttributes(transparency3); Switch sw = new Switch(); BitSet mask = new BitSet(3); mask.set( 0 ); mask.set( 2 ); sw.setWhichChild( Switch.CHILD_MASK ); sw.setChildMask( mask ); trGroup1.addChild(new ColorCube(new Appearance()).getShape()); sw.addChild(trGroup1); trGroup2.addChild(new ColorCube(appearance2).getShape()); sw.addChild(trGroup2); trGroup3.addChild(new ColorCube(appearance3).getShape()); sw.addChild(trGroup3); branchGroup.addChild(sw); return branchGroup; } class UniverseBuilder { Locale locale; UniverseBuilder(Canvas3D c) { Transform3D t = new Transform3D(); Transform3D t2 = new Transform3D(); t2.setEuler( new Vector3d(-35.0*(Math.PI/180.0),45.0*(Math.PI/180.0),0.0)); t.set(4,new Vector3d(6.0,5.0,6.0)); t.mul(t,t2); VirtualUniverse universe = new VirtualUniverse(); locale = new Locale(universe); PhysicalBody body = new PhysicalBody(); PhysicalEnvironment environment = new PhysicalEnvironment(); BranchGroup viewPlatformBranchGroup = new BranchGroup(); TransformGroup viewPlatformTransformGroup = new TransformGroup(t); ViewPlatform viewPlatform = new ViewPlatform(); View view = new View(); view.addCanvas3D(c); view.setPhysicalBody(body); view.setPhysicalEnvironment(environment); view.attachViewPlatform(viewPlatform); viewPlatformTransformGroup.addChild(viewPlatform); viewPlatformBranchGroup.addChild(viewPlatformTransformGroup); locale.addBranchGraph(viewPlatformBranchGroup); } void addBranchGraph(BranchGroup bg) { locale.addBranchGraph(bg); } } class ColorCube { double verts[] = { // elso lap 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, // hatso lap -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, // jobb lap 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, // bal lap -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, // fedo lap 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, // alaplap -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0 }; float normals[] = { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, }; private Shape3D shape; public ColorCube(Appearance appearance) { QuadArray cube = new QuadArray(24, QuadArray.COORDINATES |QuadArray.NORMALS); cube.setCoordinates(0, verts); cube.setNormals(0,normals); shape = new Shape3D(cube, appearance); } public Shape3D getShape() { return shape; } } }