// Java 3Dテスト用アプレット // AppearanceTest.java // Copyright (c) 1999 ENDO Yasuyuki // mailto:yasuyuki@javaopen.org // http://www.javaopen.org/j3dbook/index.html import java.applet.*; import java.awt.*; import java.awt.event.*; import javax.media.j3d.*; import javax.vecmath.*; import com.sun.j3d.utils.applet.MainFrame; import com.sun.j3d.utils.universe.SimpleUniverse; import com.sun.j3d.utils.geometry.Box; import com.sun.j3d.utils.geometry.Cone; import com.sun.j3d.utils.geometry.Sphere; public class AppearanceTest extends Applet { TransparencyAttributes tattr = null; public AppearanceTest() { Panel panel = new Panel(); this.setLayout(new BorderLayout()); this.add(panel, BorderLayout.NORTH); panel.add(new Label("Transparency")); TextField tfield = new TextField("0.0", 4); tfield.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { float value = 0.0f; try { value = Float.parseFloat(e.getActionCommand()); if (value > 1.0f) value = 1.0f; if (value < 0.0f) value = 0.0f; System.out.println("value=" + value); tattr.setTransparency(value); } catch (NumberFormatException ex) { } } }); panel.add(tfield); Choice choice = new Choice(); choice.add("BLENDED"); choice.add("FASTEST"); choice.add("NICEST"); choice.add("NONE"); choice.add("SCREEN_DOOR"); choice.select(3); choice.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent e) { String item = (String)e.getItem(); if (item.equals("BLENDED")) { tattr.setTransparencyMode(TransparencyAttributes.BLENDED); } else if (item.equals("FASTEST")) { tattr.setTransparencyMode(TransparencyAttributes.FASTEST); } else if (item.equals("NICEST")) { tattr.setTransparencyMode(TransparencyAttributes.NICEST); } else if (item.equals("NONE")) { tattr.setTransparencyMode(TransparencyAttributes.NONE); } else if (item.equals("SCREEN_DOOR")) { tattr.setTransparencyMode(TransparencyAttributes.SCREEN_DOOR); } } }); panel.add(choice); GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas = new Canvas3D(config); this.add(canvas, BorderLayout.CENTER); SimpleUniverse universe = new SimpleUniverse(canvas); universe.getViewingPlatform().setNominalViewingTransform(); universe.addBranchGraph(createSceneGraph()); } public BranchGroup createSceneGraph() { BranchGroup root = new BranchGroup(); Light light1 = createLight( new Color3f(0.7f, 0.7f, 0.7f), new Vector3f(0.5f, -0.5f, -0.7f) ); root.addChild(light1); Light light2 = createLight( new Color3f(0.3f, 0.3f, 0.3f), new Vector3f(-0.5f, -0.5f, -0.7f) ); root.addChild(light2); Transform3D t3d = new Transform3D(); t3d.rotX(Math.PI / 8.0); Transform3D roty = new Transform3D(); roty.rotY(Math.PI / 4.0); t3d.mul(roty); TransformGroup trans = new TransformGroup(t3d); root.addChild(trans); Appearance yapp = createAppearance( new Color3f(1.0f, 1.0f, 0.0f) ); Appearance rapp = createAppearance( new Color3f(1.0f, 0.0f, 0.0f) ); Appearance bapp = createAppearance( new Color3f(0.0f, 0.0f, 1.0f) ); Transform3D bt3d = new Transform3D(); bt3d.set(new Vector3d(-0.22, -0.02, 0.22)); TransformGroup btrans = new TransformGroup(bt3d); btrans.addChild(new Box( 0.16f, 0.16f, 0.16f, yapp )); trans.addChild(btrans); Transform3D ct3d = new Transform3D(); ct3d.set( new Vector3d(-0.2, 0.0, -0.2) ); TransformGroup ctrans = new TransformGroup(ct3d); ctrans.addChild( new Cone( 0.2f, 0.4f, Cone.BODY | Cone.CAP, rapp ) ); trans.addChild(ctrans); Transform3D st3d = new Transform3D(); st3d.set( new Vector3d(0.2, 0.0, 0.2) ); TransformGroup strans = new TransformGroup(st3d); strans.addChild( new Sphere(0.2f, bapp) ); trans.addChild(strans); return root; } private Light createLight(Color3f color, Vector3f vec) { DirectionalLight light = new DirectionalLight( color, vec ); light.setInfluencingBounds( new BoundingSphere( new Point3d(), 100.0 ) ); return light; } private Appearance createAppearance(Color3f color) { Appearance ap = new Appearance(); ap.setCapability(Appearance.ALLOW_TRANSPARENCY_ATTRIBUTES_WRITE); Material mat = new Material(); mat.setDiffuseColor(color); //mat.setSpecularColor(new Color3f(0.0f, 0.0f, 0.0f)); //mat.setShininess(127.0f); ap.setMaterial(mat); if (tattr == null) { tattr = new TransparencyAttributes(); tattr.setCapability(TransparencyAttributes.ALLOW_MODE_WRITE); tattr.setCapability(TransparencyAttributes.ALLOW_VALUE_WRITE); } ap.setTransparencyAttributes(tattr); return ap; } public static void main(String[] args) { Frame frame = new MainFrame(new AppearanceTest(), 500, 500); } }