import com.sun.j3d.utils.universe.*; import com.sun.j3d.utils.geometry.*; import javax.swing.*; import javax.vecmath.*; import java.awt.*; import java.awt.event.*; import javax.media.j3d.*; public class Liikuvkuup extends JFrame { public Liikuvkuup() { getContentPane().setLayout(new BorderLayout()); Canvas3D canvas = new Canvas3D(null); getContentPane().add(canvas, BorderLayout.CENTER); SimpleUniverse universe = new SimpleUniverse(canvas); BranchGroup Juurikas = createBranchGroup(); Juurikas.compile(); universe.addBranchGraph(Juurikas); //määrab kujunditepuu, millist loodud ruumis näitama hakatakse. universe.getViewingPlatform().setNominalViewingTransform(); setVisible(true); setSize(new Dimension(300, 300)); validate(); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { System.exit(1); } }); } private BranchGroup createBranchGroup() { BranchGroup Juurikas = new BranchGroup(); Transform3D p88raX = new Transform3D(); p88raX.rotX(Math.toRadians(45)); Transform3D p88raY = new Transform3D(); p88raY.rotY(Math.toRadians(40)); p88raX.mul(p88raY); TransformGroup p88ra = new TransformGroup(p88raX); //tulemusena loodakse sõlm (tüübist TransformGroup), mis panduna juure ja kuubi vahele keerab viimast nii palju kui sõlmes ette nähtud. TransformGroup muundus = new TransformGroup(); muundus.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); //selle käsu tulemusena lubatakse transformgrupi väärtusi ka programmi töö käigus muuta //järgneva interpolaatori abil muudetaks kuubi suurust ScaleInterpolator liigutaja = new ScaleInterpolator(new Alpha(-1, 4000), muundus); //Isend tüübist Alpha määrab, et [-1]-igavesti liigub, 4000 millisekondit = 4 sekondit 1 tsükkel 0-st kuini 1-ni liigutaja.setSchedulingBounds(new BoundingSphere()); Juurikas.addChild(p88ra); p88ra.addChild(muundus); muundus.addChild(liigutaja); muundus.addChild(new ColorCube(0.4)); return Juurikas; } public static void main(String args[]) { new Liikuvkuup(); } }