- Preliminares
- Conceptos
Generales - El Primer
Ejemplo: HelloJava3D.java - Animación:
Behavior - Bibliografía
1.
Preliminares.
En los últimos años, la cantidad y
calidad de
aplicaciones de software libre ha aumentado de forma
exponencial. Actualmente, su penetración en el mundo de
la empresa es
lento, pero constante. Su futuro es prometedor. No obstante, el
desarrollo es
muy desigual. Algunos sectores disponen de programas
excelentes. Sin embargo, otros han de conformarse con
aplicaciones en grado de desarrollo inicial.
Teniendo en cuenta la evolución del sistema libre,
todo nos indica que es simple cuestión de tiempo el que
estas áreas sean ocupadas. En el modelado y la
animación 3D por computadora se dispone de
aplicaciones con las que es posible trabajar de forma
profesional, aunque todavía no con la facilidad y productividad de
las herramientas
propietarias, pero se espera un gran desarrollo de aplicaciones
libres en los próximos años.
Este manual pretende
ser una introducción al lenguaje
Java3D. En este capítulo introductorio vamos a
conocer qué es y que nos ofrece Java3D, a saber
cómo podemos obtenerlo e instalarlo, algunas
recomendaciones para iniciar con un buen modelado, cuáles
son sus ventajas y desventajas, y finalmente, haremos una breve
descripción de lo que veremos a
través de todo el manual.
Es recomendable que el lector tenga conocimientos
básicos sobre geometría en 2D y 3D y Java,
debido a que en muchas ocasiones haremos mención de
conceptos como plano cartesiano, espacio tridimensional, etc.,
además del conocimiento
elemental de navegación por directorios y manejo de
archivos
conforme a la plataforma que el usuario haya elegido, ya que
Java, como es
sabido, puede ser usado en Linux, Unix, Mac,
©Windows, etc.,
tal como veremos en este capítulo.
No nos detenemos a explicar cuál es cada uno de
los conceptos mencionados. Sin embargo, se ha incluido una
bibliografía
relativamente extensa para aquellos que aún no
están del todo inmersos en el mundo del modelado, la
animación por computadora y
Java.
La API (Application Program Interface)
Java3D es una interfaz de programación utilizada para realizar
aplicaciones y applets con gráficos en tres dimensiones. Proporciona a
los desarrolladores un alto nivel para crear y manipular objetos
geométrios 3D y para construir las estructuras
utilizadas en el renderizado de dichos objetos. Se pueden
describir grandes mundos virtuales utilizando estos
constructores, que proporcionan a Java3D la suficiente información para hacer un renderizado de
forma eficiente.
Java3D proporciona a los desarrolladores de
gráficos 3D la principal característica de Java:
escribe una vez y ejecútalo donde sea. Java3D es
parte del conjunto de APIs JavaMedia, lo cual hace que
esté disponible en un gran número de plataformas.
También, se integra correctamente con Internet ya que tanto los
applets como las aplicaciones escritas utilizando Java3D tienen
acceso al conjunto completo de clases de Java.
Los objetos geométricos creados por los
constructores residen en un universo virtual, que luego es
renderizado. El API está diseñado con flexibilidad
para crear universos virtuales precisos de una amplia variedad de
tamaños, desde astronómicos a
subatómicos.
A pesar de toda esta funcionalidad, la API es sencilla
de usar. Los detalles de renderizado se manejan
automáticamente. Aprovechándose de los Threads,
Java3D es capaz de renderizar en paralelo.
Un programa Java3D
crea ejemplares de objetos y los sitúa en un estructura de
datos de escenario gráfico. Este escenario
gráfico es una composición de objetos 3D en una
estructura de
árbol que especifica completamente el contenido de un
universo
virtual, y cómo va a ser renderizado.
Java3D introduce algunos conceptos que no se consideran
habitualmente como parte de los entornos gráficos, como el
sonido
espacial 3D. Las posibilidades de sonido permiten proporcionar
una experiencia más realista al usuario.
objetivos,
siendo el principal el rendimiento. Se tomaron diferentes
decisiones relativas al modelado de tal forma que las
implementaciones de Java3D proporcionaran el mejor rendimiento
posible a las aplicaciones de usuario. En particular, cuando se
realizan distribuciones, se elige la alternativa que permite
obtener mejores prestaciones
en tiempo de ejecución.
Otros objetivos importantes de Java3D son:
- Proporcionar un amplio conjunto de utilidades que
permitan crear mundos en 3D interesantes. Se evitó
incluir características no esenciales o que se
podrían colocar directamente sobre Java3D. - Proporcionar un paradigma de
programación orientado a objeto de alto nivel para
permitir a los desarrolladores generar sofisticadas
aplicaciones y applets de forma rápida. - Proporcionar soporte a cargadores en tiempo de
ejecución. Esto permite que Java3D se adapte a un gran
número de formatos de ficheros, como pueden ser formatos
específicos de distintos fabricantes de CAD, formatos de
intercambio o VRML 1.0 (Virtual Reality Modelling
Language) y VRML 2.0.
Las aplicaciones en Java3D construyen los distintos
elementos gráficos como objetos separados y los conectan
unos con otros mediante una estructura en forma de árbol
denominada grafo de escena. La aplicación manipula
los diferentes objetos utilizando los métodos de
acceso, de modificación y de unión definidos en su
interfaz.
1.2.1. Modelo De
Programación Del Grafo De Escena.
El modelo de programación basado en el grafo de
escena de Java3D proporciona un mecanismo sencillo y flexible
para representar y renderizar escenas. El grafo de escena
contiene una descripción completa de la escena o universo
virtual. Esta descripción incluye datos sobre la
geometría, información de los
distintos atributos, así como información de
visualización necesaria para renderizar la escena desde un
punto de vista en particular.
La ventaja que ofrece la API de Java3D respecto a APIs
anteriores es que permite diseñar la escena
basándose en objetos geométricos, y no en triángulos; otra mejora es que Java3D nos
permite programar centrándonos en la escena y su
composición y no en obtener un código
para renderizar con eficiencia dicha
escena.
Java3D proporciona la base necesaria para añadir
nuevas funcionalidades utilizando código Java. Las
aplicaciones de Java3D pueden incluir objetos definidos
utilizando un sistema de CAD o de animación. Algunos
paquetes de modelados tienen distintos formatos externos que son,
en muchos casos, propietarios. Mediante el uso de modeladores
externos se pueden exportar geometrías a fichero, esta
información podrá ser utilizada por Java3D, siempre
que la aplicación proporcione un método
para leer y traducir dicha información geométrica
en primitivas Java3D.
De forma similar, cargadores VRML analizarán y
traducirán ficheros VRML y generarán los objetos
Java3D apropiados y el código Java necesario para poder utilizar
el contenido de los ficheros.
Navegadores:
Los navegadores
actuales pueden aceptar contenido 3D pasando información a
visores 3D (plug-ins) que la renderizan dentro de su
propia ventana. En un futuro no serán necesarios estos
visores 3D, ya que serán los navegadores los que se
encarguen directamente de la gestión
de los objetos 3D.
Juegos:
Los desarrolladores de software para juegos 3D
siempre han intentado aprovechar, en la medida de lo posible, las
posibilidades del hardware disponible.
Históricamente, han utilizado optimizaciones
específicas del hardware y, por su puesto, no portables.
De esta forma trataban de lograr el mejor rendimiento
posible.
Por esta razón, la programación
típica de juegos se realizaba a un nivel de
abstracción menor que el sencillo nivel de Java3D. Sin
embargo, la tendencia actual en la creación de juegos 3D
es usar aceleradores hardware 3D de "propósito general" y
utilizar menos "trucos" para la renderización. Así
pues, aunque Java3D no fue explícitamente diseñado
para satisfacer las expectativas de los desarrolladores de
juegos, sus sofisticadas técnicas
de implementación proporcionan un rendimiento más
que suficiente para realizar distintas aplicaciones de este tipo.
Puede criticarse, de cualquier forma, que las aplicaciones
escritas con una API general, como puede ser Java3D, pueden tener
una ligera penalización en cuanto a rendimiento en
comparación con otras que utilicen técnicas no
portables. Sin embargo, otros factores como la propia
portabilidad, el tiempo de desarrollo y el coste pueden
también tenerse en cuenta para contrarrestar ese
pequeño déficit de rendimiento.
Página siguiente |