miércoles, 4 de enero de 2012

Cubo en 3D con las librerías J3D, mejorado!!!

Este  es el cubo que publique hace poco, pero mejorado.


nombre:HelloJava3Dd.java
........................................................................................................
/**
 *
 * @author alex4024
 */
import java.applet.Applet; 
import java.awt.BorderLayout; 
import java.awt.Frame; 
import java.awt.event.*; 
import com.sun.j3d.utils.applet.MainFrame; 
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.ColorCube; 
import java.awt.GraphicsConfiguration;
import javax.media.j3d.*;
import javax.vecmath.*;

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

BranchGroup escena=createSceneGraph(); 
escena.compile(); 

SimpleUniverse simpleU =new SimpleUniverse(lienzo3D); 

simpleU.getViewingPlatform().setNominalViewingTransform(); 

simpleU.addBranchGraph(escena); 
}

public BranchGroup createSceneGraph(){ 
            
BranchGroup objRaiz =new BranchGroup(); 

Transform3D rotar =new Transform3D(); 
                Transform3D tempRotar =new Transform3D();
                
rotar.rotX(Math.PI/4.0d); 
                tempRotar.rotY(Math.PI/5.0d);
                rotar.mul(tempRotar);
 
TransformGroup objRotar =new TransformGroup(rotar); 
                TransformGroup objVuelta = new TransformGroup();
                objVuelta.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
                
                objRaiz.addChild(objRotar);
                objRotar.addChild(objVuelta);
                
                objVuelta.addChild(new ColorCube(0.4));
                
                Transform3D EjeY = new Transform3D();
                Alpha rotacionAlpha = new Alpha(-1,4000);
                
                RotationInterpolator rotador = new RotationInterpolator(rotacionAlpha, objVuelta, EjeY, 0.0f, (float)Math.PI*2.0f);
                
                BoundingSphere bounds = new BoundingSphere();
                rotador.setSchedulingBounds(bounds);
                objVuelta.addChild(rotador);
                
                return objRaiz;
}
 
public static void main(String [] args){ 
Frame frame =new MainFrame(new HelloJava3Dd(),256,256); 
}
}

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

Mejoras: Gira automáticamente entre los ejes X & Y
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)...

.

3 comentarios:

  1. Excelente código pero no puedo hacer que corra, Saludos

    ResponderEliminar
    Respuestas
    1. mmmm.... ya instalastes las librerías java 3d api?
      este es el link de oracle para descargarlas:
      http://www.oracle.com/technetwork/java/javase/tech/index-jsp-138252.html

      Eliminar
  2. vientos chavo!!!
    eres una gaver
    sigue asi monigote

    ResponderEliminar