Programar y manipular objetos en tercera dimensión utilizando Java es posible gracias a la librería Java 3D, de la cual voy a escribir en este post.
En Java, para generar gráficos en tercera dimensión es posible gracias a Java 3D. Se requiere descargar el siguiente archivo:
Ahora vamos a crear una sencilla aplicación donde tenemos un cubo en 3D y lo haremos rotar en los 3 ejes, el X, el Y y el Z.
Creamos un proyecto en Netbeans y dejamos intacta la clase principal que se genera con dicho proyecto. Yo lo llamaré 3DTest.
Se importa la librería Java 3D que está disponible en el enlace arriba. Se deben agregar los 3 archivos que están disponibles en la carpeta lib.
Ahora se necesita crear algunos objetos.
[codesyntax lang=»java»]
1 2 3 4 5 |
SimpleUniverse universo = new SimpleUniverse(); BranchGroup grupo = new BranchGroup(); ColorCube cubo = new ColorCube(0.3); TransformGroup GT = new TransformGroup(); Transform3D transformar = new Transform3D(); |
[/codesyntax]
En el objeto «universo» es donde se coloca todo. En el objeto «grupo» van las figuras que se generen. En el objeto «cubo» se genera un cubo cuyo tamaño se establece en el parámetro que aparece como 0.3.
Los objetos «GT» y «transformar» son los que nos van a permitir modificar las propiedades del cubo que se ha generado.
Al crear estos objetos nos aparecerá la opción de importar las librerías necesarias.
Ahora voy a crear un método que contendrá las instrucciones para crear el cubo en 3D. Renombraré la clase a Cube3D y crearé el método Cube3D.
Las instrucciones serán las siguientes:
[codesyntax lang=»java» lines=»no»]
1 2 3 4 5 6 7 8 9 10 11 |
public Cube3D() { GT.setTransform(transform); GT.addChild(cube); group.addChild(GT); universe.getViewingPlatform().setNominalViewingTransform(); universe.addBranchGraph(group); } |
[/codesyntax]
Se ha agregado el cubo al grupo de transformación, que se agrega al grupo que se agrega al universo. Se debe invocar este método desde el Main de nuestro proyecto.
Al ejecutar este código, el resultado es el siguiente:
Le voy a aumentar un poco el tamaño, cambiando el parámetro de la declaración del cubo ( ColorCube cube = new ColorCube(0.1);) a 0.3:
Ahora voy a hacer que el cubo empiece a rotar. Para ello me valdré de los Java Threads de los cuales ya he hablado antes en este blog.
Implementaré la interfaz runnable, con los métodos abstractos que ello implica.
Voy a declarar un hilo, lo voy a inicializar y voy a establecer que las propiedades del cubo puedan ser modificadas en tiempo de ejecución.
Ahora colocaremos la rotación. En el método abstracto, se coloca lo siguiente:
Al ejecutar el código, el resultado obtenido es el siguiente:
Como se puede observar el objeto rota en torno al eje Y. Se puede hacer que rote en torno a X o a Z, solo es necesario cambiar la instrucción.
El archivo donde está este proyecto lo pueden descargar desde el siguiente enlace.
Por último, un video mostrando el proyecto en tiempo de ejecución:
Para cualquier duda u opinión, no duden en comentar. Saludos.
Si desean más información sobre Java 3D, pueden visitar el siguiente sitio web (está en inglés): http://www.java3d.org/
Hola amigo, me ayudó mucho tu página, pero me surgió una duda. Me gustaría hacer un programa de un cubo rubik ¿Cómo puedo dividir el cubo? O, si tendría que agregar más ¿Cómo lo haría? Gracias
Ahí te toca investigar un poco más. No he seguido jugando con este tipo de programación
HOLA QUE TAL, SERA QUE ME PUEDEN AYUDAR CUANDO EJECTO EL CODIGO ME SALE ESTE ERROR( Exception in thread «AWT-EventQueue-0» java.lang.UnsatisfiedLinkError: no J3D in java.library.path) GRACIAS
No has incluido la librería correctamente
Hola Ale a mi me paso lo mismo tuve q copiar el «j3dcore-ogl.dll» a la carpeta C:\Program Files\Java\jdk-11.0.2\bin
Habia subido la librerias al path pero no me toma el dll y me tiraba el error ese.
Por ahora me corre XP
hola que tal!, en que parte exactamente puedo manipular la escala del cubo?
Muy buena explicación, pero tengo una duda, Si quiero moverlo sobre 2 ejes al mismo tiempo ¿Cómo seria? ¿tendría que agregar otro hilo?
Disculpe me podria proporcionar el codigo que sea de una letra por ejemplo M en 3D en el lenguaje de programacion DevC++
¿Cómo se puede crear un pentágono en 3d java y que métodos se ocupan para crear la figura en especifica?