// Java 3D Test Applet // ColorInterpolatorTest.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.behaviors.mouse.MouseRotate; public class ColorInterpolatorTest extends Applet { private AlphaPanel apanel = null; private Appearance app = null; private Color3f scolor = new Color3f(1.0f, 0.0f, 0.0f); private Color3f ecolor = new Color3f(0.0f, 0.0f, 1.0f); private ColorInterpolator cinterp = null; public ColorInterpolatorTest() { this.setLayout(new BorderLayout()); apanel = new AlphaPanel(); this.add(apanel, BorderLayout.NORTH); Panel cpanel = new Panel(); cpanel.setLayout( new GridLayout(2, 1) ); this.add(cpanel, BorderLayout.SOUTH); Panel[] cpanels = new Panel[2]; for (int i=0; i<2; i++) { cpanels[i] = new Panel(); cpanel.add(cpanels[i]); } final Button sbutton = new Button("Stop"); sbutton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { String blabel = sbutton.getLabel(); if (blabel.equals("Start")) { cinterp.setEnable(true); apanel.reset(); sbutton.setLabel("Stop"); } else if (blabel.equals("Stop")) { cinterp.setEnable(false); sbutton.setLabel("Start"); } } }); cpanels[0].add(sbutton); cpanels[0].add( new Label("Start -") ); TuplePanel stp = new TuplePanel(scolor); stp.addTupleEventListener( new TupleEventListener() { public void tupleStateChanged(TupleEvent e) { Color3f color = e.getColor3f(); cinterp.setStartColor(color); } }); cpanels[0].add(stp); cpanels[1].add( new Label("End -") ); TuplePanel etp = new TuplePanel(ecolor); etp.addTupleEventListener( new TupleEventListener() { public void tupleStateChanged(TupleEvent e) { Color3f color = e.getColor3f(); cinterp.setEndColor(color); } }); cpanels[1].add(etp); GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas = new Canvas3D(config); this.add(canvas, BorderLayout.CENTER); SimpleUniverse universe = new SimpleUniverse(canvas); universe.getViewingPlatform().setNominalViewingTransform(); BranchGroup scene = createSceneGraph(); universe.addBranchGraph(scene); } private BranchGroup createSceneGraph() { BranchGroup root = new BranchGroup(); root.setCapability(BranchGroup.ALLOW_DETACH); DirectionalLight light = new DirectionalLight( new Color3f(1.0f, 1.0f, 1.0f), new Vector3f(-0.57f, -0.57f, -0.57f) ); BoundingSphere bounds = new BoundingSphere(new Point3d(), 100.0); light.setInfluencingBounds(bounds); root.addChild(light); AmbientLight alight = new AmbientLight(); alight.setInfluencingBounds(bounds); root.addChild(alight); TransformGroup trans = new TransformGroup(); trans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); trans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); trans.setCapability(TransformGroup.ENABLE_PICK_REPORTING); root.addChild(trans); MouseRotate rotator = new MouseRotate(); rotator.setSchedulingBounds(bounds); rotator.setTransformGroup(trans); root.addChild(rotator); Heart heart = new Heart(); app = createAppearance(); Shape3D shape = new Shape3D( heart.getGeometry(), app ); trans.addChild(shape); cinterp = createInterpolator( apanel.getAlpha(), app.getMaterial() ); root.addChild(cinterp); return root; } private ColorInterpolator createInterpolator(Alpha alpha, Material mat) { ColorInterpolator cinterp = new ColorInterpolator(alpha, mat, scolor, ecolor); cinterp.setSchedulingBounds(new BoundingSphere(new Point3d(), 100.0)); return cinterp; } private Appearance createAppearance() { Appearance app = new Appearance(); app.setCapability(Appearance.ALLOW_MATERIAL_READ); app.setCapability(Appearance.ALLOW_MATERIAL_WRITE); Material mat = new Material(); mat.setCapability(Material.ALLOW_COMPONENT_READ); mat.setCapability(Material.ALLOW_COMPONENT_WRITE); mat.setDiffuseColor( new Color3f(1.0f, 0.0f, 0.0f) ); mat.setShininess(100.0f); app.setMaterial(mat); return app; } public static void main(String[] args) { ColorInterpolatorTest applet = new ColorInterpolatorTest(); Frame frame = new MainFrame(applet, 500, 500); } }