Para obtener Java3D es necesario entrar en la página de sus creadores: . En esta página podemos encontrar una liga de download, al entrar en ella podremos ver la gran variedad de recursos que ofrece Sun Microsystems, entre ellos Java3D, se nos preguntará qué versión queremos y para qué sistema operativo. Después de registrarnos como usuarios podremos descargar el paquete deseado y la documentación.
Java3D está disponible para la mayoría de las plataformas. Hay versiones para Solaris/Sparc, Solaris/x86, Linux y ©Windows, etc. La instalación es realmente sencilla y los requisitos que debe cumplir nuestra PC son los mismos que se necesitan para poder trabajar con Java en general. A continuación listamos dichos requisitos (mínimos) para tenerlos en cuenta antes de comenzar a trabajar.
- Sistema Operativo: ©Windows 95/98/Me/XP/2000, Linux, SolarisTM (plataforma SPARCTM), IRIX de SGI, HP-UX de HP, AIX de IBM.
- Java: Versión J2SE 1.4.0 o superior.
- Java3D: Versión 1.3 Beta 2 o superior.
- DirectX u OpenGL.
- Microprocesador: En plataformas x86, Pentium 200 MMX o superior.
- Memoria de 64 Mb de RAM o más.
- Espacio en disco: 150 Mb aproximadamente (Java + Java3D + DirectX u OpenGL).
Nosotros usamos la versión para ©Windows disponible como ejecutable (*.exe). Al ser ejecutado el archivo descargado se mostrará un asistente que guiará paso a paso al usuario para completar su instalación.
1.5. Procesos De Modelado Y Animación 3D.
El modelado en Java3D, al igual que en otras aplicaciones homólogas, consiste en construir objetos a partir de elementos geométricos. Los objetos 3D son sólidos virtuales formados por datos. Los datos tridimensionales se presentan en pantalla mediante líneas, puntos, degradados de color, imágenes o una combinación de todos ellos. Tradicionalmente, se ha modelado siempre en modo línea o en modo puntos. Sin embargo, desde hace unos años la potencia de los ordenadores y el uso de las capacidades 3D en tiempo real, ha permitido la posibilidad de trabajar en modo casi fotográfico. Esta técnica se conoce normalmente como Open- Gl. A pesar del atractivo indudable del modelado en Open-Gl, muchas veces el modo línea puede ser la forma más efectiva de afrontar un proyecto.
El texturizado consiste en recubrir nuestros objetos, o mejor dicho, la superficie de nuestros objetos, con imágenes que le proporcionen un aspecto muy realista. Las texturas, pueden ser fotográficas o procedurales. Las primeras, son fotografías digitalizadas. Las segundas, son producidas mediante algoritmos matemáticos. También se pueden aplicar a los objetos superficies rugosas o suaves para imitar esta propiedad de los objetos reales. Aprender a texturizar es básico para obtener un render lo más realista posible. Es necesario un trabajo importante de retoque y redimensionado de imágenes (mediante un editor de imágenes que generalmente es independiente de la aplicación 3D), antes de poner manos a la obra. Un proyecto concienzudo y una preparación meticulosa de las imágenes nos evitarán muchos quebraderos de cabeza. Los programas de 3D pueden volverse muy manejables si tenemos una buena planificación del trabajo a realizar además de creatividad. La creatividad del diseñador se verá reflejada en la calidad del trabajo 3D realizado y la herramienta, en nuestro caso Java3D, será sólo un complemento de ella.
¿Como obtener resultados muy realistas? ¿Hay trucos? ¿Hay libros? Bueno, el mejor truco es aprender a observar. Tenemos objetos a nuestro alrededor. Estos, tienen propiedades físicas, reflejan o absorben la luz de una determinada forma. Pueden dejar pasar la luz a través de ellos o producir reflejos especulares (espejos). Destellar como los cristales o brillar suavemente. Algunos incluso pueden emitir luz.
A poco que observemos los materiales naturales, descubriremos que la luz es el elemento central de la apariencia de los mismos. El mejor modelado pobremente iluminado se echa a perder. El texturizado más sofisticado no se aprecia. Incluso un resultado insignificante en los dos primeros aspectos puede ser corregido mediante una buena iluminación. El que conozca las técnicas cinematográficas sabe la importancia de la luz en el cine. Una escena gris y sin gracia puede convertirse en un universo vibrante mediante la iluminación. En 3D se vienen a utilizar técnicas similares de iluminación a las que se utilizan en los estudios fotográficos o cinematográficos, aunque no exactamente iguales, ya que los motores de render presentan ciertas limitaciones a la hora de imitar el comportamiento de la luz.
Las aplicaciones de Java3D en el mundo real al igual que otras herramientas del mismo tipo son un tanto obvias: cine, televisión, páginas Web, modelado gráfico, arquitectura (planos arquitectónicos), juegos, publicidad, etc.
Java3D es una buena opción de desarrollo para quien quiera realizar un entorno 3D, tanto para la Web, como para una aplicación específica.
Por su alto nivel de abstracción, la generalidad de su modelado y la facilidad del lenguaje es una gran herramienta de trabajo.
Además, proporciona todas las ventajas de ser un lenguaje basado en Java, con la portabilidad, y el código de fácil comprensión.
1.7. Ventajas Y Desventajas De Java3D.
Mientras el lector vaya descubriendo Java3D, también descubrirá que hay en él varias ventajas y desventajas. Entre esas ventajas destacamos las siguientes:
- Es completamente libre, lo cual implica otras ventajas como ahorro de recursos, modificación por parte de los usuarios para mejorarlo o adaptarlo a sus requerimientos, etc.
- Es multiplataforma.
- Fácil creación de animaciones.
- Fácil creación de juegos.
- No utiliza demasiados recursos de cómputo.
- Intenta optimizar el renderizado.
- En animación no hay demasiada necesidad de crear hilos como en la animación de Java2D.
- La documentación es buena, aunque la mayoría de ella se encuentra sólo en inglés.
- Se pueden explotar todas las características del lenguaje.
Respecto a las desventajas podemos mencionar:
- Es demasiado lento todavía para realizar proyectos en los que se requiera la velocidad como parte fundamental del mismo.
- Sólo se puede trabajar con Applets y algunos formatos especializados, no genera formatos de salida como AVI, JPG, etc.
- La mayoría de los recursos sólo se encuentran a través de la red y los más importantes sólo en el idioma inglés.
Por tales ventajas y desventajas vemos que Java3D es una herramienta de modelado y animación 3D bastante buena, pero lo más importante es ir descubriendo poco a poco todas sus capacidades y complementarlas con otras herramientas que nos ayuden a cumplir con nuestros objetivos como diseñadores y destacar que la creatividad del usuario es uno de los elementos más importantes para obtener un trabajo de calidad.
1.8. La Estructura De Este Manual.
Iniciamos en el capítulo dos explicando los conceptos generales de Java3D, algunos de estos son: universo virtual, objetos del grafo de escena, nodos hoja y algunos otros implicados en la construcción de aplicaciones 3D; posteriormente, en el mismo capítulo, veremos cómo se construye un árbol para una animación en Java3D dando un algoritmo que es bastante útil, también se explicará el concepto de sistema de coordenadas específico para Java3D, y otro tipo de sistema de coordenadas llamado "de alta resolución", también conoceremos algo sobre el renderizado y por último, se comenta algo sobre el uso de los paquetes Java3D.
En el capítulo 3 vamos a hacer un ejemplo muy sencillo, el HelloJava3D, éste se expandirá poco a poco a través de todo el manual para mostrar varias de las cosas que se pueden hacer con Java3D. Este ejemplo generará un simple cubo, pero nos ayudará a entender mejor la construcción de un grafo de escena, el algoritmo dado en el segundo capítulo y varias de las clases que se usan comúnmente en Java3D.
El capítulo número 4 habla sobre transformaciones, algunas de las cuales son aplicadas al ejemplo HelloJava3D, además, como se explica en el mismo capítulo, las transformaciones pueden ser combinadas para obtener algún tipo de resultado final; ese es también uno de los temas a tratar.
Finalmente, en el quinto capítulo se da una introducción sobre la animación en Java3D, sobre comportamientos, y se genera una variante del ejemplo HelloJava3D para aplicarle animación y combinar esa animación con las transformaciones hechas en el capítulo cuarto. En este capítulo también se da un algoritmo que nos ayudará a crear animaciones de una forma muy sencilla.
1.9. Convenciones De Este Manual.
Para facilitar la comprensión de este manual, tenemos tres convenciones que serán usadas constantemente. Aquí mostramos la lista:
- Las notas y algunas aclaraciones se mostrarán en recuadros grises a la izquierda o derecha de la página sobre la banda gris con la leyenda "NOTAS".
- Los conceptos más importantes los colocaremos en negritas o cursivas.
- Todo lo que mostremos en este tipo de letra será, código, clases o paquetes de Java3D.
2. Conceptos Generales.
Vamos a iniciar en este capítulo a comprender algunos de los conceptos básicos y más importantes sobre Java3D, tales como universo virtual, objetos del grafo escena y otros objetos implicados, construcción de un árbol, sistemas de coordenadas dentro de Java3D, coordenadas de alta resolución, modos de renderización y por último los paquetes de Java3D.
Un universo virtual de Java3D se crea a partir de un grafo de escena. Una definición habitual de grafo es una estructura de datos compuesta de nodos y arcos:
Nodos:
Un nodo es un elemento de datos. Los nodos del grafo de escena se corresponden con instancias de clases Java3D. A los nodos padre, se les denomina nodos grupo.
Arcos:
Un arco es una relación ente elementos de datos (representados por los nodos). Los arcos representan dos tipos de relaciones entre las instancias de Java3D, a saber:
1. La relación más habitual es la relación padre–hijo. Un nodo grupo puede tener varios hijos, pero sólo un padre. Un nodo hoja puede tener un padre, pero no hijos.
2. La otra relación es la de referencia. Una referencia asocia un objeto del tipo NodeComponent con un nodo del grafo de escena. Los objetos NodeComponent definen tanto la geometría como los atributos de apariencia que se utilizan para renderizar los objetos visuales.
Los grafos de escena de Java3D se construyen utilizando objetos Node unidos por relaciones padre–hijo formando una estructura de árbol. En una estructura de árbol, un nodo es la raíz. Se puede acceder al resto de los nodos del árbol siguiendo los arcos que parten del nodo raíz. Un grafo de escena está formado por árboles cuya raíz se sitúa en los objetos Locale. Los NodeComponent y los arcos de referencia no forman parte, realmente, del árbol del grafo de escena.
Existe sólo un camino desde la raíz de un árbol hasta cada una de las hojas, de igual forma, sólo hay un camino desde la raíz de un grafo de escena hasta cada uno de los nodos hoja. El camino desde la raíz de un grafo de escena hasta un nodo hoja en particular se llama el camino de escena de ese nodo hoja. Por lo tanto, teniendo en cuenta la propiedad antes descrita, cada nodo hoja tiene sólo un camino de grafo de escena. Cada camino de grafo de escena en Java3D specifica completamente la información del estado de su hoja. La información del estado incluye datos como la localización, orientación y tamaño de un objeto visual. Por lo tanto, los atributos de cada objeto visual dependen directamente de su camino de grafo de escena. El renderizador de Java3D utiliza esta propiedad y renderiza las hojas en el orden que él determina que es más eficiente.
Las representaciones gráficas de los grafos de escena sirven como herramienta de desarrollo así como de documentación para los programas de Java3D. Los grafos de escena se crean utilizando la notación mostrada en la Tabla 2.1. Los programas de Java3D pueden tener muchos más objetos que los que se muestran en el grafo de escena.
Para diseñar un universo virtual de Java3D se dibuja un grafo de escena utilizando el conjunto habitual de símbolos. Una vez se haya construido el programa, el grafo de escena creado es la representación precisa del mismo.
Nodos y NodeComponent (Objetos). | Arcos (Relaciones entre objetos). | ||
VirtualUniverse. | Relación padre- hijo. | ||
Locale. | Referencia. | ||
Group. | |||
Leaf. | |||
NodeComponent. | |||
Otros objetos. |
Tabla 2.1. Notación para grafos de escena.
En la tabla anterior, los símbolos de la columna de la izquierda representan los distintos objetos que se usan en el grafo de escena. Los dos primeros se corresponden con objetos de clases específicas: VirtualUniverse y Locale. Los tres símbolos siguientes representan objetos de las clases Group, Leaf y NodeComponent. Estos tres símbolos suelen llevar anotaciones para indicar la subclase a la que pertenece el objeto en cuestión. El último símbolo de la izquierda se utiliza para representar cualquier otro tipo de objeto. Por otro lado, los símbolos de la derecha representan los arcos que indican la existencia de relaciones. La flecha convencional representa una relación padre-hijo entre dos objetos y la flecha punteada referencia otro objeto. Los objetos que son referenciados se pueden compartir entre diferentes ramas del grafo de escena.
2.2 Objetos Del Grafo De Escena.
2.2.1 Objetos de la superestructura del grafo de escena.
Java3D define dos objetos de superestructura del grafo de escena, Virtual Universe y Locale, que se utilizan para contener los distintos subgrafos que forman el grafo de escena.
Objeto VirtualUniverse:
Un objeto de esta clase consiste en una lista de objetos Locale que contienen una serie de nodos del grafo de escena que existen en el universo. Normalmente, las aplicaciones sólo necesitan un universo virtual, incluso las bases de datos virtuales muy grandes. Las operaciones sobre este objeto incluyen la enumeración de los distintos objetos Locale contenidos en dicho universo.
Objeto Locale:
Contiene un conjunto de subgrafos del grafo de escena cuya raíz se corresponde con un nodo del tipo BranchGroup. Un objeto Locale también define la localización del universo virtual utilizando coordenadas de alta resolución (HiResCoord) para especificar la posición. El HiResCoord se utiliza como el origen de todos los objetos del grafo de escena contenidos en el Locale. Un objeto Locale no tiene padre en el grafo de escena, pero se une de forma implícita a un universo virtual cuando se construye. Este objeto puede referenciar un número arbitrario de nodos BranchGroup, pero no tiene hijos explícitos. Las coordenadas de todos los objetos del grafo de escena son relativas al HiResCoord del Locale en el que se encuentran. Las operaciones del objeto Locale incluyen establecer y obtener el HiResCoord y añadir y eliminar subgrafos.
2.2.2 Objetos de agrupación de nodos.
Los nodos de agrupación son los elementos de unión que se utilizan para construir un grafo de escena. Todos los nodos de agrupación pueden tener un número variable de nodos hijos incluyendo otros nodos de agrupación y nodos hoja. Estos hijos tienen un índice asociado que permite realizar operaciones sobre un hijo en particular. Sin embargo, salvo que se utilice alguno de los nodos de agrupación ordenados especiales, el renderizador de Java3D puede renderizar los hijos de un nodo de agrupación en el orden que considere más oportuno.
Nodos Group:
Los objetos Group son nodos de agrupación de propósito general. Tienen un solo padre y un número arbitrario de hijos. Entre las operaciones que proporciona este objeto están las de añadir, eliminar y enumerar los hijos del grupo. Las subclases de este objeto añaden semánticas adicionales.
Nodos BranchGroup:
Un nodo BranchGroup es la raíz de un subgrafo de una escena que puede compilarse como una unidad, unirse a un universo virtual o incluirse como hijo de un nodo de agrupación en otro subgrafo. Un subgrafo, cuya raíz sea un nodo de este tipo puede imaginarse como una unidad de compilación a la que se le pueden realizar las siguientes acciones:
- Compilarse mediante su método de compilación. Esta operación hará que se compile el subgrafo completo así como cualquier otro nodo de tipo BranchGroup contenido en dicho subgrafo (además de todos sus descendientes).
- Se puede insertar dentro de un universo virtual conectándolo con un objeto Locale, entonces, se dice que el subgrafo completo está vivo.
- Se puede desconectar el BranchGroup del subgrafo al que está contenido en tiempo de ejecución, siempre y cuando se den las condiciones necesarias para poderlo hacer.
- Puede cambiar de padre. Si un BranchGroup se encuentra dentro de un subgrafo, como hijo de algún otro nodo de agrupación, no se puede unir a un Locale.
Nodos TransformGroup:
Los nodos TransformGroup especifican una transformación espacial sencilla utilizando un objeto Transform3D que puede colocar, orientar y escalar todos sus hijos. La transformación especificada puede realizarse en los objetos aplicables. Si un nodo TransformGroup se utiliza como antecesor de un nodo ViewPlatform en el grafo de escena, entonces la transformación tiene que ser congruente, es decir, sólo se pueden realizar rotaciones, traslaciones y escalados uniformes en un camino directo desde un Locale hasta un nodo ViewPlatform. El intento de realizar una transformación no permitida genera una excepción (BadTransformException). Los efectos de las transformaciones en el grafo de escena son acumulativos. La concatenación de las transformaciones de cada TransformGroup en un camino directo desde el Locale hasta un nodo hoja define un modelo de transformación que toma los puntos de las coordenadas locales del nodo hoja y los transforma en coordenadas del mundo virtual. Este modelo de transformación se utiliza para transformar puntos, normales y distancias en coordenadas del mundo virtual.
Los nodos hoja (Leaf) forman una clase abstracta para todos los nodos del grafo de escena que no tienen hijos. Proporcionan enlaces espaciales y capacidades de instanciación para compartir grafos de escena. Proporcionan también una plataforma de visión para colocar y orientar los objetos en un punto de vista dentro del mundo virtual.
Nodos Shape3D:
La clase Shape3D da soporte a la creación de objetos geométricos. Contiene dos componentes: una referencia a la forma geométrica y a su componente de apariencia. El objeto de geometría define los datos geométricos de la forma, mientras que el objeto de apariencia especifica los atributos de apariencia del objeto como pueden ser color, material, textura, etc.
Nodos ViewPlatform:
Los nodos ViewPlatform definen una plataforma de visualización que se referencia mediante un objeto View. La posición, orientación y escala de las transformaciones desde el grafo de escena hasta el nodo ViewPlatform especifican la localización del punto de vista y hacia qué dirección está orientado. Un observador puede deambular por una escena cambiando las transformaciones en la jerarquía del grafo de escena por encima del ViewPlatform.
Nodos Behavior:
Los nodos hoja Behavior permiten que una aplicación modifique el grafo de escena en tiempo de ejecución. Behavior es una clase abstracta que define propiedades comunes a todos los objetos de comportamiento de Java3D. Hay varios comportamientos predefinidos que son subclases de Behavior. Además, el usuario puede redefinir estos objetos.
Nodo BoundingLeaf:
Define una región limitada que puede ser referenciada por otros nodos para definir una región de influencia (nodos Fog y Light), una región de activación (nodos de Background, Clip y Soundscape) o una región de planificación (nodos Sound y Behavior). La región limitada se define en el sistema de coordenadas local del nodo BoundingLeaf. Se puede utilizar una referencia a este nodo en lugar de a los límites de un objeto de alguno de los nodos antes mencionados. Este nodo permite a la aplicación especificar una región limitada en un sistema de coordenadas diferente del sistema local del objeto que referencia los límites. Es decir, si, por ejemplo, en una habitación hay varias luces, los límites aplicados a las distintas luces se corresponderán siempre con la habitación, independientemente del movimiento de las propias luces. Así, utilizando un objeto de este tipo, no es necesario aplicar coordenadas de límites distintas para cada objeto de iluminación (ya que cada uno tendría su propio sistema de coordenadas), sino que todos los límites se aplicarían en función del objeto BoundingLeaf.
Nodo Background:
Este nodo define un fondo para la aplicación. Este fondo puede ser un color fijo o una imagen que se utiliza para rellenar la ventana utilizada. También especifica a la aplicación la región en que el nodo Background está activo. Un nodo de este tipo está activo cuando la región de la aplicación intersecta con el volumen de activación del ViewPlatform. Si hay varios nodos Background activos, se utiliza el que esté más cercano al ojo, y si no hay ninguno activo, el fondo de la ventana se pinta de negro.
Nodo Fog:
Se trata de una clase abstracta que define un conjunto de atributos comunes que controlan la niebla de la escena. Entre dichos atributos se encuentran el color y un objeto de límites que especifica la región de la influencia. Todos los objetos que intersecten con la región de influencia modifican su color (para aplicarle la niebla) una vez aplicadas las luces y texturas.
- Nodo ExponentialFog: Extiende el nodo Fog añadiéndole una densidad de niebla que se usa como exponente de la ecuación de niebla. La densidad se define en el sistema local de coordenadas del nodo, aunque la ecuación de niebla se referirá a las coordenadas del ojo.
- Nodo LinearFog: Extiende el nodo Fog añadiendo un par de valores de distancia en el eje Z que indican el punto en que la niebla debe comenzar a oscurecer la escena y en el que debe oscurecerla completamente.
Nodo Light:
Es una clase abstracta que define las propiedades comunes a todos los nodos de luz. Cada luz tiene asociado un color, un estado (encendida o apagada) y un objeto de límites que especifica la región de influencia de la luz. El modelo de iluminación de Java3D se basa en un subconjunto del modelo de iluminación de OpenGL.
Nodo Sound:
Es también una clase abstracta que define las propiedades comunes de todos los nodos de sonido. Un grafo de escena puede contener varios elementos de sonido. Cada nodo de sonido contiene una referencia a los datos de sonido, un factor de escala de amplitud, un flag que indica si el sonido asociado con el objeto debe reproducirse hasta que se acaba o sólo hasta que se desactive el objeto, el número de veces a repetirse, un estado (si está activado o no), una región de influencia, una prioridad, etc. Siempre que el usuario se encuentre dentro de los límites de influencia del sonido, este será potencialmente audible.
- Nodo BackgroundSound: Define una fuente de sonido sin atenuación que no tiene ni posición ni dirección. Tiene los mismos atributos que el nodo Sound. Se utilizan como sonidos de ambiente y puede haber varios activos a la vez.
- Nodo PointSound: Define un sonido cuyas ondas se emiten en todas las direcciones desde su localización. Se añaden a los parámetros del nodo Sound la localización y el grado de atenuación con la distancia.
- Nodo ConeSound: Define un nodo PointSound cuyo sonido está dirigido a lo largo de un vector en el espacio. El sonido se atenúa tanto a lo largo como en un cierto ángulo también definido.
Nodo Morph:
Este nodo permite que una aplicación realice morphings entre diferentes matrices de geometría. Este nodo contiene un único nodo de apariencia y una matriz de matrices de geometría, con un peso para cada una. El nodo Morph combina todas estas matrices en una sola en función del peso asignado a cada una.
Nodo Link:
Este nodo permite que la aplicación referencie un subgrupo compartido cuya raíz es un nodo SharedGroup, dentro de una rama del grafo de escena. Varios nodos Link pueden referirse a un mismo nodo SharedGroup.
Los objetos del grafo de escena analizados hasta ahora son los que realmente se consideran parte de dicho grafo. Pero, además de estos nodos, existen otros que permiten incluir información adicional y esencial en la estructura de árbol. El primer grupo de estos elementos son los que permiten configurar la rama de visualización y que se unen al objeto ViewPlatform. Estos objetos son Canvas3D, Screen3D, View, PhysicalBody y PhysicalEnvoronment. De forma breve se detallan a continuación:
View:
Este es el objeto principal de visualización ya que es el que determina toda la información necesaria para generar la escena 3D. Contiene diferentes elementos del estado de visualización.
Canvas3D:
Es la versión 3D del objeto Canvas del Abstract Windowing Toolkit (AWT). Representa una ventana en la que Java3D dibujará las imágenes. Contiene una referencia a un objeto Screen3D e información que describe el tamaño forma y localización dentro del objeto Screen3D del objeto Canvas3D.
Screen3D:
Es un objeto que contiene información relativa a las propiedades físicas de la pantalla. Java3D separa la información relativa a la pantalla en un objeto independiente para evitar la duplicación de información, en caso de que varios objetos Canvas3D compartan una sola.
PhysicalBody:
Se trata de un objeto que contiene información de calibración relativa al cuerpo físico del usuario.
PhisicalEnvironment.
Este objeto contiene información de calibración del mundo físico.
El segundo grupo de objetos adicionales son los NodeComponent. Estos no forman parte de la estructura de árbol, pero son esenciales para generar contenidos. De hecho, son los responsables, entre otras cosas, de que una figura tenga una cierta geometría bajo una cierta apariencia (color, textura, etc.). Se asocian a través de relaciones de referencia con objetos Leaf para los cuales define la apariencia y la geometría.
Las subclases del objeto SceneGraph son los elementos que se unen para formar los grafos de escena. El procedimiento básico para desarrollar un programa en Java3D consiste en siete pasos, estos se muestran en el Algoritmo 2.1:
1. Crear un objeto Canvas3D.
2. Crear un objeto VirtualUniverse.
3. Crear un objeto Locale y unirlo al objeto VirtualUniverse.
4. Construir la rama de visualización del grafo.
a. Crear un objeto View.
b. Crear un objeto ViewPlatform.
c. Crear un objeto PhysicalBody.
d. Crear un objeto PhysicalEnvironment.
e. Unir los objetos ViewPlatform, PhysicalBody,
PhysicalEnvironment y Canvas3D al objeto View.
5. Construir la(s) rama(s) de contenido del grafo.
6. Compilar la(s) rama(s) del punto anterior.
7. Insertar los distintos subgrafos en el Locale.
Página anterior | Volver al principio del trabajo | Página siguiente |