miércoles, 4 de enero de 2012

Cono Yoyo en java 3D.

Este es un ejemplo de un yoyo creado a partir de 2 conos.


nombre: ConeYoyoApp.java

..........................................................................................................................
/**
 *
 * @author alex4024
 */
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Frame;
import javax.media.j3d.Alpha;
import javax.media.j3d.Appearance;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.RotationInterpolator;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.Cone;
import com.sun.j3d.utils.universe.SimpleUniverse;
import java.awt.GraphicsConfiguration;

public class ConeYoyoApp extends Applet {
    
  public class ConeYoyo {

    private BranchGroup yoyoBG;

    public ConeYoyo() {

      yoyoBG = new BranchGroup();

      Appearance app = new Appearance();

      Transform3D girar = new Transform3D();
      Transform3D transladar = new Transform3D();

      transladar.set(new Vector3f(0.1f, 0.0f, 0.0f));
      TransformGroup yoyoTGT1 = new TransformGroup(transladar);
      yoyoBG.addChild(yoyoTGT1);

      girar.rotZ(Math.PI / 2.0d);
      TransformGroup yoyoTGR1 = new TransformGroup(girar);
      Cone cone1 = new Cone(0.6f, 0.2f);
      cone1.setAppearance(app);
      yoyoTGR1.addChild(cone1);
      yoyoTGT1.addChild(yoyoTGR1);

      transladar.set(new Vector3f(-0.1f, 0.0f, 0.0f));
      TransformGroup yoyoTGT2 = new TransformGroup(transladar);
      yoyoBG.addChild(yoyoTGT2);

      girar.rotZ(-Math.PI / 2.0d);
      TransformGroup yoyoTGR2 = new TransformGroup(girar);
      Cone cono2 = new Cone(0.6f, 0.2f);
      cono2.setAppearance(app);
      yoyoTGR2.addChild(cono2);
      yoyoTGT2.addChild(yoyoTGR2);

      yoyoBG.compile();

    } 

    public BranchGroup getBG() {
      return yoyoBG;
    }

  }

  public BranchGroup createSceneGraph() {

    BranchGroup objRaiz = new BranchGroup();

    TransformGroup objVuelta = new TransformGroup();
    objVuelta.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

    objRaiz.addChild(objVuelta);
    objVuelta.addChild(new ConeYoyo().getBG());

    Alpha rotacionAlpha = new Alpha(-1, 4000);

    RotationInterpolator rotacion = new RotationInterpolator(rotacionAlpha, objVuelta);
    BoundingSphere limites = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0);
    rotacion.setSchedulingBounds(limites);
    objVuelta.addChild(rotacion);

    objRaiz.compile();

    return objRaiz;
  } 

  public ConeYoyoApp() {
    setLayout(new BorderLayout());
    GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); 
    Canvas3D lienzo3D = new Canvas3D(config);
    add("Center", lienzo3D);

    BranchGroup escena = createSceneGraph();

    SimpleUniverse simpleU = new SimpleUniverse(lienzo3D);

    simpleU.getViewingPlatform().setNominalViewingTransform();

    simpleU.addBranchGraph(escena);
  } 

  public static void main(String[] args) {
    Frame frame = new MainFrame(new ConeYoyoApp(), 256, 256);
  } 

}

..........................................................................................................................

Alpha rotacionAlpha = new Alpha(-1,4000); en esta linea declaramos la velocidad de rotación., aclarese que 4000 es igual a 4 segundos, y -1 lo que hace es que el cubo gire infinitamente; (si este valor se cambia por 2, el cubo gira dos vez, así sucesivamente con valores positivos)...

.

No hay comentarios:

Publicar un comentario