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:



15 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
    3. Hola ...
      puede corregir simplemente copiando el archivo C: \ Archivos de programa \ Java \ Java3D \ 1.5.1 \ bin \ j3dcore-ogl.dll
      a C: \ Archivos de programa \ Java \ jre6 \ bin (o su versión de jre definida)

      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
  5. Hay que tener en cuenta que esto simplemente nos descomprime en un subdirectorio lib dichas clases, dentro del directorio donde ejecutemos el binario.

    Una vez hecho esto, podemos lanzar Netbeans y añadir las librerías de Java3D desde Herramientas -> Librerías.

    Sólo nos queda un pequeño paso: cuando intentemos ejecutar algún programa de ejemplo, nos dará un error de compilación diciendo que falta la libreria j3dcore-ogl. Esta librería podemos instalarla desde los repositorios a través del paquete libjava3d-jni, pero luego tenemos que enlazarla dentro del JDK de Oracle que estamos usando…
    sudo aptitude install libjava3d-jni
    sudo ln /usr/lib/jni/libj3dcore-ogl.so /usr/local/jdk1.8.0_40/jre/lib/amd64/libj3dcore-ogl.so

    fuente:https://elblogdelbardo.wordpress.com/2015/03/06/netbeans-8-y-java3d-en-kubuntu-14-10/

    ResponderEliminar
  6. todos aquellos que solo llegan a copiar el codigo para que les funcione correctamente deben tener instalado el API para ello aqui tienen una guia https://censorcosmico.blogspot.com/2013/10/instalacion-de-la-api-java3d.html con eso ya el codigo corre perfectamente :)

    ResponderEliminar
  7. hola a todos, intente utilizar el codigo segun las recomendaciones dadas pero me paso igual que chibi usami, adicionalmente me sale error en esta parte del codigo BranchGroup escena = crearEscenaGrafico(); les agradezco mucho si me pueden ayudar.

    ResponderEliminar
  8. Hola
    Me funcionó con copiar y pegar
    Utilizo NetBeans 8.2

    ResponderEliminar
  9. Gracias por tú código
    Sí funcionó.

    ResponderEliminar
  10. ya que me sale como error algo del thread exception j3d rendering o sera xq estoy usando java netbeans con jdk 21? ayudeme

    ResponderEliminar

Con la tecnología de Blogger.