Una forma sencilla y rápida de aprender JAVA, observando y deduciendo cómo se comporta el lenguaje a través de ejemplos prácticos.

martes, 15 de octubre de 2013

Crear una esfera en 3D.

Para crear un objeto 3D es necesario tener instalada la API Java3D. 
Como instalar la API Java3D y agregarla a la IDE de Netbeans pinchar aquí


Codigo:

package esfera3d;

import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.Sphere;
import com.sun.j3d.utils.universe.SimpleUniverse;
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GraphicsConfiguration;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.Node;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;

public final class Esfera3D extends Applet {

    public Esfera3D() {
        setLayout(new BorderLayout());
        GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
        Canvas3D canvas3D = new Canvas3D(config);
        add("Center", canvas3D);
        BranchGroup escena = crearEscenaGrafico();
        SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
        simpleU.getViewingPlatform().setNominalViewingTransform();
        simpleU.addBranchGraph(escena);

    }

    public BranchGroup crearEscenaGrafico() {
        BranchGroup objPrincipal = new BranchGroup();
        objPrincipal.addChild(CrearEsfera());
        objPrincipal.addChild(CrearIluminacion());
        return objPrincipal;

    }

    private Node CrearEsfera() {
        Sphere esfera = new Sphere(0.3f); //Tamaño esfera (0.3)
        return esfera;
    }

    private Node CrearIluminacion() {
        Color3f colorLuz = new Color3f(1.0f, 0.5f, 6.1f);
        BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 20.0), 100.0);
        Vector3f direccionLuz = new Vector3f(4.0f, -7.0f, -12.0f);
        DirectionalLight luz1 = new DirectionalLight(colorLuz, direccionLuz);
        luz1.setInfluencingBounds(bounds);

        return luz1;
    }

    public static void main(String[] args) {
        Frame frame = new MainFrame(new Esfera3D(), 256, 256); //Tamaño ventana de 256x256 pixeles.
    }
}



Resultado:



7 comentarios:

  1. hola, lo intenté y me sale esto:
    Exception in thread "main" java.lang.UnsatisfiedLinkError: no j3dcore-ogl in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
    at java.lang.Runtime.loadLibrary0(Runtime.java:849)
    at java.lang.System.loadLibrary(System.java:1088)
    at javax.media.j3d.NativePipeline$1.run(NativePipeline.java:189)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.media.j3d.NativePipeline.loadLibrary(NativePipeline.java:180)
    at javax.media.j3d.NativePipeline.loadLibraries(NativePipeline.java:137)
    at javax.media.j3d.MasterControl.loadLibraries(MasterControl.java:948)
    at javax.media.j3d.VirtualUniverse.(VirtualUniverse.java:280)
    at Esfera3D.(Esfera3D.java:33)
    at Esfera3D.main(Esfera3D.java:64)
    Java Result: 1

    me puedes ayudar?

    ResponderEliminar
    Respuestas
    1. Hola amigo. La exception que mencionas se debe a una mala instalación de JAVA 3D.
      La instalación depende de:
      - La plataforma (Windows, Linux, MAC OS)
      - Método de instalación (Manual o con instalador(excepto para Linux, donde solo hay Manual))

      Eliminar
    2. lo instalé como lo haces en tu explicación y aun así me sale ese error yo tengo netbeans 8.0.2 si puedes dar una solución a eso te lo agradecería mucho

      Eliminar
  2. Excelente codigo...gracias.............se debe tener en cuenta los nombres que se crean en el paquete y la clase....y que importen las librerias de java 3D segun correspondan

    ResponderEliminar
  3. Amigo me puedes ayudar, necesito crear diferentes figuras por medio de eventos separados, ejemplo, tengo una interfaz y un par de botones los cuales uno dice, "crear esfera" y el otro crear cubo, al darle clic a cualquiera de los dos me crea la figura, pero si le doy de nuevo clic para crear otra figura ya sea la misma o la otra, me sale un error que dice que solo se puede añadir un branchgroup como hijo, he intentando un millar de cosas y todas me botan error ayuda por favor, Gracias!!!!

    ResponderEliminar
  4. Hola amigo me puedes ayudar necesito un programa que haga un dibujo de Objetos en 3D. Desarrolle una aplicación que dibuje un cubo a partir de los 8 vértices. Defina el conjunto de aristas y el conjunto de caras o planos que forman el cubo y consérvelos en estructuras de datos adecuadas. Además dibujar una esfera ya sea usando la representación paramétrica o bien representación planar, en cuyo caso conservar los vértices, aristas y planos generados

    ResponderEliminar

Con la tecnología de Blogger.