//Import av nödvändiga klasser import java.awt.*; import java.net.*; import java.applet.*; import javax.vecmath.*; import javax.media.j3d.*; import com.sun.j3d.utils.universe.*; import com.sun.j3d.utils.geometry.*; import com.sun.j3d.utils.image.TextureLoader; import com.sun.j3d.utils.applet.MainFrame; /** * MINT - Uppgift 3d * Denna Applet visar en 3D-box med ytstruktur som roterar. * Koden kan köras både som applet och applikation. * * @author Blanca Larkeson */ public class WoodenBox extends Applet{ //komponenter för 3D-världen private Canvas3D canvas; private SimpleUniverse su; private BranchGroup bg; private TransformGroup tg; private Box box; private Appearance app; private URL bildURL; private GraphicsConfiguration gc; //variabler för boxen private float x = 0.5f; private float y = 0.3f; private float z = 0.1f; //Initiering av appleten och placering av komponenter public void init(){ setSize(400, 350); setLayout(new BorderLayout()); gc = SimpleUniverse.getPreferredConfiguration(); //Rityta för boxen placeras centralt canvas = new Canvas3D(gc); add("Center", canvas); //Ett SimpleUniverse skapas su = new SimpleUniverse(canvas); //Betraktningsavstånd initieras su.getViewingPlatform().setNominalViewingTransform(); //Anrop av metoden som bygger ut SimpleUniverse och //skapar den roterande boxen su.addBranchGraph(makeBranchGroup()); } //Metod som bygger ut universum med nödvändiga undergrupper och metoder //Här skapas och returneras boxen public BranchGroup makeBranchGroup(){ //En BranchGroup skapas bg = new BranchGroup(); //En TransformGroup läggs in under BranchGroup //vilket möjliggör rotation av boxen tg = new TransformGroup(); tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); bg.addChild(tg); //Boxens utseende skapas genom att texturfilen läses in app = new Appearance(); try { bildURL = new URL(getCodeBase(), "wood.jpg"); }catch (MalformedURLException me){ System.out.println(" URL Exception: " + me.toString()); } //Ytmaterialet laddas in TextureLoader tl = new TextureLoader(bildURL, new String("RGB"), this); app.setTexture(tl.getTexture()); //Själva boxen skapas box = new Box(x, y, z, Box.GENERATE_TEXTURE_COORDS, app); tg.addChild(box); //Boxrotationen skapas RotationInterpolator ri = new RotationInterpolator(new Alpha(-1, Alpha.INCREASING_ENABLE, 0, 0, 5000, 0, 0, 0, 0, 0), tg); Transform3D rotor = new Transform3D(); rotor.rotZ(Math.PI/2.0f); ri.setAxisOfRotation(rotor); //Aktivt område för beteendet skapas BoundingSphere bounds = new BoundingSphere(); ri.setSchedulingBounds(bounds); tg.addChild(ri); //BranchGroup returneras return bg; } //Main-metod för applikationen public static void main(String[] args){ new MainFrame(new WoodenBox(), 400, 350); } }