//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.geometry.*; import com.sun.j3d.utils.universe.*; import com.sun.j3d.utils.image.TextureLoader; import com.sun.j3d.utils.applet.MainFrame; /** * MINT - Uppgift 3e * Denna Applet visar en färgad och rörlig text på en texturbakgrund. * Koden kan köras både som applet och applikation. * * @author Blanca Larkeson */ public class TextureBackground extends Applet{ //komponenter för 3D-världen private Canvas3D canvas; private SimpleUniverse su; private GraphicsConfiguration gc; private BranchGroup bg; private TransformGroup tg; private TextureLoader tl; private ColoringAttributes ca; private Appearance app; private URL backgroundURL; private Background back; private Font3D f3d; private Text3D t3d; private Shape3D s3d; private Alpha translationAlpha; private Transform3D translationAxis; private PositionInterpolator path; private BoundingSphere bounds; //Initiering av appleten och placering av komponenter public void init(){ setSize(400, 350); setLayout(new BorderLayout()); gc = SimpleUniverse.getPreferredConfiguration(); //Rityta 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 su.addBranchGraph(makeBranchGroup()); } //Metod som bygger ut universum med nödvändiga undergrupper och metoder public BranchGroup makeBranchGroup(){ //En BranchGroup skapas bg = new BranchGroup(); //En TransformGroup läggs in under BranchGroup //vilket möjliggör rotation, förflyttning och skalning av 3D-objekt tg = new TransformGroup(); tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); bg.addChild(tg); //Texturfilen för bakgrunden läses in try { backgroundURL = new URL(getCodeBase(), "back.jpg"); } catch (MalformedURLException me) { System.out.println(" URL Exception: " + me.toString()); } //Bakgrunden skapas tl = new TextureLoader(backgroundURL, this); back = new Background(tl.getImage()); back.setApplicationBounds(new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0)); bg.addChild(back); //Textens utseende skapas, färgen anges som float app = new Appearance(); ca = new ColoringAttributes(); ca.setColor(0.70f, 0.70f, 0.45f); app.setColoringAttributes(ca); //Själva texten skapas f3d = new Font3D(new Font("Verdana", Font.BOLD, 1), new FontExtrusion()); t3d = new Text3D(f3d, new String("3D"), new Point3f(-0.9f, -0.3f, -2.0f)); s3d = new Shape3D(t3d, app); tg.addChild(s3d); //Textrörelse skapas med hjälp av PositionInterpolator translationAlpha = new Alpha(-1, 6000); translationAxis = new Transform3D(); translationAxis.rotY(-Math.PI/2.0d); path = new PositionInterpolator(translationAlpha, tg, translationAxis, -25.0f, 5.0f); //Aktivt område för beteendet skapas bounds = new BoundingSphere(); path.setSchedulingBounds(bounds); tg.addChild(path); //BranchGroup returneras return bg; } //Main-metod för applikationen public static void main(String[] args){ new MainFrame(new TextureBackground(), 400, 350); } }