Programa en java sobre transformaciones tridimensionales.
DESARROLLO
Clase principal
import javax.swing.JOptionPane;
public class Main {
public static void main (String[]args){
int a = JOptionPane.showOptionDialog(null,"Seleccione opcion","Selector de opciones",JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,null,new Object[] { "Traslacion", "Rotacion", "Escalamiento","Sesgado","Perspectiva" },"Traslacion");
switch(a){
case 0:
Traslacion obj=new Traslacion();
break;
case 1:
Rotacion obj1=new Rotacion();
break;
case 2:
Escalamiento obj2=new Escalamiento();
break;
case 3:
Sesgado obj3=new Sesgado();
break;
case 4:
Perspectiva obj4=new Perspectiva();
break;
}
}
}
Clase traslación
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.SimpleUniverse;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.vecmath.Vector3f;
public class Traslacion implements Runnable{
SimpleUniverse universo = new SimpleUniverse();
BranchGroup grupo = new BranchGroup();
ColorCube cubo = new ColorCube(0.3);
TransformGroup GT = new TransformGroup();
Transform3D transformar = new Transform3D();
Thread hilo=new Thread(this);
float t=-1;
boolean flag=true;
public Traslacion(){
hilo.start();
GT.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
transformar.rotY(1.1);
GT.setTransform(transformar);
GT.addChild(cubo);
grupo.addChild(GT);
universo.getViewingPlatform().setNominalViewingTransform();
universo.addBranchGraph(grupo);}
public static void main(String[]args){
new Traslacion();}
@Override
public void run(){
while(Thread.currentThread()==hilo){
try{
if (t>=1)
flag=false;
else if(t<=-1)
flag=true;
if (flag==true)
t+=0.1;
else if(flag==false)
t-=0.1;
Vector3f vector = new Vector3f(t, .0f, .0f);
transformar.setTranslation(vector);
GT.setTransform(transformar);
Thread.sleep(100);}
catch(Exception e){
}
}
}
}
Clase escalamiento
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.SimpleUniverse;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.vecmath.Vector3d;
public class Escalamiento implements Runnable{
SimpleUniverse universo = new SimpleUniverse();
BranchGroup grupo = new BranchGroup();
ColorCube cubo = new ColorCube(0.3);
TransformGroup GT = new TransformGroup();
Transform3D transformar = new Transform3D();
Thread hilo=new Thread(this);
double t=0;
boolean flag=true;
public Escalamiento(){
hilo.start();
GT.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
transformar.rotY(1.1);
GT.setTransform(transformar);
GT.addChild(cubo);
grupo.addChild(GT);
universo.getViewingPlatform().setNominalViewingTransform();
universo.addBranchGraph(grupo);
}public static void main(String[]args){
new Escalamiento();}
@Override
public void run(){
while(Thread.currentThread()==hilo)
{
try{
if (t>=1)
flag=false;
else if(t<=.1)
flag=true;
if (flag==true)
t+=0.1;
else if(flag==false)
t-=0.1;
transformar.setScale(t);
GT.setTransform(transformar);
Thread.sleep(100);
}
catch(Exception e){
}
}
}
}
Clase rotación
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.SimpleUniverse;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
public class Rotacion implements Runnable{
SimpleUniverse universo = new SimpleUniverse();
BranchGroup grupo = new BranchGroup();
ColorCube cubo = new ColorCube(0.3);
TransformGroup GT = new TransformGroup();
Transform3D transformar = new Transform3D();
Thread hilo=new Thread(this);
double t=0;
public Rotacion(){
hilo.start();
GT.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
GT.setTransform(transformar);
GT.addChild(cubo);
grupo.addChild(GT);
universo.getViewingPlatform().setNominalViewingTransform();
universo.addBranchGraph(grupo);
}
public static void main(String[]args){
new Rotacion();
}
@Override
public void run(){
while(Thread.currentThread()==hilo){
try{
t+=0.1;
transformar.rotY(t);
GT.setTransform(transformar);
Thread.sleep(100);
}
catch(Exception e){
}
}
}
}
Clase sesgado
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.SimpleUniverse;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
public class Sesgado implements Runnable{
SimpleUniverse universo = new SimpleUniverse();
BranchGroup grupo = new BranchGroup();
ColorCube cubo = new ColorCube(0.3);
TransformGroup GT = new TransformGroup();
Transform3D transformar = new Transform3D();
Thread hilo=new Thread(this);
double t=0;
public Sesgado(){
hilo.start();
GT.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
GT.setTransform(transformar);
GT.addChild(cubo);
grupo.addChild(GT);
universo.getViewingPlatform().setNominalViewingTransform();
universo.addBranchGraph(grupo);
}
public static void main(String[]args){
new Sesgado();
}
@Override
public void run(){
while(Thread.currentThread()==hilo){
try{
t+=0.1;
transformar.mulTransposeLeft(transformar,transformar);
GT.setTransform(transformar);
Thread.sleep(100);
}
catch(Exception e){
}
}
}
}
Clase perspectiva
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.SimpleUniverse;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.vecmath.Vector3f;
public class Perspectiva implements Runnable{
SimpleUniverse universo = new SimpleUniverse();
BranchGroup grupo = new BranchGroup();
ColorCube cubo = new ColorCube(0.3);
TransformGroup GT = new TransformGroup();
Transform3D transformar = new Transform3D();
Thread hilo=new Thread(this);
float t=0;
boolean flag=true;
public Perspectiva(){
hilo.start();
GT.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
transformar.rotY(1.1);
GT.setTransform(transformar);
GT.addChild(cubo);
grupo.addChild(GT);
universo.getViewingPlatform().setNominalViewingTransform();
universo.addBranchGraph(grupo);
}
public static void main(String[]args){
new Perspectiva();
}@Override
public void run(){
while(Thread.currentThread()==hilo){
try{
if (t>=1)
flag=false;
else if(t<=-1)
flag=true;
if (flag==true)
t+=0.1;
else if(flag==false)
t-=0.1;
Vector3f vector = new Vector3f(.0f, .0f, t);
transformar.setTranslation(vector);
GT.setTransform(transformar);
Thread.sleep(100);}
catch(Exception e){
}
}
}
}
CONCLUSIONES
Dentro de java se pueden realizar imágenes bidimensionales de una forma relativamente sencilla, esto es posible mediante el uso de la clase Graphics2d la cual permite el dibujo de lineas dentro de un plano que nosotros hayamos creado, mediante el uso de esta clase también es posible la creación de imágenes en tres dimensiones, mas esta no es la manera mas eficiente de crear este tipo de imágenes ya que existe una serie de librerías especiales externas a las librerías normales de java que permite crear este tipo de imagen de manera sencilla, una de las mas conocidas y usadas para hacer este trabajo es Java3D.
Java3D o 3Djava es una API para gráficos de tres dimensiones para el lenguaje de programación Java, esta opera sobre OpenGL o Direct3D, a diferencia de las clases normales que podemos encontrar dentro de java de una manera predefinida Java3D es especial ya que originalmente fue desarrollada mediante el Proceso de Comunidad de Java, gracias a esto aunque no se encuentre dentro de Java de forma normal si que es posible descargarlo desde la pagina oficial de Oracle.
Java 3D como su nombre indica proporciona las herramientas necesarias para la creación de modelos en 3d, ademas de esto también permite realizar diversas transformaciones dentro de esta, algunas de las principales que podemos encontrar son la traslación, la rotación, el sesgado y el escalamiento de figuras.
Java3D a pesar de parecer una herramienta algo obsoleta puede ser utilizada para una gran variedad de acciones, entre algunas de las actividades que podemos realizar gracias a esta herramienta se encuentra el renderizado de modelos en 3d dimensiones, esto se debe a que Java3D admite el uso de diversos formatos utilizados para el modelado en 3d como por ejemplo los .obj, ademas del renderizado podemos utilizar esta herramienta para la creación de motores gráficos para videojuegos, un videojuego que utiliza esta herramienta es minecraft. Esta es una herramienta sumamente importante y su utilidad recae en que tan bien la persona que la este utilizando sepa aprovechar las diversas opciones que ofrece.
BIBLIOGRAFÍA
Boyarsky, J., & Selikoff, S. (2016). OCA/OCP Java SE 8 Programmer Certification Kit: Exam 1Z0-808 and Exam 1Z0-809 (Stg ed.). Sybex.
Chen, J. X., & Chen, C. (2016). Foundations of 3D Graphics Programming: Using Jogl and Java3d (2nd Softcover Reprint of the Original 2nd 2008 ed.). Springer.
D. (2016). Como Programar En Java (9.a ed.). Pearson Educación.
Lea, R., Matsuda, K., & Miyashita, K. (1996). Java for 3d and Vrml Worlds (Pap/Cdr ed.). New Riders Pub.
Palmer, I. (2012). Essential Java 3D fast: Developing 3D Graphics Applications in Java (Essential Series) (English Edition) (Softcover reprint of the original 1st ed. 2001 ed.). Springer.
Comments
Post a Comment