Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Andrés Eloy Castillo
Java3D
Biblioteca
Bibli t
API de
Clases.
Prof. Andrés Eloy Castillo
Elementos de un escena 3D + evidente
Lo
Una escena 3D tiene al menos.
• Objetos visibles
Los cuales tienen
• Posición.
• Orientación.
• Color
Color.
• Textura
• Transparencia
• Geometría
• Luces
Las cuales tienen: Cambios en el tiempo
• Características de difusión de la luz. Los elementos pueden cambiar de
• Posición. • Posición.
• Orientación • Orientación
• Color • Tamaño
• Fondo Los cambios pueden ocurrir:
• Color
C l • Como respuestas a eventos del
Como respuestas a eventos del
• Imágenes asociadas usuario.
• Programados (animación).
Prof. Andrés Eloy Castillo
Punto de Vista
Prof. Andrés Eloy Castillo
Representación
Una escena 3D requiere de un lugar de representación.
Generalmente se le llama Canvas
Generalmente se le llama Canvas al
al “lienzo”, que soporta la representación
lien o , que soporta la representación
gráfica.
Prof. Andrés Eloy Castillo
Objetos Visibles
La información asociada a la geometría del objeto, se encapsula
en objetos que instancian la clase Geometry.
La información asociada al color, textura, material y
transparencia se almacenan en objetos de la clase Appearance.
Shape3D
Geometry Appearance
Prof. Andrés Eloy Castillo
Asociando geometrías y apariencias a las objetos Shape3D.
En Java3D, podemos asociar geometrías (Geometry) y apariencias (Appearance), a una
En Java3D podemos asociar geometrías (Geometry) y apariencias (Appearance) a una
forma 3D (Shape3D), utilizando 2 de sus métodos: setGeometry y setAppearance
Ejemplo:
Suponga que tenemos dos objetos: geometria y apariencia, que instancian de Geometry
y de Appearance respectivamente.
Queremos asociar esta información a un objeto de la clase Shape3D.
Haríamos lo que sigue:
Shape3D forma3D = new Shape3D(); // Se crea un objeto de la clase Shape3D.
forma3D.setGeometry(geometria); // Se asocia forma3D al objeto geometria.
forma3D.setAppearance(apariencia): se asocia forma3D al objeto apariencia.
Prof. Andrés Eloy Castillo
Recordar que:
• Los objetos visibles pertenecen a la clase Shape3D.
• La información de forma,
forma viene encapsulada,
encapsulada en obje‐
obje
tos de la clase Geometry.
• La información de textura,
textura material,
material transparencia y
color, viene en objetos, de la clase Appearance.
La asociación de un objeto de la clase Shape3D y objetos de la clase Geometry y
Appearance se hace a través de dos métodos de Shape3D.
• setGeometry
• setAppearance
Shape3D
Geometry Appearance
Prof. Andrés Eloy Castillo
Posición, orientación y escala.
Los objetos visibles, no se mueven, ni giran, ni cambian de tamaño, por si
mismos.
Quienes se encargan de trasladar, rotar y/o escalar, los objetos visibles
3D, son objetos del tipo TransformGroup.
Entonces, si de quiere trasladar, rotar y/o cambiar de tamaño a un objeto
visible (clase Shape3D o descendientes), es necesario crear un objeto del
tipo TransformGroup.
La relación entre un TransformGroup y un Shape3D, es de padre a hijo.
Un TransformGroup, puede tener muchos hijos.
TG
Un Shape3D solo puede tener un padre.
// objetoVisible3D un objeto Shape3D, creado previamente.
TransformGroup tg = new TransformGroup();
= new TransformGroup();
Shape3D objetoVisible3D = new Shape3D(); Shape3D
tg.addChild(objetoVisible3D);
Prof. Andrés Eloy Castillo
Prof. Andrés Eloy Castillo
Transform3D
Ciertamente, que los objetos Transform‐
Group, realizan operaciones de traslación,
rotación y escalamiento …………
Métodos: rotX, rotY, rotZ, setTranslation &
scale
// objetoVisible3D ya existe, (creado previamente).
TransformGroup tg = new TransformGroup(); tg.addChild(objetoVisible3D);
= new TransformGroup(); tg addChild(objetoVisible3D);
Transform3d tf3D = new Transform3D(); tf3D.rotX(Math.PI/4.0);
Tg.setTransform(tf); // RESULTADO: el objeto visible rota en relación al eje X, 45°.
Los puntos de inserción
BranchGroup
TG BG
Prof. Andrés Eloy Castillo
Relaciones entre BranchGroup, TransformGroup y Shape3D
Un Shape3D, puede relacionarse con objetos Geometry
p ,p j y yy con objetos Appearance.
j pp
Los objetos Geometry y Appearance, le dan forma, color, textura, transparencia,
tipo de material, a los objetos Shape3D.
Para relacionar objetos Shape3D, con objetos Geometry y objetos apariencia, los
objetos Shape3D, cuentan con los métodos setGeometry y setAppearance.
Las relaciones entre objetos BranchGroup, TransformGroup y Shape3D, son
relaciones de padre a hijo BranchGroup y TransformGroup, utilizan el método
relaciones de padre a hijo. BranchGroup y TransformGroup utilizan el método
addChild. (addChild podria traducirse, como agregar un hijo).
Prof. Andrés Eloy Castillo
Algunas clases que descienden de Shape3D.
Box
Cylinder
Cone
Estas formas básicas, permiten la creación de figuras
complejas por composición al agregar, trasladar, rotar
y cambiar de tamaño estos objetos.
bi d t ñ t bj t
Estas formas instancias de clases que descienden de
Shape3D, admiten cambios en color, textura,
Shape3D, admiten cambios en color, textura,
material y transparencia.
sphere
Prof. Andrés Eloy Castillo
Un ejemplo ……
El satélite, tiene como elemen‐
tos fundamentales,
fundamentales objetos de
la clase Box y de la clase
Cylinder:
Box
• El cuerpo (caja roja).
• Los paneles solares (cajas azu‐
les).
les)
Cylinder
• El eje que mantiene a los pa‐ Shape3D
neles ((tubo blanco).
) • Las antenas parabólicas grises, ele‐
mentos Shape3D, con elementos Geo‐
Cone
metry y Appearance, asociados.
• Conos de iluminación de las • Los elementos Geometry, modelan
antenas (conos amarillos). una paraboloide.
Sphere • Los elementos Appearance, le consig‐
• La tierra, una esfera a la cual nan el color gris.
se le agregó textura. Prof. Andrés Eloy Castillo
ColorCube
Constructores
• ColorCube()
• ColorCube( double longitudArista)
ColorCube es una clase que desciende, de Shape3D,
ya viene asociada con elementos de Geometry
i i d l t d G t y de
d
Appearance.
Se puede escoger el tamaño designando la longitud
de la arista.
ColorCube es muy útil, en la fase de aprendizaje de
java3D.
Prof. Andrés Eloy Castillo
Prof. Andrés Eloy Castillo
PlatFormView y View + = View
PlatformView
View es una clase de java3D, que representa el punto de vista de
es una clase de java3D que representa el punto de vista de
la escena 3D y que toma en cuenta elementos físicos, de
ambiente y de representación de la imagen.
PlatformView es una clase que se relaciona con View y con un
es una clase que se relaciona con View y con un
TransformGroup.
View
• Los objetos PlatformView, son manipulados por objetos
TransformGroup.
• La posición y orientación de un objeto PlatformView, determina
El punto de vista de la escena.
• Para cambiar un punto de vista, usaremos Transform3D, para
f
calcular posición y orientación, TransformGroup para realizar la
transformación y un objeto View asignado como hijo de
a s o G oup pa
TransformGroup para captura de la imagen, desde la posíción
a captu a de a age , desde a pos c ó yy
orientación calculada por Transform3D.
PlatformView
Prof. Andrés Eloy Castillo
View PlatformView
PhysicalBody PhysicalEnvironment
View
Prof. Andrés Eloy Castillo
Canvas3D
Un Canvas3D,
Canvas3D es el “lienzo”
lienzo , donde se forma la imagen,
imagen la
cual depende del punto de vista, determinado por Plat‐
formView y View y de los elementos Shape3D, las luces,
l fondos
los f d y los
l valores
l d otros objetos
de b asociados..
d
Prof. Andrés Eloy Castillo
View & Canvas3D
El Canvas3D debe agregarse al View a través del método addCanvas3D, de
View
Supongamos un objeto canvas3D que instancia de una clase Canvas3D
Prof. Andrés Eloy Castillo
PhysicalEnvironment
Transform3D
Realiza los cálculos
Realiza los cálculos.
View captura la imagen, desde la posición y orientación,
TransformGroup
impuesta por un f a TG
Un PlatfomView.
La relación entre TransformGroup y PlatformView, es de padre a hijo.
Un TransformGroup agrega hijos del tipo View, con el método addChild.
Un TransformGroup agrega hijos del tipo View, con el método addChild. View
La relación entre PlatformView y View es de asociación.
PlatformView
Prof. Andrés Eloy Castillo
Armando la rama de visualización.
PlatformView
S
Suponemos que ya existe un objeto Canvas3D (canvas3D), correctamente configurado.
it bj t C 3D ( 3D) t t fi d
Dos Ramas
• Una para la visualización (renderización) de la escena.
• Definir el punto de vista, posición y orientación, las características
d l usuario,
del i losl elementos
l i
iterativos
i (j
(joystick,
i k lentes
l 3D por
3D,
ejemplo), el elemento donde se plasman las imágenes de las escenas
y el tipo de visualizador con sus características técnicas.
• La otra para enlazar los elementos que están en la escena.
escena
• Esta seria lo que denomina la rama de volumen, es la rama que se
encarga de definir los elementos que serán visibles, en la escena,
cual será su textura, su tipo de material, su color, su transparencia y
su geometría, también en esta rama se define los tipos, cantidad,
orientación y posición de los elementos de iluminación, se define el
fondo de la escena y se define los alcances de los elementos, p por
ejemplo cual es el volumen de incidencia de una luminaria.
Prof. Andrés Eloy Castillo
Locale Referencia e integración.
Rama Visualización.
Rama Volumen
Prof. Andrés Eloy Castillo
VirtualUniverse El que agrupa todos los elementos
Prof. Andrés Eloy Castillo
El Grafo
El concepto de grafo, se
puede aplicar a las escenas
gráficas.
Podemos hablar entonces
de los grafos de escena.
Nodo
Nodo
Prof. Andrés Eloy Castillo
El Grafo de Escena
Prof. Andrés Eloy Castillo
Ejemplo de un Grafo de Escena En general la rama de visua‐
lización mantiene la misma es‐
tructura, y los cambios se dan
en las transformaciones que
realiza el TG de esta rama.
La rama de d volumen,
l varia
mucho según la escena, en la
misma medida que varían el
número,, p
posición,, apariencia
p de
los elementos; el fondo de la
escena y los elementos de ilu‐
minación.
Prof. Andrés Eloy Castillo
SimpleUniverse Para simplificar los programas 3D.
Se utiliza SimpleUniverse
para preocuparse solamen‐
te de la rama Volumen de la
Escena Gráfica.
Prof. Andrés Eloy Castillo
Prof. Andrés Eloy Castillo
SimpleUniverse.getPreferredConfiguration().
No pierda de vista que ……………….
SimpleUniverse es una clase que agrupa todos los componentes de una escena 3D.
Esto quiere decir que SimpleUniverso debe contener, objetos de los siguientes
tipos VirtualUniverse,
tipos: VirtualUniverse Locale,
Locale TransformGroup,
TransformGroup PlatformView,
PlatformView View,
View Physical‐
Physical
Body y PhysicalEnvironment.
Cada una de estos objetos está preconfigurado.
Los objetos Canvas3D, deben ser configurados, en función especifica de la
maquina que aloja el programa, SimpleUniverse, tiene un método estático, para
conseguir implementar la configuración del objeto instancia de Canvas3D.
El método se denomina getPreferredConfiguration().
Usaremos el método getPreferredConfiguration, cada vez que queramos crear un objeto Canvas3D.
GraphicsConfiguration
Prof. Andrés Eloy Castillo
GraphicsConfiguration es un objeto de la librería awt.
Entonces debe usarse import java.awt.*;
• Se interroga al hardware de la maquina con getPreferredConfiguration() y el
resultado de la consulta se le asigna a un objeto GraphicsConfiguration.
• Se declara y se crea un objeto del tipo Canvas3D.
• Para la creación del Canvas3D se utiliza el constructor de Canvas3D que tiene como
argumento único un objeto del tipo GraphicsConfiguration.
// Sección de código de ejemplo, creación objetos Canvas3D
GraphicsConfiguration
p g configg = SimpleUniverse.getPreferredConfiguration();
p g g ();
Canvas3D canvas3D = new Canvas3D(config);
Prof. Andrés Eloy Castillo
SimpleUniverse
• Crear una clase que herede de JFrame.
RECETA
Esta clase servirá de ventana principal
de visualización.
CREAR
• Crear un objeto Canvas3D, configurarlo en
MUNDOS
con el método getPreferredConfigura‐
tion() de SimpleUniverse
tion() de SimpleUniverse.
VIRTUALES
GraphicsConfiguration config;
Config = SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas3D = new Canvas3D(config);
• Crear un objeto SimpleUniverse .
• Utilice el constructor que lo relaciona directamente con el Canvas3D.
• SimpleUniverse u = new
u = new SimpleUniverse(canvas3D).
SimpleUniverse(canvas3D)
• Agregar parámetros por defecto, al objeto SimpleUniverse
• u.getViewingPlatform().setNominalViewingTransform();
Prof. Andrés Eloy Castillo
Receta para generar mundos Virtuales II
• Generar un BranchGroup.
• Este objeto BranchGroup, pasa a ser la base de la rama Volumetrica.
• A esta rama se le agregarán TransformGroup, BranchGroup o Shape3D,
dependiendo de la complejidad de la escena.
• Para agregar elementos al objeto tipo BranchGroup se utiliza el método
addChild de esta clase. //Sección código de crear Rama.
//
// En este caso se le agrega un ColorCube
g g
BranchGroup bg = new BranchGroup();
ColorCube cuboColor = new ColorCube();
bg.addChild(cuboColor);
• Agregar el BranchGroup
l hG al SimpleUniverse
l Si l i
• Utilizar el método addBranchGroup de la Clase SimpleUniverse
• //Sección código de agregar rama volumen a SimpleUniverse
• // u es un SimpleUniverse y bg es un BranchGroup
• u.addBranchGraph(bg);
• Compilar la rama de volumen.
• //Sección Código de compilación rama volumen
//Sección Código de compilación rama volumen
• //bg es un BranchGroup, con descendencia ya agregada.
• bg.compile();
Prof. Andrés Eloy Castillo
C l C b
ColorCube
Algunos
Ejemplos
Bá i
Básicos …………
Prof. Andrés Eloy Castillo
Creación de la ventana básica de demostraciones
Utilizaremos la misma clase
VentanaDemoJava3D en todos los ejemplos.
Prof. Andrés Eloy Castillo
1er Ejemplo un cubo de colores
BranchGroup
TransformGroup
ColorCube
Rama Volumen
Prof. Andrés Eloy Castillo
Ejecutando Prueba01
j
Prof. Andrés Eloy Castillo