Ola Galera,
sou iniciante com a API Java 3D e gostaria de saber como faço alterar o valor dos eixos (x,y,z) em tempo de exeução.
Por exemplo, através do codigo abaixo, gastaria que os valores dentro do metodo rotateCube fossem mudados em tempo de excução, sendo gerados de modo aleatório e contínuo até o fim do tempo fornecido pelo método Alpha
import com.sun.j3d.utils.universe.SimpleUniverse;
import com.sun.j3d.utils.geometry.ColorCube;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.media.j3d.Canvas3D;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
public class Static3DWorld extends JFrame {
private Transform3D rotate1 = new Transform3D();
private Transform3D rotate2 = new Transform3D();
public Static3DWorld() {
super("Static3DWorld");
Canvas3D canvas3D = createCanvas3D();
BranchGroup scene = createSceneGraph();
connect(canvas3D, scene);
}
private Canvas3D createCanvas3D() {
setSize(300, 300);
getContentPane().setLayout(new BorderLayout());
GraphicsConfiguration config =
SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas3D = new Canvas3D(config);
setSize(300, 300);
getContentPane().add(canvas3D);
return canvas3D;
}
private BranchGroup createSceneGraph() {
BranchGroup objRoot = new BranchGroup();
TransformGroup objTrans = new TransformGroup();
objTrans.setCapability(
TransformGroup.ALLOW_TRANSFORM_WRITE);
objRoot.addChild(objTrans);
Appearance app = new Appearance();
objTrans.addChild(new ColorCube(0.4));
Transform3D yAxis = new Transform3D();
Alpha rotationAlpha = new Alpha(5, 4000);
RotationInterpolator rotator = new RotationInterpolator(
rotationAlpha, objTrans, yAxis,
0.0f, (float) Math.PI*2.0f);
BoundingSphere bounds =
new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
rotator.setSchedulingBounds(bounds);
objRoot.addChild(rotator);
objRoot.compile();
return objRoot;
}
private Transform3D rotateCube() {
rotate1.rotX(Math.PI / 4.0d);
rotate2.rotY(Math.PI / 4.0d);
rotate1.mul(rotate2);
return rotate1;
}
private void connect(Canvas3D canvas3D, BranchGroup scene) {
SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
simpleU.getViewingPlatform().setNominalViewingTransform();
simpleU.addBranchGraph(scene);
}
public static void main(String[] args) {
new Static3DWorld().setVisible(true);
}
}
Tenho que fazer uam aplicação onde haverá a necessidade da alteração dos valores em tempos de execução. Os dados serão fornecidos por um sensor.
Abraços a todos
Danilo