import java.applet.Applet; import java.awt.BorderLayout; import java.awt.Frame; import com.sun.j3d.utils.geometry.*; import com.sun.j3d.utils.universe.*; import com.sun.j3d.utils.behaviors.mouse.*; import javax.media.j3d.*; import javax.vecmath.*; import java.awt.event.*; import java.util.Enumeration; /** * Põrketuvastaja reageerib kuubi ja silindri kokkupõrkele. Tuvastaja käivitamiseks * tuleb vajutada suvalisele klahvile sel ajal, kui 3D lõuend on fookuses. * Silindrit saab liigutada, hoides hiire paremat klahvi all. */ public class Porge extends Applet { Cylinder silinder=new Cylinder(0.1f, 1.1f); TransformGroup keeraja; public class Porketuvastaja extends Behavior{ Transform3D keere = new Transform3D(); double nurk = 0.0; public void initialize(){ this.wakeupOn(new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED)); //esimest korda reageeritakse klahvivajutusele } public void processStimulus(Enumeration criteria){ nurk += 0.1; keere.rotY(nurk); keeraja.setTransform(keere); this.wakeupOn(new WakeupOnCollisionEntry(silinder)); //edaspidi silindri põrkamisele kuubiga } } public BranchGroup looLavaGraaf() { BranchGroup juur = new BranchGroup(); keeraja = new TransformGroup(); keeraja.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); TransformGroup liiguta=new TransformGroup(); liiguta.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); liiguta.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); juur.addChild(keeraja); juur.addChild(liiguta); keeraja.addChild(new ColorCube(0.4)); silinder.setAppearance(new Appearance()); liiguta.addChild(silinder); Porketuvastaja p = new Porketuvastaja(); p.setSchedulingBounds(new BoundingSphere()); juur.addChild(p); MouseTranslate hiirliigutaja=new MouseTranslate(liiguta); // hiirliigutaja.setFactor(-0.001); //määratakse hiire tundlikkus hiirliigutaja.setSchedulingBounds(new BoundingSphere()); juur.addChild(hiirliigutaja); juur.compile(); return juur; } public Porge() { setLayout(new BorderLayout()); Canvas3D canvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration()); add(canvas3D, BorderLayout.CENTER); SimpleUniverse u = new SimpleUniverse(canvas3D); u.getViewingPlatform().setNominalViewingTransform(); u.addBranchGraph(looLavaGraaf()); } public static void main(String[] args) { Frame f=new Frame(); f.add(new Porge()); f.setSize(300, 300); f.setVisible(true); } }