Salve, sto usando da poco tempo il java e il 3D con qualche difficoltà.
Sto cercando di realizzare un programma che abbia un cubo che ruota prendendo le cordinate di x,y e z in input.
Ad esempio voglio creare il file pippo che richiami il metodo della classe Cubo e gli passi i dati i modo che questa classe crei il cubo, sempre usando la stessa finestra.
Sono riuscita a creare un cubo e ruotarlo cambiando le coordinate a mano con questo codice
cambiando il metodo init in modo da acquisire 3 double e da poterli passare a trasla incodice:import java.applet.Applet; import com.sun.j3d.utils.universe.SimpleUniverse; import com.sun.j3d.utils.applet.MainFrame; import javax.media.j3d.BranchGroup; import javax.media.j3d.TransformGroup; import javax.media.j3d.Transform3D; import javax.media.j3d.Canvas3D; import com.sun.j3d.utils.geometry.ColorCube; import java.awt.*; public class Cubo4 extends Applet { // crea l’universo public void init() { setLayout(new BorderLayout()); GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); canvas = new Canvas3D(config); group = new BranchGroup(); group.addChild(trasla()); group.compile(); universe = new SimpleUniverse(canvas); add("Center",canvas); universe.getViewingPlatform().setNominalViewingTransform(); universe.addBranchGraph(group); } // trasla il cubo public TransformGroup trasla() { double x = Math.PI / 6; double y = Math.PI / 6; double z = Math.PI / 2; Transform3D transf2 = new Transform3D(); Transform3D transf = new Transform3D(); TransformGroup tg = new TransformGroup(); /* setta la rotazione di 45 gradi intorno all’asse Y: l’angolo è espresso in radianti (pi greco/4) */ transf.rotZ(z); // si puo' usare al posto di transf.rotZ(Math.PI / 2); transf2.mul(transf); transf.rotY(y); // si puo' usare al posto di transf.rotY(Math.PI / 6); transf2.mul(transf); transf.rotX(x); // si puo' usare al posto di transf.rotX(Math.PI / 6); transf2.mul(transf); //posizione.setRotation(transf2); // setta la traslazione //transf.setTranslation(posizione); tg.setTransform(transf2); tg.addChild(cube); return tg; } // attributi private SimpleUniverse universe; private BranchGroup group; private Canvas3D canvas; private ColorCube cube = new ColorCube(0.3); // main public static void main(String args[]) { new MainFrame(new Cubo4(),400,400); } }
mi da errore dicendo che c'è già un figlio con quel nome.codice:group.addChild(trasla());

Rispondi quotando