jueves, 29 de noviembre de 2012

Introducción a Java3D

Hola a todos,
 
Continuaremos en nuestra serie de estudio sobre Java3D profundizando cada vez más en conceptos y dando paso a la codificación.
 
------
La estructura de un programa en Java3D es en forma de árbol. Cada objeto está a la vez formado por objetos elementales que son la asociación de una geometría y de una apariencia (color, textura, transparencia, etc). Java3D tiene predefinidos los objetos primitivos: Esfera, Caja, Cilindro y Cono, sin embargo, se puede construir cualquier objeto geométrico.
 
Para construir objetos más complejos será necesario usar los Grupos de Transformación (TransformGroup). Los grupos de transformación sirven para situar objetos en el espacio y crear animaciones. Permiten realizar rotaciones, traslaciones, expansiones, deformaciones, etc.
 
Todo grupo de transformación puede enlazarse con otro grupo de transformación, pero el primero de todos ellos debe estar encadenado a un Grupo de Rama (BranchGroup). Éste a su vez a un punto de referencia (Locale) que dependerá del Universo Virtual (VirtualUniverse). Locale sirve de raíz para el resto de ramas o grupos que formarán el árbol. El intermediario entre el Locale y los TransformGroup es el BranchGroup.
 
El siguiente diagrama es una representación de un Diagrama de Escena.
 
 
Jerarquía de Clases en Java3D
 
Se presenta a continuación el diagrama de jerarquía de clases en java3d: 

 
Node: Define las subclases para representar diagramas de escena.

Group: Superclase usada para establecer localizaciones y orientaciones de los distintos objetos visuales. Sus subclases son BranchGroup y TransformGroup.

Leaf: Superclase usada para especificar formas, sonidos y comportamientos de los objetos visuales. Algunas de sus subclases son: Shape3D (formas 3d), Light (iluminación), Behavior (comportamiento) y Sound (sonido).

NodeComponent: Superclase usada para especificar la geometría, apariencia, textura y propiedades materiales de una clase Shape3D. 

 
ETAPAS EN LA CREACIÓN DE UN PROGRAMA JAVA3D 

En java3D, hay que programar por etapas cada pieza del diagrama de la escena y después conectar cada etapa entre sí como si se estuviera ensamblando un todo con sus partes y componentes prefabricados. El orden de desarrollo sería:

1. Crear el objeto Soporte: Canvas3D
2. Crear el objeto Universo Virtual: VirtualUniverse
3. Crear el punto de referencia: Locale
4. Construir la Rama de Representación:
    4.1. Crear el objeto de Presentación
    4.2. Crear el objeto Plataforma
    4.3. Crear el Cuerpo y el Entorno
5. Construir la Rama de Contenido
6. Compilar el Diagrama de la Escena
7. Insertar subdiagramas (otras ramas) dentro del punto de referencia.

Una de las abstracciones de clases importantes está en la clase SimpleUniverse, que contiene elementos necesarios para la construcción de la Rama de Representación. Así, la clase SimpleUniverse permite abstraer los pasos 2, 3, 4, que pueden ser omitidos. El siguiente diagrama permite observar como se ve simplificado el Diagrama de Escena mediante el aprovechamiento de SimpleUniverse.


Así, mediante el aprovechamiento de la clase SimpleUniverse, el proceso simplificado queda así:

1. Adaptar el objeto SimpleUniverse
2. Crear el objeto Soporte: Canvas3D
3. Construir la Rama de Contenido
4. Compilar el Diagrama de la Escena
5. Insertar la Rama de Contenido dentro del punto de referencia (Locale) del objeto SimpleUniverse

Vale la pena recordar respecto a java: las clases constan de contructores, métodos y campos. Los constructores nos permiten crear objetos definidos en una clase determinada. los métodos son funciones definidas dentro de las clases que gestionan la información recopilada por los constructores. Los campos son variables definidas que contienen información.

Los constructores para la clase SimpleUniverse son:

- SimpleUniverse() es el constructor por defecto.
- SimpleUniverse(Canvas3D canvas3D) construye un universo virtual estándar con referencia al objeto de soporte Canvas3D canvas3D.

Por concepto el Universo Virtual se refiere a aquel universo que imaginamos que se esconde detrás de la pantalla. Al programa en 3 dimensiones lo que  se pretende es conseguir que el cerebro del usuario procese información 2D como si se tratara de objetos 3D. Este efecto se consigue proyectando haces de luz desde el objeto virtualmente ubicado detras de la pantalla al ojo del usuario. En un plano imaginario (la pantalla) entre el objeto virtual y el ojo iremos dibujando estas proyecciones de manera que el resultado final será la imagen que apreciará el usuario como tridimensional.

Por defecto el plano imaginario se encuentra en el centro de SimpleUniverse con coordenadas x, y, z (0, 0, 0). El eje de las x es la línea horizontal con los valores positivos a la derecha. El eje de las y es la lína vertical con los valores positivos hacia arriba. El eje de las z es la línea que va dirigida desde fuera hacia dentro de la pantalla con los valores positivos dirigidos fuera de la pantalla. Los valores de los ejes están comprendidos entre -1 y 1.

Es necesario tener presente que no podemos ver objetos desde una distancia cero. Así que la clase SimpleUniverse contiene un método llamado setNominalViewingTransform que sitúa automáticamente el ojo de visión en la posición (0, 0, 2.41) centrada pero separada del origen y en 2.41 hacia atrás.

------

Muy bien, con toda esta información y comprensión, nos prepararemos para nuestro próximo post donde iniciaremos con la codificación de programas en java3D.

Un saludo para todos.

[nkt]




 

No hay comentarios:

Publicar un comentario