- 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 |