//Import av nödvändiga klasser import java.awt.*; import java.applet.*; import javax.vecmath.*; import javax.media.j3d.*; import com.sun.j3d.utils.geometry.*; import com.sun.j3d.utils.applet.MainFrame; import com.sun.j3d.utils.universe.SimpleUniverse; /** * MINT - Uppgift 3c * Denna upgift visar en gul 3D-kon som roterar. * Koden kan köras både som applet och applikation. * * @author Blanca Larkeson */ public class YellowCone extends Applet { //komponenter för 3D-världen private Cone conan; private Canvas3D canvas; private SimpleUniverse su; private BranchGroup bg; private TransformGroup tg; private ColoringAttributes ca; private GraphicsConfiguration gc; //variabler för konen private float radian = 0.35f; private float height = 1.15f; private int flag = 0; private int xdiv = 30; private int ydiv = 30; private Appearance app; //Initiering av appleten och placering av komponenter public void init() { setSize(400, 350); setLayout(new BorderLayout()); gc = SimpleUniverse.getPreferredConfiguration(); //Rityta för konen placeras centralt canvas = new Canvas3D(gc); add("Center", canvas); //Ett enkelt universum som inkluderar ett Locale objekt skapas su = new SimpleUniverse(canvas); //Betraktningsavstånd initieras su.getViewingPlatform().setNominalViewingTransform(); //Anrop av metoden som bygger ut SimpleUniverse och //skapar den roterande konen su.addBranchGraph(makeBranchGroup()); } //Metod som bygger ut universum med nödvändiga undergrupper och metoder //Här skapas och returneras den gula konen public BranchGroup makeBranchGroup() { //En BranchGroup skapas bg = new BranchGroup(); //En TransformGroup läggs in under BranchGroup //detta möjliggör rotation av konen tg = new TransformGroup(); tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); bg.addChild(tg); //Konens form och utseende skapas ca = new ColoringAttributes(); ca.setColor(255, 255, 0); app = new Appearance(); app.setColoringAttributes(ca); //Själva konen skapas conan = new Cone(radian, height, flag, xdiv, ydiv, app); tg.addChild(conan); //Konrotationen 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.rotX(Math.PI/4.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 YellowCone(), 400, 350); } }