INSTITUTO POLITECNICO NACIONAL
. CENTRO DE INNOVACION Y DESARROLLO
. TECNOLOGICO EN COMPUTO
MEJORAS EN EL DISENO, E IMPLEMENTACION
DE UN TRADUCTOR DE VRML A JAVA 3D
T E S I S
QUE PARA OBTENER EL GRADO DE:
MAESTRIA EN TECNOLOGIA DE COMPUTO
PRESENTA:
ING. JOSE MARCO ANTONIO RUEDA MELENDEZ
DIRECTORES DE TESIS
M. EN C. MAURICIO OLGUIN CARBAJAL
M. EN C. EDUARDO VEGA ALVARADO
Mexico, D.F. Julio 2011
ii
iii
iv
v
vi
Agradecimientos
Mi total agradecimiento a mi asesor, el M. en C. Mauricio Olguın Carbajal, quien
me dedico su valioso tiempo y me dio la confianza para realizar el presente trabajo,
demostrando siempre interes por lo que estaba realizando y me animo a seguir adelante.
Gracias por su ayuda.
Agradezco tambien de forma especial a mi co-asesor, el M. en C. Eduardo Vega Al-
varado, por su amistad y confianza.
Al Dr. Vıctor Manuel Silva Garcıa y al M. en C. Eduardo Rodrıguez Escobar, Direc-
tor y Subdirector Academico respectivamente del CIDETEC, por darme la oportunidad
de pertenecer a este Centro de Estudios.
A Monica, mi esposa, quien me animo y apoyo para que continuara con mis estudios,
y que siempre ha estado a mi lado tanto en las buenas como en las malas.
A mi madre y a la memoria de mi padre que me dieron su ejemplo y a mis hermanos
por ser como son.
A mis profesores del CIDETEC sin excepcion alguna, quienes siempre aportaron sus
conocimientos a mi formacion.
A todos mis companeros del CIDETEC, que desde su area de interes academico,
luchan por ser mejores.
vii
viii
Al Centro de Innovacion y Desarrollo Tecnologico en Computo del IPN (CIDETEC-
IPN), por permitirme formar parte de sus egresados.
Al Instituto Politecnico Nacional por ser parte de esta gran familia politecnica.
Resumen
En la presente tesis se documenta el desarrollo de una herramienta software que
traduce codigo VRML a codigo Java 3D. La razon principal es porque existen muchas
aplicaciones en VRML que se han desarrollado a traves de los anos con probada fun-
cionalidad, pero con carencias en su conexion con el exterior a traves de dispositivos
hardware, debido a que VRML no cuenta con instrucciones para tal efecto.
Debido al gran auge que han tenido las diversas aplicaciones de realidad virtual, las
cuales se han convertido en potentes herramientas para la diversion, la educacion, la
simulacion, la milicia, etc., se propuso tomar las aplicaciones en VRML y reutilizarlas,
usando la API Java 3D, previa conversion a traves del traductor de VRML a Java 3D
producto de esta tesis.
De esta forma, esta tesis presenta el desarrollo e implementacion del traductor VRML
a codigo Java 3D, el cual tiene las siguientes caracterısticas destacables: renderizacion
de figuras regulares (Box, Cylinder, Cone y Sphere) e irregulares (SetPoint, Indexed-
LineSet e IndexedFaceSet), adecuado manejo de transformaciones (traslacion, rotacion
y escalamiento) y mejoramiento de la apariencia. Tambien incluye una interfaz grafica
de usuario amigable que tiene todos los pasos necesarios para dicha traduccion, la cual
incluye: apertura del archivo fuente en VRML, conversion de VRML a Java 3D, la inte-
ix
x
gracion de la compilacion y ejecucion automatica del codigo de salida en Java 3D y la
exhibicion de la imagen en 3D. Ademas cuenta con un area de exhibicion de los nodos
del archivo VRML de forma grafica.
La herramienta se programo en el lenguaje Java debido a que ofrece conexion ex-
terna a dispositivos hardaware y porque se ha convertido en un estandar de facto en la
industria del software.
De esta forma, la herramienta disenada e implementada en esta tesis contribuye a
recuperar y reutilizar las aplicaciones realizadas en VRML, y apoyar a los desarrollado-
res de aplicaciones de realidad virtual para mejorar su productividad, si ya cuentan con
codigo VRML previamente probado y que por lo tanto es funcionalmente correcto.
Abstract
In this thesis, the development of a software tool for translation from VRML co-
de to Java 3D code is presented. The main justification for this work is the fact that
many VRML-based applications have been developed with proven functionality, but
with a lack of connection to the environment via hardware devices, because there are no
VRML instructions for this effect.
There has been a boom of virtual reality applications, and since these applications are
powerful tools for amusement, education, simulation, etc, a proposal for taking VRML
applications and reuse them, using the Java 3D API, is presented in this thesis, by a
conversion using a translator from VRML to Java 3D.
In this thesis, the development and implementation of a translator from VRML to
Java 3D is presented; this translator has the following characteristics: renderization of re-
gular (Box, Cylinder, Cone and Sphere) and irregular figures (SetPoint, IndexedLineSet
and IndexedFaceSet), appropiate handling of manipulations (translation, rotation and
scaling), and appearance improvement. It also includes a friendly graphical user interfa-
ce that is fully functional for the translation; this interface includes: opening of source
VRML file, conversion from VRML to Java 3D, compilation and automatic execution of
the resulting Java 3D code, and the 3D-displaying of the final image. In addition, there
xi
xii
is an area for the graphical display of the nodes in the VRML file.
This tool was programmed using Java, because this language offers an external con-
nection to hardware devices, and it is also a the facto standard in the software industry.
So, the tool designed and implemented in this thesis is a valuable contribution for
recovering and reusing previously developed VRML applications, as a way to support
virtual reality programmers in order to improve their productivity, if they have pre-
viously tested and functionality correct VRML code.
Indice general
Indice de figuras XVI
Indice de tablas XXII
1. Introduccion 1
1.1. Realidades alternas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Conceptos asociados con la realidad virtual . . . . . . . . . . . . . . . . . 4
1.3. La importancia y el alcance de la presente tesis . . . . . . . . . . . . . . 7
1.3.1. Organizacion de la tesis . . . . . . . . . . . . . . . . . . . . . . . 10
2. Estado del arte 13
2.1. Trabajos en realidad virtual . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.1.1. Introduccion y antecedentes . . . . . . . . . . . . . . . . . . . . . 13
2.1.2. Trabajos recientes en realidad virtual . . . . . . . . . . . . . . . . 14
2.1.3. Trabajos realizados en el CIDETEC . . . . . . . . . . . . . . . . . 15
2.1.4. Conclusiones del capıtulo . . . . . . . . . . . . . . . . . . . . . . . 18
3. Marco teorico 21
3.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2. El lenguaje VRML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
xiii
xiv INDICE GENERAL
3.2.1. Nodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2.2. Figuras irregulares . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2.3. Nodos de transformacion . . . . . . . . . . . . . . . . . . . . . . . 34
3.2.4. Conclusiones acerca de VRML . . . . . . . . . . . . . . . . . . . . 37
3.3. El lenguaje de programacion Java . . . . . . . . . . . . . . . . . . . . . . 37
3.4. La API Java 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.4.1. Pasos para desarrollar una aplicacion en Java 3D . . . . . . . . . 42
3.4.2. Conclusiones acerca de Java 3D . . . . . . . . . . . . . . . . . . . 45
4. Desarrollo 47
4.1. Diagrama a bloques del Traductor VRML a Java 3D . . . . . . . . . . . 47
4.2. Algoritmo del Traductor VRML a Java 3D . . . . . . . . . . . . . . . . . 49
4.3. Diagrama de clases del traductor VRML a Java 3D . . . . . . . . . . . . 51
4.4. Diagrama de actividades del traductor VRML a Java 3D . . . . . . . . . 51
4.5. Especificaciones del archivo VRML que se toma como entrada para Tra-
ductor VRML a Java 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.6. Especificaciones de diseno software de la herramienta: Traductor VRML
a Java 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.7. Ejemplo del uso del Traductor VRML a Java 3D . . . . . . . . . . . . . . 57
5. Experimentos y Resultados 65
5.1. Escenarios con una figura regular . . . . . . . . . . . . . . . . . . . . . . 66
5.1.1. Caja o cubo con rotacion . . . . . . . . . . . . . . . . . . . . . . . 66
5.1.2. Cilindro con apariencia . . . . . . . . . . . . . . . . . . . . . . . . 72
5.2. Escenarios con varias figuras regulares . . . . . . . . . . . . . . . . . . . 78
5.2.1. Cilindro y cono con texturas . . . . . . . . . . . . . . . . . . . . . 79
INDICE GENERAL xv
5.3. Escenarios con figuras irregulares que usan:
PointSet, IndexedLineSet e IndexedFaceSet . . . . . . . . . . . . . . . . 88
5.3.1. Escenario con figuras irregulares con PointSet . . . . . . . . . . . 88
5.3.2. Escenario con figuras irregulares con IndexedLineSet . . . . . . . 94
5.3.3. Escenario con figuras irregulares con IndexedFaceSet . . . . . . . 101
5.4. Conclusiones acerca de las diferencias entre VRML y Java 3D . . . . . . 109
6. Conclusiones 111
6.1. Contribuciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.2. Trabajo Futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
A. Comparacion entre la herramienta de esta tesis y [8] 119
B. Codigos en VRML y en Java 3D de figuras complejas 121
B.1. Codigos para renderizar la figura: Silla . . . . . . . . . . . . . . . . . . . 121
B.1.1. Codigo de entrada al Traductor VRML a Java 3D. Archivo: Silla-
Madera01.wrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
B.1.2. Codigo de salida del Traductor VRML a Java 3D. Archivo: Silla-
Madera01.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
B.2. Codigos para renderizar la figura: Sofa . . . . . . . . . . . . . . . . . . . 131
B.2.1. Codigo de entrada al Traductor VRML a Java 3D. Archivo: Sofa1.wrl131
B.2.2. Codigo de salida del Traductor VRML a Java 3D. Archivo: Sofa.java136
B.3. Codigos para renderizar la figura: Monitor de PC . . . . . . . . . . . . . 148
B.3.1. Codigo de entrada al Traductor VRML a Java 3D. Archivo: Mo-
nitorPC.wrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
B.3.2. Codigo de salida del Traductor VRML a Java 3D. Archivo: Moni-
torPC.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
B.4. Codigos para renderizar la figura: Florero con traslacion y textura . . . . 160
xvi INDICE GENERAL
B.4.1. Codigo de entrada al Traductor VRML a Java 3D. Archivo: Flo-
reroTrasladado1.wrl . . . . . . . . . . . . . . . . . . . . . . . . . . 161
B.4.2. Codigo de salida del Traductor VRML a Java 3D. Archivo: Flore-
roTrasladado1.java . . . . . . . . . . . . . . . . . . . . . . . . . . 163
C. Renderizaciones en VRML y de salida generados por el Traductor
VRML a Java 3D 171
C.1. Renderizaciones para la figura: Silla de Madera . . . . . . . . . . . . . . 172
C.2. Renderizaciones para la figura: Sofa . . . . . . . . . . . . . . . . . . . . . 174
C.3. Renderizaciones para la figura: Monitor de PC . . . . . . . . . . . . . . . 176
C.4. Renderizaciones para la figura: Florero con traslacion . . . . . . . . . . . 178
D. Especificaciones de la herramienta Traductor de VRML a Java 3D 181
D.1. Requerimientos de hardware . . . . . . . . . . . . . . . . . . . . . . . . . 181
D.2. Requerimientos de software . . . . . . . . . . . . . . . . . . . . . . . . . 182
E. Instalacion del software requerido para trabajar con el Traductor VRML
a Java 3D 183
E.1. El plug-in Cortona 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
E.1.1. Instalacion del plug-in Cortona 3D . . . . . . . . . . . . . . . . . 184
E.2. Instalacion del compilador para Java 3D . . . . . . . . . . . . . . . . . . 188
E.2.1. Instalacion de la API para Java 3D . . . . . . . . . . . . . . . . . 192
F. Glosario de Terminos 195
Indice de Figuras
2.1. Apariencia de en Java 3D (izq.) y VRML(der), notese la apariencia plana
en Java 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.1. Sımbolos estandar para Java 3D . . . . . . . . . . . . . . . . . . . . . . . 40
3.2. Rama de representacion y la rama de contenido de Java 3D . . . . . . . . 43
3.3. La clase SimpleUniverse de Java 3D . . . . . . . . . . . . . . . . . . . . . 44
3.4. Sentencias import necesarias para todo programa Java 3D . . . . . . . . 45
3.5. Codigo corespondiente a la rama de representacion . . . . . . . . . . . . 46
4.1. Diagrama conceptual del Traductor VRML a Java 3D . . . . . . . . . . . 48
4.2. Diagrama a bloques completo de la herramienta Traductor VRML a Java
3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.3. Diagrama de clases de la herramienta traductor VRML a Java 3D . . . . 52
4.4. Diagrama de Actividades de la herramienta Traductor VRML a Java 3D 53
4.5. Ejemplo que cumple con las especificaciones de la estructura de un archivo
valido para el Traductor VRML a Java 3D . . . . . . . . . . . . . . . . . 55
4.6. Pantalla de inicio de la herramienta traductor VRML a Java 3D . . . . . 58
4.7. Pantalla que muestra la seleccion de un archivo de entrada de la herra-
mienta traductor VRML a Java 3D . . . . . . . . . . . . . . . . . . . . . 59
xvii
xviii INDICE DE FIGURAS
4.8. Pantalla que muestra los nodos contraidos de la estructura de archivo
VRML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.9. Pantalla que muestra el contenido de los nodos del arbol del archivoVRML
expandidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.10. Pantalla que muestra la ventana de dialogo para guardar el archivo tra-
ducido a .java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.11. Pantalla que muestra la generacion de codigo Java que obtiene el Traduc-
tor VRML a Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.12. Pantalla que muestra la renderizacion del codigo Java . . . . . . . . . . . 64
5.1. Caja o cubo con rotacion y con apariencia. Archivo: CajaRotada01.wrl . 67
5.2. Arbol de la caja o cubo con rotacion y apariencia . . . . . . . . . . . . . 67
5.3. Paquetes de clases necesarios para compilar una aplicacion en Java 3D,
las cuales son siempre utilizadas por que el traductor VRML a Java 3D
en el codigo de salida en Java. . . . . . . . . . . . . . . . . . . . . . . . . 68
5.4. Constructor de la caja o cubo con rotacion y apariencia. Archivo: Caja-
Rotada01.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.5. main para la caja o cubo con rotacion. Archivo: CajaRotada01.java . . . 69
5.6. Rama del contenido (BranchGroup) para la caja o cubo con rotacion y
apariencia. Archivo: CajaRotada01.java . . . . . . . . . . . . . . . . . . . 70
5.7. Segmento de codigo que muestra la apariencia para la caja o cubo con
rotacion. Archivo: CajaRotada01.java . . . . . . . . . . . . . . . . . . . . 71
5.8. Segmento de codigo que realiza la rotacion para la caja o cubo con rota-
cion. Archivo: CajaRotada01.java . . . . . . . . . . . . . . . . . . . . . . 71
5.9. Renderizacion de la caja o cubo con rotacion en VRML . . . . . . . . . . 72
5.10. Renderizacion de la caja o cubo con rotacion en Java 3D . . . . . . . . . 73
5.11. Cilindro con apariencia. Archivo: CilindroApariencia01.wrl . . . . . . . . 73
INDICE DE FIGURAS xix
5.12. Arbol del Cilindro con apariencia . . . . . . . . . . . . . . . . . . . . . . 74
5.13. Codigo que realiza la renderizacion de un cilindro. Archivo: CilindroApa-
riencia01.java (Parte 1) . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.14. Codigo que realiza la renderizacion de un cilindro. Archivo: CilindroApa-
riencia01.java (Parte 2) . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.15. Renderizacion de un cilindro con apariencia en VRML . . . . . . . . . . 78
5.16. Renderizacion de un cilindro con apariencia en Java 3D . . . . . . . . . . 79
5.17. Cilindro con apariencia. Archivo: CilindroCono01.wrl . . . . . . . . . . . 80
5.18. Arbol del Cilindro y cono con texturas . . . . . . . . . . . . . . . . . . . 81
5.19. Codigo que realiza la renderizacion de un cilindro y un cono con textura.
Archivo: CilindroCono.java (Parte 1) . . . . . . . . . . . . . . . . . . . . 83
5.20. Codigo que realiza la renderizacion de un cilindro y un cono con textura.
Archivo: CilindroCono.java (Parte 2) . . . . . . . . . . . . . . . . . . . . 84
5.21. Codigo que realiza la renderizacion de un cilindro y un cono con textura.
Archivo: CilindroCono.java (Parte 3) . . . . . . . . . . . . . . . . . . . . 85
5.22. Renderizacion de un cilindro y un cono con texturas de ladrillo en VRML 86
5.23. Renderizacion de un cilindro y un cono con texturas de ladrillo en Java 3D 87
5.24. Vertices de un cubo realizado con PointSet. Archivo: ConjuntoPuntos1.wrl 88
5.25. Arbol generado del cubo formado con puntos . . . . . . . . . . . . . . . . 89
5.26. Codigo que realiza la renderizacion de un conjunto de puntos. Archivo:
ConjuntoPuntos1.java (Parte 1) . . . . . . . . . . . . . . . . . . . . . . . 90
5.27. Codigo que realiza la renderizacion de un conjunto de puntos. Archivo:
ConjuntoPuntos1.java (Parte 2) . . . . . . . . . . . . . . . . . . . . . . . 91
5.28. Codigo que realiza la renderizacion de un conjunto de puntos. Archivo:
ConjuntoPuntos1.java (Parte 3) . . . . . . . . . . . . . . . . . . . . . . . 92
5.29. Renderizacion de un conjunto de puntos en VRML . . . . . . . . . . . . 92
xx INDICE DE FIGURAS
5.30. Renderizacion de un conjunto de puntos en Java 3D . . . . . . . . . . . . 93
5.31. Caja o cubo formado con lıneas. Archivo:ConjuntoLineas1.wrl . . . . . . 95
5.32. Arbol generado de una caja o cubo formado con lıneas . . . . . . . . . . 96
5.33. Codigo que realiza la renderizacion de un conjunto de lıneas. Archivo:
ConjuntoLineas1.java (Parte 1) . . . . . . . . . . . . . . . . . . . . . . . 97
5.34. Codigo que realiza la renderizacion de un conjunto de lıneas. Archivo:
ConjuntoLineas1.java (Parte 2) . . . . . . . . . . . . . . . . . . . . . . . 98
5.35. Codigo que realiza la renderizacion de las aristas de un cubo formado por
un conjunto de lıneas. Archivo: ConjuntoLineas1.java (Parte 3) . . . . . 99
5.36. Renderizacion de las aristas de un cubo formado por un conjunto de lıneas
en VRML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
5.37. Renderizacion de las aristas de un cubo formado por un conjunto de lıneas
en Java 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
5.38. Caja o cubo formada con un conjunto de caras. Archivo: ConjuntoCa-
ras1.wrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
5.39. Arbol generado de la caja o cubo formada con caras . . . . . . . . . . . . 103
5.40. Codigo que realiza la renderizacion de un conjunto de caras que forman
un cubo. Archivo: ConjuntoCaras1.java (Parte 1) . . . . . . . . . . . . . 104
5.41. Codigo que realiza la renderizacion de un conjunto de caras que forman
un cubo. Archivo: ConjuntoCaras1.java (Parte 2) . . . . . . . . . . . . . 105
5.42. Codigo que realiza la renderizacion de un conjunto de caras que forman
un cubo. Archivo: ConjuntoCaras1.java (Parte 3) . . . . . . . . . . . . . 106
5.43. Codigo que realiza la renderizacion de un conjunto de caras que forman
un cubo. Archivo: ConjuntoCaras1.java (Parte 4) . . . . . . . . . . . . . 107
5.44. Renderizacion de los lados de un cubo formado por un conjunto de caras
en VRML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
INDICE DE FIGURAS xxi
5.45. Renderizacion de los lados de un cubo formado por un conjunto de caras
en Java 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
C.1. Salida usando el navegador con el plug-in Cortona del archivo SillaMade-
ra01.wrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
C.2. Salida usando la herramienta Traductor VRML a Java 3D del archivo
SillaMadera1.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
C.3. Salida usando el navegador con el plug-in Cortona del archivo Sofa1.wrl . 174
C.4. Salida usando la herramienta Traductor VRML a Java 3D del archivo
Sofa1.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
C.5. Salida usando el navegador con el plug-in Cortona del archivo Moni-
torPC.wrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
C.6. Salida usando la herramienta Traductor VRML a Java 3D del archivo
MonitorPC.java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
C.7. Salida usando el navegador con el plug-in Cortona del archivo Florero-
Trasladado1.wrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
C.8. Salida usando la herramienta Traductor VRML a Java 3D del archivo
FloreroTrasladado1.java . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
E.1. Sitio de descarga de cortona . . . . . . . . . . . . . . . . . . . . . . . . . 185
E.2. Inicio de la instalacion del plug-in Cortona . . . . . . . . . . . . . . . . . 186
E.3. Pasos en la instalacion (1) . . . . . . . . . . . . . . . . . . . . . . . . . . 186
E.4. Pasos en la instalacion (2) . . . . . . . . . . . . . . . . . . . . . . . . . . 187
E.5. Pasos en la instalacion (3) . . . . . . . . . . . . . . . . . . . . . . . . . . 187
E.6. Sitio de Descarga del compilador de Java . . . . . . . . . . . . . . . . . . 188
E.7. Sitio de Descarga del compilador de Java(2) . . . . . . . . . . . . . . . . 189
E.8. Sitio de Descarga del compilador de Java(3) . . . . . . . . . . . . . . . . 189
xxii INDICE DE FIGURAS
E.9. Instalacion del compilador de Java(1) . . . . . . . . . . . . . . . . . . . . 190
E.10.Instalacion del compilador de Java(2) . . . . . . . . . . . . . . . . . . . . 190
E.11.Instalacion del compilador de Java(3) . . . . . . . . . . . . . . . . . . . . 191
E.12.Instalacion del compilador de Java(4) . . . . . . . . . . . . . . . . . . . . 191
E.13.Sitio de Descarga de la API Java3D . . . . . . . . . . . . . . . . . . . . . 192
E.14.Sitio de Descarga de la API Java3D(2) . . . . . . . . . . . . . . . . . . . 193
E.15.Sitio de Descarga de la API Java3D(3) . . . . . . . . . . . . . . . . . . . 193
E.16.Sitio de Descarga de la API Java3D (4) . . . . . . . . . . . . . . . . . . . 194
Indice de Tablas
2.1. Comparacion entre Lenguajes . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2. Estado del arte, resumen del analisis de documentos . . . . . . . . . . . . 19
A.1. Comparacion entre ambos traductores . . . . . . . . . . . . . . . . . . . 120
xxiii
xxiv INDICE DE TABLAS
Capıtulo 1
Introduccion
1.1. Realidades alternas
Durante la historia de la humanidad siempre ha existido la curiosidad por experi-
mentar situaciones mas alla de la realidad que se conoce y que se vive, creadas en la
gran mayorıa de las veces en la imaginacion. Desde la lectura de un libro de aventuras,
donde gracias a la narrativa del escritor, es posible experimentar emociones y recrear
lugares. Mas tarde surgio el teatro donde el espectador vive una experiencia cercana con
los actores, y con el apoyo de las coreografıas, se ofrece al espectador imagenes, sonidos
y emociones que inciden directamente en el cerebro del espectador creando una realidad
alterna.
Posteriormente con la aparicion del cine, se anadio realismo a las escenas donde se
mezclan personajes y efectos especiales que hacen vivir experiencias donde intervienen
los sentidos de la vista y del oıdo del espectador.
Cada uno de los casos anteriores forman parte de lo que se conoce como realidades
1
2 Capıtulo 1. Introduccion
alternas, las cuales se caracterizan porque existe una trama bien definida, pero se carece
de una interaccion participativa del espectador.
Otra forma de experimentar una realidad alterna es a traves de la realidad virtual,
la cual nacio en los 60’s como consecuencia natural de los avances tecnologicos del hard-
ware y del software de las computadoras.
El campo de la realidad virtual surgio con los experimentos de un grupo de investi-
gacion de la Universidad de Harvard encabezado por Ian Sutherland, quienes disenaron
un casco de realidad virtual, conocido como incredible helmet (casco increıble), el cual
era un dispositivo rudimentario con dos tubos de rayos catodicos y que a pesar de ser
pequeno, era pesado y voluminoso. Su sensor de posicion se fijaba en el techo mediante
una barra rıgida, la cual traducıa los movimientos de la cabeza a desplazamientos de
unos potenciometros, cuya posicion era detectada por una computadora. El dispositivo
presento numerosos problemas de movilidad e incomodidad por su naturaleza mecanica.
En un inicio las aplicaciones de realidad virtual requerıan equipos caros y compli-
cados, pero los avances tecnologicos han hecho accesibles los cascos, los guantes y las
camaras de inmersion, los cuales han sido muy utiles para conseguir que el usuario sienta
la sensacion de estar en un escenario casi real.
Las limitaciones del hardware en cuanto a velocidad de procesamiento, capacidad de
memoria, tamano y costo de aquellas epocas ocasionaron que las primeras tecnologıas
resultaran poco atractivas para los usuarios. Los ambientes usaban el sistema de gene-
racion de graficos vectoriales, el cual producıa la sensacion de estar en un mundo irreal
donde los objetos parecıan de alambre.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
1.1. Realidades alternas 3
A pesar del poco exito, hubo interes en continuar su desarrollo por parte de ciertas
empresas, centros de investigacion civiles y militares.
En 1968 un grupo de investigadores de la Universidad de Carolina del Norte dirigido
por el profesor Frederick Rooks adapto un dispositivo que permitio simular reacciones
tactiles de fuerza, usando un dispositivo robotico similar a los que se usaban para la ma-
nipulacion remota de materiales radiactivos. En la actualidad se emplean dispositivos
similares a este.
Posteriormente, Jaron Lanier creo el guante de datos y fundo la empresa VPL Re-
search junto con Thomas Zimmerman. Su invento empezo a venderse en poco tiempo a
organismos como la NASA y el Pentagono.
En el Reino Unido se desarrollaron ambientes sinteticos de inmersion protagoniza-
do por Jonathon Waldern fundador de W. Industries y de Virtuality, quien lanzo al
mercado el primer producto basado en el uso del casco, cuyo diseno se inicio en 1981,
completandose el primer prototipo en 1988. En julio de 1991 aparecio Dactyl Nightmare,
el primer juego en el que varios usuarios podıan interactuar en un mismo espacio.
El campo del software se inicio con el GopherVR, un navegador que creaba una in-
terfaz al gopherespacio generando mundos virtuales. Desaparecio en 1993, con la llegada
de la World Wide Web (www).
El lenguaje de realidad virtual empleado actualmente en la web es el VRML (Virtual
Reality Modeling Language), cuyo inicio data desde 1994, con la Primera Conferencia
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
4 Capıtulo 1. Introduccion
Internacional en la World Wide Web realizada en Mayo de ese ano. Mark Pesce y Tony
Parisi presentaron una herramienta de visualizacion llamada Labyrinth.
A partir de ese suceso, VRML mejora la navegacion en la red con un ciberespacio
consistente y definido. La discusion y la actividad se centro en la especificacion de un
lenguaje comun para definir las escenas tridimensionales mas que en la generacion de
una interfaz.
En Mayo de 1995 se presento VRML 1.0, un lenguaje para definir mundos virtuales
estaticos adecuada con el ancho de banda de la red, basados en el formato de archivo
OpenInventor ideado por Silicon Graphics. En Agosto de ese mismo ano se introdujo
VRML 2.0, un lenguaje mucho mas poderoso para definir mundos virtuales dinami-
cos, con animacion, interaccion con el usuario y scripts para programas. Posteriormente
aparecio VRML 97, el cual es una revision del VRML 2.0.
1.2. Conceptos asociados con la realidad virtual
Existe una gran cantidad de conceptos asociados con la realidad virtual:
"La realidad virtual es un sistema de computacion usado para crear un mundo artifi-
cial donde el usuario tiene la impresion de estar en ese mundo y la habilidad de navegar
y manipular objetos en el" [1].
"La realidad virtual te permite explorar un mundo generado por computadoras a
traves de tu presencia en el". [2].
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
1.2. Conceptos asociados con la realidad virtual 5
Otra definicion esta dada por Aukstakalnis et al en The Silicon Mirage [3]: "La reali-
dad virtual es un camino que tienen los humanos para visualizar, manipular e interactuar
con computadoras y con informacion extremadamente compleja".
Isdale[4] conceptualiza a la visualizacion como conexiones opticas, auditivas o de
cualquier otro tipo que existen entre el espectador y el mundo generado dentro de la
computadora, el cual permite al usuario interactuar y manipular objetos.
Por otra parte, la expresion realidad virtual tambien ha sido considerada como un
oximoron, es decir, una figura en la que un adjetivo de significado contrario es agregado a
una palabra. Otros terminos empleados para la misma acepcion son ambiente sintetico,
ciberespacio y realidad artificial.
La gran variedad de areas que forman la realidad virtual ha dado lugar a la subdivi-
sion en numerosas tipologıas. A continuacion se resena la clasificacion de Isdale.
Sistemas de Ventana al Mundo (Window on World. WoW) Michael Louka[5]
los define como sistemas de "realidad virtual de escritorio", cuya caracterıstica principal
es que usa un monitor de computadora para mostrar el mundo visual, Isdale menciona
que esta tipologıa ha existido desde el principio de la historia de los graficos compu-
tarizados. En 1965, Ivan Sutherland ideo un programa de investigacion para graficos
generados por computadoras en el texto The Ultimate Display que ha guiado el campo
durante los ultimos treinta anos.
Mapa de Video Es una variante del sistema de ventana al mundo, el cual combina
una conexion de video de la silueta del usuario con un grafico de computadora en dos
dimensiones, observandose en la pantalla el cuerpo del individuo interactuando con el
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
6 Capıtulo 1. Introduccion
mundo.
Sistemas de Inmersion Los mas avanzados sistemas de realidad virtual sumergen
completamente la vision del usuario en el mundo artificial. Suelen estar equipados con
un casco o mascara que contiene dispositivos visuales y auditivos conocidos como Head
Mounted Display o HMD.
Una variacion de estos sistemas emplea grandes pantallas de proyeccion para crear
un recinto o cuarto donde se encuentra el usuario. La primera aplicacion de este sistema
fue llamada el closet de la catedral por su capacidad de crear la ilusion de ambientes
gigantescos en un espacio fısico de pequenas dimensiones. Una extrapolacion de estos
sistemas de inmersion puede hallarse en el Holodek empleado en Star Trek: The Next
Generation(Viaje a las Estrellas: La Nueva Generacion).
Telepresencia Es una variante en la visualizacion de mundos generados por compu-
tadoras y funciona a traves de la conexion de sensores entre un operador humano y un
robot u otra clase de dispositivo.
Entre los usos de la telepresencia se encuentran los vehıculos controlados a distancia
por bomberos empleados para manejar situaciones peligrosas y los instrumentos emplea-
dos por los cirujanos para realizar intervenciones quirurgicas sin hacer cortes mayores
en los pacientes; estos instrumentos poseen una pequena camara de video al final.
Los robots equipados con sistemas de telepresencia han cambiado la exploracion
volcanica y marina. Por otra parte, la NASA planea usar telerobotica para la exploracion
espacial.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
1.3. La importancia y el alcance de la presente tesis 7
Realidad Aumentada Es la combinacion de sistemas de telepresencia y de realidad
virtual, las entradas generadas por la computadora se mezclan con telepresencia y/o con
la vision del usuario del mundo real.
Las aplicaciones de estos sistemas se encuentran en las intervenciones quirurgicas
del cerebro, donde se monitorean los procesos a traves de imagenes producto de scaneos
CAD y ultrasonido en vivo.
Dentro de la milicia los pilotos de aviones de combate observan mapas y datos ge-
nerados por computadora proyectandose en sus cascos visores o en las pantallas de la
cabina.
1.3. La importancia y el alcance de la presente tesis
Como se ha mencionado ver la realidad virtual es una tecnologıa que esta presente
en diferentes campos del conocimiento donde sus multiples aplicaciones la han hecho
accesible a usuarios de diferente nivel academico, en este afan de continuar con este
desarrollo tecnologico, la presente tesis es una contribucion en esta area de desarrollo
tecnologico.
Justificacion de la tesis En el CIDETEC se tiene un trabajo desarrollado en este
sentido, el cual tiene la limitante de que solo pueden usarse figuras geometricas basicas,
el escalamiento deforma las figuras geometricas complejas formadas de figuras basicas y
la apariencia da una sensacion de ver objetos planos. Por esta razon, es deseable con-
tinuar con este trabajo, adicionando otras funcionalidades al traductor para que pueda
generar objetos mas complejos. El uso de geometrıas irregulares imposibilita el uso de
primitivas basicas, y obliga a usar las primitivas: PointSet, IndexedLineSet e Indexed-
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
8 Capıtulo 1. Introduccion
FaceSet. La herramienta producto de esta tesis, se ha redisenado completamente. Se
decidio programarla con lenguaje de programacion Java, el cual no requiere licencia por
parte del programador y tiene la ventaja adicional de que puede ejecutarse en cualquier
plataforma. Se desarrollo un nuevo algoritmo el cual contempla adicionalmente los nodos
PointSet, IndexedLineSet e IndexedFaceSet, se elimino la deformacion en el escalamien-
to y se mejoraron sustantivamente las apariencias y las texturas. Las clases y metodos
fueron reescritos para cumplir las nuevas funcionalidades. Se implemento una interfaz
grafica de usuario, la cual contiene todos las funcionalidades para realizar todos los pasos
que requiere el traductor.
Otra razon de peso por la cual se escogio el lenguaje de programacion Java, es por su
amplio uso en la industria del software y porque proporciona al programador una gran
cantidad de bibliotecas, las cuales incrementan las funcionalidades de las aplicaciones.
Por otro lado, a pesar de la facilidad en su programacion y uso intuitivo del VRML,
este carece de la funcionalidad propia para realizar interfaces con hardware por lo que
el lenguaje Java 3D puede solventar dicha dificultad.
Objetivo general
Mejoras en el diseno, desarrollo e implementacion de una aplicacion software que
traduce un archivo VRML bien formado, es decir, que cumpla con la sintaxis del
lenguaje VRML, a un archivo Java 3D.
Objetivos particulares
Desarrollar una aplicacion de computo para aprovechar la funcionalidad de la
cabina de inmersion del CIDETEC.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
1.3. La importancia y el alcance de la presente tesis 9
El archivo fuente contendra las primitivas geometricas Box, Cone, Cylinder, Sphe-
re, PointSet, IndexedLineSet e IndexedFaceSet, los nodos de transformacion para
traslacion, rotacion y escalamiento, ademas los nodos para el manejo de la apa-
riencia y de la textura.
Aplicar tecnicas avanzadas de programacion (estructuras de datos y manejo de
clases) y de realidad virtual (API de Java 3D) para el desarrollo de aplicaciones
de realidad virtual.
Comparar y evaluar las aplicaciones implementadas con programas similares ya
existentes.
Alcances y contribuciones El presente trabajo tiene como finalidad:
El diseno y desarrollo de un traductor de codigo de escenarios en lenguaje VRML
a codigo en lenguaje Java 3D con el fin de reutilizar el codigo existente en VRML.
El sistema leera un archivo fuente en VRML bien formado y se obtendra a la salida
un archivo en Java 3D.
Crear ambientes virtuales acotados que puedan extenderse por parte del progra-
mador con una interfaz con mundo exterior.
El uso de primitivas geometricas basicas (cubo, cono, esfera y cilindro) para crear
figuras mas complejas.
La inclusion de los nodos: PointSet, indexedLineSet e IndexedFaceSet para crear
figuras irregulares.
La mejora del manejo de la apariencia.
El uso de nodos de transformacion: rotacion, translacion y escalamiento.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
10 Capıtulo 1. Introduccion
La representacion jerarquica grafica de los nodos de la aplicacion donde se podran
observarse las transformaciones de cada geometrıa.
Una interfaz grafica amigable con el usuario para la seleccion de los archivos de
entrada.
1.3.1. Organizacion de la tesis
Esta tesis esta dividida en seis capıtulos los cuales se resumen a continuacion:
Capıtulo 1 Este capıtulo introduce los conceptos basicos de la realidad virtual, su
desarrollo historico, su aplicacion en las diferentes ramas del conocimiento y su pertinen-
cia en la actualidad. Tambien se hace referencia a los objetivos, alcance y contribuciones
de la presente tesis.
Capıtulo 2 En este capıtulo se hace una revision del estado del arte, se analizan los
trabajos relacionados con los traductores de VRML a Java realizados hasta el momento,
se hacen comparaciones de sus funcionamientos y se analizan sus ventajas y desventajas.
Capıtulo 3 Se hace referencia a una revision de VRML, el cual es el lenguaje mas usado
en las aplicaciones de realidad virtual y que se ha convertido en un estandar. Asimismo
se aborda el lenguaje Java por ser el lenguaje en el que programara la aplicacion y
tambien se hace un estudio detallado de la API de Java 3D. Se describen las sintaxis de
ambos lenguajes y su estructura basica en el codigo estandar y se analiza como se llevan
a cabo las renderizaciones.
Capıtulo 4 Se explica el desarrollo de la presente tesis, se describe el algoritmo, las
estructuras de datos, las clases empleadas en el traductor y se explican los modulos de
los que consta el traductor VRML a Java 3D.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
1.3. La importancia y el alcance de la presente tesis 11
Capıtulo 5 Se describen los experimentos realizados y los resultados obtenidos al
probar la aplicacion con ejemplos de diferente complejidad y se comparan los resultados
de Java 3D con los de VRML.
Capıtulo 6 En las conclusiones de describen los objetivos alcanzados en la presente
tesis y se proponen algunas extensiones para trabajos futuros.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
12 Capıtulo 1. Introduccion
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
Capıtulo 2
Estado del arte
2.1. Trabajos en realidad virtual
2.1.1. Introduccion y antecedentes
Existen en el ambito academico y comercial aplicaciones de realidad virtual, en su
gran mayorıa se concentran en el area de los recorridos virtuales en museos, centros
turısticos, sitios arqueologicos por mencionar algunos, y por otro lado existen algunas
herramientas de apoyo para el desarrollo de este tipo de aplicaciones.
Cabe mencionar que a pesar de existir interes por esta area en los centros academi-
cos, en la realidad se puede observar que, aun falta mucho por realizar y aplicar en las
diferentes ramas del conocimiento en la Realidad Virtual.
13
14 Capıtulo 2. Estado del arte
2.1.2. Trabajos recientes en realidad virtual
En este apartado se resumen los trabajos relacionados con la realidad virtual producto
de algunas publicaciones y trabajos de tesis que muestran la tendencia de las aplicaciones.
Simulacion en internet de un laboratorio virtual en su entorno mediante
VRML
En este trabajo [16] se desarrollo y se construyo un Edificio Virtual en internet seme-
jante al real que cuenta con oficinas, talleres y en particular se describe un laboratorio
virtual de robotica en donde los alumnos pueden realizar practicas utilizando equipos
muy similares a los reales, usando una conexion a Internet.
The interactive data visualization with Java 3D
Este trabajo [15] tiene como finalidad monitorear experimentos en tiempo real y su
representacion grafica usando Java 3D por sus caracterısticas de rapidez, interpretacion
interactiva y sus capacidades con internet para la captura y analisis de datos.
Hace una comparacion entre VRML y Java 3D, y resalta que al ser Java 3D una API
es mas facil hacer una aplicacion aunque se carece de herramientas para su realizacion
y muestra la tabla comparativa 2.1 que da un panorama de las caracterısticas acerca de
VRML y Java 3D.
Ultimas tendencias en graficos web 3D para internet
Este artıculo [14] presenta una panoramica de los graficos conocidos como WEB3D
que se usan actualmente, en base a sus ventajas, a los plug-ins que requieren y a sus
respectivas plataformas. Hace enfasis en la incorporacion de mundos tridimensionales
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
2.1. Trabajos en realidad virtual 15
interactivos para la ensenanza de materias basicas de ingenierıa de diseno y biomecanica.
Tabla 2.1: Comparacion entre LenguajesJava 3D VRML C/C++
Independencia del SOSI (Win32 y Solaris actual-mente)
Herramientas POCAS MUCHAS MUCHAS
Rendimiento RAPIDOEjecucion en navegado-res Web
SI SI NO
Programacion Actual SI NO SI
Programacion MEDIANAMENTE FACIL FACIL DIFICIL
Fecha de liberacion 1998 1994
Por otro lado, tambien se revisaron los artıculos que fueron citados por [8] y que se
resumen en la tabla 2.2.
2.1.3. Trabajos realizados en el CIDETEC
En el Centro de Innovacion y Desarrollo Tecnologico en Computo del IPN ha existido
un gran interes por desarrollar en esta area del conocimiento. Algunos de los trabajos
mas representativos en el area de la realidad virtual que se han desarrollado a la fecha
son los siguientes trabajos de tesis:
Diseno e implementacion de un traductor de lenguajes, VRML a Java 3D
Este trabajo [8] realiza la traduccion de escenarios VRML normalizados para las
primitivas: cubo, cilindro, cono y esfera, ası como sus respectivas apariencias. Tam-
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
16 Capıtulo 2. Estado del arte
bien realiza las transformaciones rotacion, traslacion y escalamiento. Por otro lado, esta
primera herramienta se desarrollo con Visual Basic .net, el cual es un lenguaje de pro-
gramacion que requiere licencia y ademas la interfaz grafica proporcionada no realiza
todos los pasos que se requieren para obtener la imagen resultante.
A continuacion se detallan las caracterısticas mas relevantes del trabajo.
El archivo de entrada debe cumplir con una estructura bien definida.
Si las primitivas no cuentan con apariencia, se invoca al constructor por omision,
de otra forma el constructor toma los valores de los parametros.
Cada elemento debe estar separado en una lınea.
Cada elemento debe estar definido en una lınea y las llaves que cierran los nodos
deben estar en cada lınea.
No debe haber lıneas en blanco.
Se hace hincapie en que no es un compilador, es decir no se aplico la teorıa de
lenguajes formales para su realizacion.
Se implemento con el lenguaje Visual Basic, el cual require licencia.
Pueden tener apariencia o sin apariencia.
Con textura o sin textura.
Rotacion de un objeto, de un conjunto de objetos o a otro nodo de transformacion.
Traslacion de un objeto, de un conjunto de objetos o a otro nodo de transformacion.
Escalamiento de un objeto, de un conjunto de objetos o a otro nodo de transfor-
macion.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
2.1. Trabajos en realidad virtual 17
Solo renderiza figuras basicas usando Box, Cylinder, Cone y Sphere.
No renderiza escenarios.
El arbol que se genera solo es informativo.
Las transformaciones se hacen apoyandose en una bandera en los comentarios.
El proceso de compilacion y ejecucion se llevan a cabo fuera de la interfaz grafica.
El escalamiento deforma las figuras complejas formadas por figuras geometricas
basicas.
La apariencia final de las figuras ocasiona que los objetos renderizados tengan una
apariencia plana sin bordes intermedios claros. Como se muestra en la figura2.1
Figura 2.1: Apariencia de en Java 3D (izq.) y VRML(der), notese la apariencia plana en Java3D
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
18 Capıtulo 2. Estado del arte
Interfaz para el aprendizaje de la realidad virtual haciendo uso de un guante
de datos
Este trabajo [9] documenta el proceso de desarrollar una interfaz generica para recibir
informacion de un guante de datos, con el fin de retroalimentar un ambiente en tres
dimensiones aprovechando la interaccion intuitiva. El objetivo es ensenar a los alumnos
a que aprendan a manipular figuras geometricas en tres dimensiones, la navegacion en
ambientes de tres dimensiones, la rotacion en tres angulos y conocer el concepto de seis
grados de libertad.
2.1.4. Conclusiones del capıtulo
El trabajo de tesis propuesto esta enmarcado en las herramientas de apoyo para los
desarrolladores de aplicaciones de realidad virtual. La herramienta propuesta es mas que
una extension, es un rediseno que amplıa y mejora el trabajo hecho anteriormente por
[8]. El traductor propuesto en esta tesis difiere del anterior principalmente en que incluye
otras primitivas con el objetivo de crear figuras irregulares por lo que para su diseno se
incluira SetPoint, IndexeLineSet e IndexedFaceSet como parte medular del traductor.
Se usara el lenguaje nativo de Java 3D, es decir Java, lo cual permitira aprovechar las
caracterısticas propias de los lenguajes orientados a objetos tales como la abstraccion,
el encapsulamiento, la herencia y el polimorfismo.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
2.1. Trabajos en realidad virtual 19
Tabla 2.2: Estado del arte, resumen del analisis de documentosNombre delartıculo
Innovacion Ventajas Desventajas Notas
Analisis com-parativo deVRML, X3Dy Java 3D [13]
Primer anali-sis de estoslenguajes
Descripcionde sus forma-tos
No profundi-za en el anali-sis
Estudio muyescueto
Sistema de di-seno de en-tornos virtua-les en edifi-cios domotiza-dos con Java3D [18]
Plano en2D, permitevisualizarloen 3D
Se detallancaracterısti-cas de Java3D
Se centra soloen Java 3D
Propone laimportacionde escenariosen diferentesherramientas
Implementacionde camino sinfin para mun-dos virtualespor medio decaminadora[19]
Presentanuna interfazde VRML condispositivosexternos
De formapractica
La caminado-ra genera ace-leracion
Presentauna solucionalterna pararealizar unaconexion deVRML alexterior
Ambientesde realidadvirtual noinmersivamultiusuariocon herra-mientas desoftware libre[17]
Alternativapara un mo-delo teoricode comunica-cion web
Se adapta acualquier pro-blema
El modelo esmuy general
Diseno e im-plementacionde un tra-ductor delenguajes,VRML a Java3D [8]
Ver ApendiceA
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
20 Capıtulo 2. Estado del arte
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
Capıtulo 3
Marco teorico
3.1. Introduccion
En esta seccion se hace una descripcion del lenguaje de entrada para el traductor
(VRML), ası como del lenguaje resultante (Java). La importancia de Java es doble y
radica en el hecho de ser el lenguaje en el que se programo la aplicacion y al mismo
tiempo porque es el lenguaje en el que se obtiene el codigo de salida del traductor. El
codigo de salida es un codigo fuente en Java que incluye la API Java 3D. Se analizan
tanto para VRML como para la API de Java 3D, las caracterısticas y estructuras que se
usan para renderizar las mismas figuras geometricas, para el manejo de transformaciones
y de la apariencia.
3.2. El lenguaje VRML
VRML (Virtual Reality Modeling Language) es el lenguaje mas usado en las apli-
caciones de realidad virtual y se ha convertido en un estandar. Para crear un archivo
VRML solo se necesita un editor de texto ascii y escribir codigo VRML. Los archivos
21
22 Capıtulo 3. Marco teorico
fuente en VRML deben tener extension .wrl (world). Una vez creado el archivo VRML,
este se puede visualizar usando un navegador web que tenga instalado un plug-in (como
el Cortona 3D). El archivo VRML es un formato de archivo de descripcion textual para
mundos y objetos 3D interactivos y fue disenado para usarse en internet, intranets y
sistemas clientes locales y con la intencion de ser un formato universal intercambiable
para graficos 3D y multimedia. VRML puede usarse en una amplia variedad de apli-
caciones tales como la ingenierıa, la visualizacion cientıfica, presentaciones multimedia,
entretenimiento, educacion, paginas web y mundos virtuales compartidos.
Su fortaleza radica en que es un lenguaje de descripcion de escenas en la que cada
escena se compone de un numero de objetos. Los objetos pueden ser figuras geometricas
basicas (cubo, cilindro, cono y esfera) o complejas, las cuales tienen una apariencia y
estan orientados en determinadas posiciones. Estos objetos crean lo que se conoce como
mundo de realidad virtual.
Caracterısticas de VRML VRML puede representar tanto a objetos estaticos como
dinamicos animados en 3D con hiperenlaces a otros medios tales como texto, sonido,
pelıculas e imagenes. Los navegadores VRML y las herramientas de autorıa para la
creacion de archivos VRML se encuentran disponibles para diferentes plataformas.
Un archivo VRML esta formado por:
Cabecera: La cabecera es la lınea de inicio del archivo VRML y es siempre la
misma:
#VRML V2.0 utf8
donde VRML V2.0 indica el estandar empleado y utf8 indica el uso de caracteres
internacionales.
Comentarios: Se escriben en una sola lınea, la cual comienza con el sımbolo #.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
3.2. El lenguaje VRML 23
Nodos: Son las estructuras mınimas indivisibles las cuales definen las caracterısti-
cas de un objeto o bien las relaciones entre distintos objetos y estos en la mayorıa
de los casos pueden repetirse tantas veces como sea necesario en una escena. Se
deben tener en cuenta las siguientes consideraciones:
• Los nodos contienen campos que describen las propiedades de los objetos y
son de un tipo determinado.
• Cada tipo de nodo tiene una serie de valores predeterminados para cada uno
de sus campos.
• Los campos pueden tener valores simples o vectores.
• VRML es un lenguaje sensible a mayusculas y minusculas.
• Todos los nodos deben comenzar siempre con letra mayuscula.
• Los campos de los nodos deben comenzar siempre con letra minuscula.
• Los numeros se escriben en punto flotante.
• Se recomienda utilizar una lınea distinta para cada nodo, para cada campo y
para cada valor de cada campo.
3.2.1. Nodos
Como se menciono anteriormente, la estructura basica que usa VRML para modelar
un espacio virtual se denomina nodo. Un nodo es una abstraccion de un objeto o un
concepto del mundo real. Los nodos estan ordenados en estructuras jerarquicas deno-
minadas "grafos de escena" (scene graphs). Ejemplos tıpicos de nodos son: esfera, un
punto de luz, los atributos de un material, etc.
Cada nodo tiene las siguientes caracterısticas:
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
24 Capıtulo 3. Marco teorico
Un nombre tipo, ejemplos: Box, Color, Group, Sphere, Sound, o SpotLight.
Cero o mas campos que definen como cada nodo difiere de otros nodos del mismo
tipo.
Un conjunto de eventos que puede enviar y recibir, y cambian el estado del nodo.
Una implementacion para cada nodo, la cual define como reacciona a eventos.
Los nodos pueden nombrarse y pueden ser usados por otras sentencias como refe-
rencia a una instanciacion especıfica.
Nodo forma (Shape)
El nodo Shape asocia o agrupa un nodo geometry (el cual define la figura geometrica)
con un nodo appearance (que define la apariencia de la geometrıa). Los nodos Shape
pueden formar parte de una jerarquıa de transformacion. Un nodo Shape solo puede
contener un nodo geometry en su campo geometry, los cuales pueden ser: cubo, cono,
esfera y cilindro.
La apariencia de la forma geometrica se describe con el nodo appearance, el cual des-
cribe las propiedades de la apariencia (material y textura) para aplicarse a la geometrıa
de la figura. Los nodos del siguiente tipo pueden especificarse en el campo material del
nodo apariencia: Material. Los nodos de los siguientes tipos pueden especificarse en el
campo texture del nodo Appearance: ImageTexture, PixelTexture y MovieTexture. Los
nodos de los siguientes tipos pueden especificarse en el campo textureTransform del nodo
Appearance: TextureTransform.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
3.2. El lenguaje VRML 25
Geometrıa y apariencia
VRML utiliza el nodo Shape para definir la figura geometrica y la apariencia de la
figura. Las figuras geometricas son: cubo, cono, esfera y cilindro. La apariencia puede
ser un color. En otras palabras las formas (Shapes) son los elementos que se pueden
visualizar en forma de objetos visuales en los mundos VRML. La sintaxis del nodo
Shape es la siguiente:
Shape{
geometry ...
appearance ...
}
Los nodos geometricos primitivos son los siguientes:
Box
Cone
Cylinder
Sphere
El campo appearance especifica las propiedades en cuanto al material del objeto,
como color, transparencia, etc. y su textura, y que describe al campo geometry.
Nodo primitivo Box
Sintaxis:
Box{
size ancho altura profundidad
}
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
26 Capıtulo 3. Marco teorico
Ejemplo:
Box{
size 2.0 0.5 3.0
}
Las dimensiones que maneja VRML son dimensiones abstractas, pero por costumbre
se considera el metro como la unidad predeterminada. En el ejemplo anterior se definio un
cubo de 2 metros de ancho, 0.5 metros de alto y 3 metros de profundidad.
Nodo primitivo Cone
Sintaxis:
Cone{
height altura
bottomRadius radio_de_la_base
bottom valor_logico
side valor_logico
}
Los campos bottom y side indican que se dibuja la base y la superficie lateral res-
pectivamente. Por omision estos campos son TRUE.
Ejemplo:
Cone{
height 3.0
bottomRadius .75
}
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
3.2. El lenguaje VRML 27
Nodo primitivo Cylinder
Sintaxis:
Cylinder{
height altura
radius radio
bottom valor_logico
side valor_logico
top valor_logico
}
Los campos bottom, side y top indican si se dibujan la base inferior, la superfice
lateral y la base superior del cilindro. Por omision son TRUE.
Ejemplo:
Cylinder{
height 2.0
radius 1.5
}
Nodo primitivo Sphere
Sintaxis:
Sphere{
radius radio
}
Ejemplo:
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
28 Capıtulo 3. Marco teorico
Sphere{
radius 1.0
}
Observese que la definicion de un nodo primitivo implica la definicion de un objeto,
pero no su visualizacion y esta es la razon por la que se han de encapsular dentro de un
nodo Shape, la cual tambien encapsula su apariencia.
Ejemplo:
#VRML V2.0 utf8
Shape{
geometry Cylinder{
height 2.0
radius 1.5
}
appearance Appearance{
material Material {}
}
}
3.2.2. Figuras irregulares
Mediante la combinacion de las formas geometricas basicas cubo, cono, esfera y
cilindro se pueden obtener otras formas de mayor complejidad, pero siempre que estas
sean figuras regulares lo cual limita su complejidad. Para realizar objetos que no se
pueden hacer a partir de las figuras basicas, VRML proporciona nodos que facilitan el
diseno flexible de figuras irregulares. Se recomienda disenar la geometrıa de un objeto
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
3.2. El lenguaje VRML 29
en dos pasos aislados
Especificacion de las coordenadas
Creacion de la forma geometrica
Se indica mediante el nodo Coordinate la posicion de los puntos que se van a utilizar
para construir el objeto. Estos puntos no son visibles en el escenario virtual
Nodo Coordinate
Coordinate {
point [
Eje_x Eje_Y Eje_Z,
Eje_x Eje_Y Eje_Z,
...
Eje_x Eje_Y Eje_Z
]
}
El campo point puede poseer varios puntos, cuyas coordenadas estan separadas por
comas.
Coordinate {
point [
12.0 11.0 17.1,
20.5 13.8 5.3,
14.0 6.1 22.9
]
}
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
30 Capıtulo 3. Marco teorico
Creacion de la forma geometrica. Despues de definir los puntos que forman el esque-
leto del objeto, estos se unen. Existen tres formas de unir estos puntos, cada una de las
cuales esta asociada a un nodo diferente.
PointSet
IndexedLineSet
IndexedFaceSet
Estos tres nodos poseen un campo denominado coord que acepta como valor un nodo
Coordinate.
Nodo PointSet Representa un conjunto de puntos situados en las coordenadas indi-
cadas dentro del sistema de coordenadas del nodo padre.
PointSet {
coord Coordinate {
point [ . . . ]
}
color Color {
color [ . . . ]
}
}
El campo coord toma como valor un nodo de tipo Coordinate, el cual define los
puntos que se desean representar. El campo color sirve para definir el color de cada uno
de los puntos. Este campo toma como valor un nodo Color, que a su vez contiene un
campo de tipo color de nuevo. Este ultimo campo describe una lista de colores RGB, de
forma que el primer color corresponde al primer punto descrito por el nodo Coordinate
del campo coord, el segundo color corresponde al segundo punto y ası sucesivamente
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
3.2. El lenguaje VRML 31
PointSet {
coord Coordinate {
point [
12.0 11.0 17.1, #1o punto
20.5 13.8 5.3, #2o punto
14.0 6.1 22.9 #3o punto
]
}
color Color {
color [
1.0 0.0 0.0, # 1o punto rojo
0.0 1.0 1.0, # 2o punto verde
1.0 1.0 0.0 # 3o punto amarillo
]
}
}
Si se incluyese este codigo, tal como esta, en un documento VRML, no podrıamos
ver ninguno de estos puntos, ya que como se ha visto anteriormente, para crear un
objeto visible se debe utilizar el nodo Shape, observese que se ha prescindido del campo
appearance del nodo Shape ya que no es necesario, pues los puntos no van a tener la
apariencia por defecto, sino la que se determina en el campo color.
Shape {
geometry PointSet {
coord Coordinate {
point [
12.0 11.0 17.1, #1o punto
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
32 Capıtulo 3. Marco teorico
20.5 13.8 5.3, #2o punto
14.0 6.1 22.9 #3o punto
]
}
color Color {
color [
1.0 0.0 0.0, # 1o punto rojo
0.0 1.0 1.0, # 2o punto verde
1.0 1.0 0.0 # 3o punto amarillo
]
}
}
}
Nodo IndexedLineSet Permite unir los diferentes puntos especificados en su campo
coord mediante lıneas poligonales.
IndexedLineSet{
coord Coordinate {
point [ . . . ]
}
coordIndex [...]
colorPerVertex valor_logico
color Color {
color [ . . . ]
}
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
3.2. El lenguaje VRML 33
colorIndex [...]
}
El campo coord toma como valor un nodo de tipo Coordinate, el cual define los puntos
que sirven como esqueleto de la figura. El campo coordIndex se utiliza para especificar
entre que puntos se han de trazar las lıneas. Una lınea puede ser trazada utilizando mas
de dos puntos, de forma que se dibuja una lınea entre el primer y el segundo punto, otra
entre el segundo y el tercer punto, y ası sucesivamente.Un ındice con valor -1 indica que
ha finalizado la lınea actual y que comienza la siguiente. Para indicar el primer punto
definido en el nodo Coordinate se utiliza el 0, para el segundo el 1 y ası sucesivamente.
El campo colorPerVertex indica como se han de aplicar los colores sobre las lıneas.
Nodo IndexedFaceSet Permite unir los diferentes puntos especificados en su campo
coord mediante caras poligonales.
IndexedFaceSet{
coord Coordinate {
point [ . . . ]
}
coordIndex [...]
colorPerVertex valor_logico
color Color {
color [ . . . ]
}
colorIndex [...]
}
El campo coord toma como valor un nodo de tipo Coordinate, el cual define los puntos
que sirven como esqueleto de la figura y utiliza los ındices de su campo coorIndex para
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
34 Capıtulo 3. Marco teorico
especificar las caras poligonales. Un ındice con valor -1 indica que ha finalizado la cara
actual y comienza la siguiente. El campo colorPerVertex indica como se han de aplicar
los colores.
3.2.3. Nodos de transformacion
Muchas figuras compuestas estan hechas con figuras basicas colocadas en diferente
posicion, ya sea que esten trasladadas o rotadas, ademas se pueden hacer mas chicas o
mas grandes aplicando un escalamiento. VRML maneja las transformaciones a traves
del nodo transformacion tal como se mueestra a continuacion.
Con rotacion:
#VRML V2.0 utf8
Transform {
rotation 1 0 0 0.872664625997165
children [
Shape{
geometry Cone{
bottomRadius 0.3 height 0.5
}
appearance Appearance{
material Material {
diffuseColor 0.5 0.9 0.3
}
}
}
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
3.2. El lenguaje VRML 35
]
}
Con traslacion:
#VRML V2.0 utf8
Transform {
translation -0.4 0 0
children [
Shape{
geometry Cone{
bottomRadius 0.5 height 0.7
}
}
]
}
Con escalamiento:
#VRML V2.0 utf8
Transform {
scale 0.5 0.5 0.5
children [
Shape{
geometry IndexedFaceSet{
coord Coordinate {
point [
-1.0 1.0 1.0,
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
36 Capıtulo 3. Marco teorico
1.0 1.0 1.0,
1.0 1.0 -1.0,
-1.0 1.0 -1.0,
-1.0 -1.0 1.0,
1.0 -1.0 1.0,
1.0 -1.0 -1.0,
-1.0 -1.0 -1.0,
]
}
coordIndex[
0,1,2,3,-1
7,6,5,4,-1
0,4,5,1,-1
1,5,6,2,-1
2,6,7,3,-1
3,7,4,0
]
}
appearance Appearance{
texture ImageTexture {
url "ladrillo1.jpg"
}
}
}
]
}
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
3.3. El lenguaje de programacion Java 37
3.2.4. Conclusiones acerca de VRML
Despues de esta revision al lenguaje VRML podemos resumir:
VRML es un lenguaje de realidad virtual intuitivo, flexible y poderoso.
Se pueden crear figuras complejas a partir de las primitivas basicas: cubo, cono,
esfera y cilindro.
No es muy difıcil la curva de aprendizaje, en pocas horas se puede empezar a
desarrollar aplicaciones.
Se requiere un plug-in para poder visualizarlo en un navegador web.
No existe forma de interconectar una aplicacion VRML a dispositivos hardware.
Su sintaxis no es muy estricta, lo cual causa que se escriba codigo no bien formado.
3.3. El lenguaje de programacion Java
Java es un lenguaje de programacion de proposito general disenado para producir
software de calidad y tiene como caracterısticas:
Es orientado a objetos: soporta las caracterısticas abstraccion, encapsulacion, he-
rencia y polimorfismo.
Multiplataforma: Los mismos binarios funcionan correctamente en Windows 7/Vis-
ta/NT/95 y Unix/Linux y Power/Mac.
Robusto: Los errores se detectan en el momento de producirse, lo que facilita la
depuracion.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
38 Capıtulo 3. Marco teorico
Seguro: Applets recuperados por medio de la red no pueden causar dano a los
usuarios.
Confiable: Minimiza los errores que se escapan a la fase de prueba.
Posee bibliotecas de clases estandares: manejo de archivos, comunicacion de datos,
acceso a internet, a bases de datos e interfaces graficas.
Simple: no posee aritmetica de punteros, no se necesita liberar la memoria y no
tiene herencia multiple.
No se requiere licencia para su uso.
Existen IDE´s gratuitos.
3.4. La API Java 3D
¿Que es Java 3D? Java 3D es una interfaz que permite escribir programas para re-
presentar en interactuar en tres dimensiones y provee una jerarquıa sofisticada de clases
para crear y manipular objetos, y estructuras en 3D, a traves de una API que consta de
constructores que crean visualizaciones, animaciones y renderizados 3D.
La jerarquıa de clases Java 3D permite trabajar a un alto nivel de abstraccion para
crear y manipular objetos graficos en 3D. Los objetos residen en un mundo virtual se
renderizan muchas veces en forma automatica. Un programa 3D crea instancias de los
objetos de Java 3D y las situa dentro de una estructura denominada diagrama de la
escena (scene graph). El diagrama de escena es un conjunto de objetos 3D estructura-
dos en forma de arbol que especifica el contenido del universo virtual y a la vez como
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
3.4. La API Java 3D 39
sera representado (renderizado).
Java 3D usa los siguientes simbolos:
Universal Virtual y Local representan objetos de clases especıficas.
Group , Leaf y NodeComponent se usan para indicar la subclase de un objeto
especıfico.
La flecha continua representa la relacion de dependencia padre-hijo.
La flecha discontinua hace referencia a otros objetos de otras ramas del arbol. El
numero de flechas que pueden salir de un objeto no estan limitadas.
Java 3D es una extension al lenguaje Java, la cual se proporciona como una API con
el objetivo de desarrollar aplicaciones graficas tridimensionales y consta de una jerarquıa
de clases y una coleccion de constructores y metodos para crear y manejar geometrıas
3D y sus respectivas apariencias.
Una aplicacion Java 3D crea instancias de objetos Java 3D y las ubica en una estruc-
tura de datos tipo arbol denominada escenario grafico o diagrama de escena. El escenario
grafico especifica completamente el contenido de un universo virtual.
Para facilitar el desarrollo de las aplicaciones, la API proporciona las clases de utili-
dades que reducen significativamente el numero de lıneas de codigo en un programa Java
3D. En este trabajo el termino objeto visual se utilizara para referirnos a un "objeto
del escenario grafico" (por ejemplo, un cubo o una esfera). Por otro lado el termino
objeto solo se usara para referirnos a una instancia de una clase y el termino conteni-
do se usara para referirnos a objetos visuales en un escenario grafico que forman un todo.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
40 Capıtulo 3. Marco teorico
Partimos del concepto de escenario grafico, el cual es una estructura de datos com-
puesta de nodos y arcos. Un nodo es un elemento dato y un arco es una relacion entre
elementos datos. Los nodos en un escenario grafico son las instancias de las clases Java
3D. Los arcos representan dos tipos de relaciones entre instancias Java 3D. La relacion
padre-hijo: Un nodo Group puede tener cualquier numero de hijos, pero solo un padre.
Un nodo hoja solo puede tener un padre y no puede tener hijos. La otra relacion es la
referencia. Una referencia asocia un objeto NodeComponent con un nodo del escenario
grafico. Los objetos NodeComponent definen la geometrıa y los atributos de apariencia
usados para renderizar los objetos visuales.
Un escenario grafico esta formado desde los arboles con raıces en los objetos Locale.
Los NodeComponents y las referencias a arcos no forman parte del escenario grafico.
Para disenar un universo virtual Java 3D se dibuja un escenario grafico usando un
conjunto de sımbolos estandar como se muestra en la figura 3.1:
Figura 3.1: Sımbolos estandar para Java 3D
Es necesario tener en consideracion lo siguiente:
Cada escenario grafico tiene un solo VirtualUniverse.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
3.4. La API Java 3D 41
Este objeto tiene una lista de objetos Locale.
Un objeto Locale proporciona una referencia a un punto en el universo virtual (los
objetos Locale se pueden considerar como marcas que determinan la localizacion
de los objetos visuales en el universo virtual).
Un objeto de un escenario grafico no puede existir en mas de un universo virtual.
Se debe usar una y solo una instancia de VirtualUniverse en cada programa Java
3D.
Un objeto VirtualUniverse puede referenciar muchos objetos Locale (La mayorıa
de los programas Java 3D tienen un solo objeto Locale).
Cada objeto Locale puede servir de raız para varios sub-graficos del escenario
grafico.
Un objeto BranchGroup es la raız de un subgrafico, o rama grafica.
Hay dos categorias de escenarios sub-graficos: la rama de vista grafica (rama de
representacion) y la rama de contenido grafico.
La rama de contenido grafico especifica el contenido del universo virtual: geometrıa,
apariencia, comportamiento, localizacion, sonidos y luces.
La rama de vista grafica especifica los parametros de visualizacion, como la posicion
de visualizacion y la direccion.
Las dos ramas juntas especifican la mayorıa del trabajo que el renderizador tiene
que hacer.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
42 Capıtulo 3. Marco teorico
3.4.1. Pasos para desarrollar una aplicacion en Java 3D
Las subclases de SceneGraphObject son los bloques fundamentales que conforman
los escenarios graficos y se deben colocar en el siguiente orden:
1. Crear un objeto soporte: Canvas3D.
2. Crear un objeto universo Virtual: VirtualUniverse.
3. Crear un objeto de referencia: Locale (adjuntarlo al objeto VirtualUniverse).
4. Construir la Rama de Vista o Representacion Grafica:
a) Crear el objeto de presentacion: View
b) Crear el objeto plataforma: ViewPlatform
c) Crear el objeto cuerpo: PhysicalBody
d) Crear el objeto entorno: PhysicalEnvironment (Adjuntar los objetos View-
Platform, PhysicalBody, PhysicalEnvironment, y Canvas3D al objeto View)
5. Construir la(s) rama(s) grafica(s) de contenido.
6. Compilar la(s) rama(s) grafica(s).
7. Insertar los subgraficos (otras ramas) dentro del objeto de referencia Locale.
En la figura 3.2 se muestra la separacion de las dos ramas:
La rama de representacion es la que esta encerrada por el marco azul y esta se
consigue usando la clase SimpleUniverse y corresponde a los incisos b, c y d.
La rama de contenido es la rama que desarrolla un programador 3D en donde se
codifican las geometrıas y apariencias de los objetos representados en la escena.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
3.4. La API Java 3D 43
Figura 3.2: Rama de representacion y la rama de contenido de Java 3D
La clase SimpleUniverse El constructor de SimpleUniverse crea un escenario grafico
que incluye un objeto VirtualUniverse y Locale, y una rama de vista grafica completa.
Esta rama grafica creada usa una instancia de las clases de conveniencia ViewingPlat-
form y Viewer en lugar de las clases nucleo usadas para crear una rama de vista grafica.
Observese que SimpleUniverse solo usa indirectamente los objetos View y ViewPlatform
del nucleo de Java 3D. Los objetos SimpleUniverse suministran la funcionalidad de todos
los objetos que hay dentro del recuadro azul de la figura 3.3.
Cuando se usan los objetos de SimpleUniverse el procedimiento se simplifica de la
siguiente manera:
1. Crear un objeto Canvas3D.
2. Crear un objeto SimpleUniverse que referencia al objeto Canvas3D anterior.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
44 Capıtulo 3. Marco teorico
Figura 3.3: La clase SimpleUniverse de Java 3D
3. Personalizar el objeto SimpleUniverse.
4. Construir la rama de contenido.
5. Compilar la rama de contenido grafico.
6. Insertar la rama de contenido grafico dentro del objeto Locale de SimpleUniverse.
7. Constructores de SimpleUniverse.
Conjunto de sentencias import Todo programa en Java 3D debe incluir al menos
las sentencias import que se muestran en la figura 3.4.
La clase extendida de toda aplicacion Java 3D Un programa Java 3D tıpico
empieza definiendo una nueva clase que extiende la clase Applet. Por ejemplo si se
definiese MiClase3D.java, la cual debe extender la clase Applet. La gran mayorıa de
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
3.4. La API Java 3D 45
1 import javax.swing.JFrame;
2 import java.awt.BorderLayout;
3 import java.awt.Frame;
4 import java.awt.event.WindowEvent;
5 import java.awt.event.WindowListener;
6 import java.awt.GraphicsConfiguration;
7 import com.sun.j3d.utils.image.TextureLoader;
8 import com.sun.j3d.utils.universe.SimpleUniverse;
9 import com.sun.j3d.utils.geometry.*;
10 import javax.media.j3d.*;
Figura 3.4: Sentencias import necesarias para todo programa Java 3D
programas Java 3D utilizan el fragmento de codigo mostrado en la figura 3.5 y que
corresponde a la rama de representacion donde se adapta el objeto SimpleUniverse con
los valores de configuracion.
3.4.2. Conclusiones acerca de Java 3D
Despues de esta revision a la API de Java 3D podemos resumir:
Java 3D es una API muy poderosa para realizar aplicaciones 3D.
Requiere de un amplio conocimiento de las clases de la API.
Se requiere de mucho codigo para realizar aplicaciones sencillas.
Exige un buen nivel de programacion.
La informacion para aprender Java 3D es muy escueta y no existen muchos ejem-
plos disponibles.
Java 3D tiene la ventaja de ser una extension del lenguaje de programacion Java
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
46 Capıtulo 3. Marco teorico
1 public class MiClase3D extends Applet {
2 public MiClase3D() { // constructor
3 setLayout(new BorderLayout());
4 Canvas3D canvas3D = new Canvas3D(null);
5 add("Center", canvas3D);
6 BranchGroup scene = createSceneGraph();
7 scene.compile();
8
9 // SimpleUniverse es una clase Convenience Utility
10 SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
11
12 // Esto mueve el ViewPlatform un poco atras para que
13 // Los objectos en la escena pueden visualizarse.
14 simpleU.getViewingPlatform().setNominalViewingTransform();
15
16 simpleU.addBranchGraph(scene);
17 } // fin de MiClase3D
Figura 3.5: Codigo corespondiente a la rama de representacion
de esta manera se tienen todas las ventajas que da el lenguaje Java como son la
portabilidad, plataforma neutra, orientado a objetos, etc.
Existe una API que permite la comunicacion con el hardware.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
Capıtulo 4
Desarrollo
En esta seccion se describen las clases y el algoritmo que se disenaron durante el
desarrollo del Traductor VRML a Java 3D.
4.1. Diagrama a bloques del Traductor VRML a Ja-
va 3D
El Traductor VRML a Java 3D es una aplicacion software, la cual recibe como en-
trada un codigo fuente VRML bien formado. La aplicacion lo traduce, obteniendose a la
salida un codigo en Java 3D, el cual tiene la misma funcionalidad que el archivo fuente
VRML.
La figura 4.1 muestra los tres pasos fundamentales del proceso del Traductor VRML
a Java 3D.
El Traductor esta conformado por estructuras de datos y algoritmos que identifican
las estructuras de los archivos VRML, las cuales consisten de nodos geometricos, de
47
48 Capıtulo 4. Desarrollo
transformaciones y de texturas, todas estas combinadas para formar escenarios comple-
jos.
Durante el proceso de traduccion se crean segmentos de codigo en Java 3D que rea-
lizan la misma funcionalidad que el archivo original en VRML y se concatenan para
formar el archivo de salida.
Es muy importante que el usuario de la herramienta, tenga la seguridad de que el
codigo fuente VRML es funcionalmente correcto, lo cual se puede realizar probando
previamente el archivo VRML usando un explorador web que soporte archivos VRML
o bien instalando un plug-in para VRML, como Cortona 3D.
Figura 4.1: Diagrama conceptual del Traductor VRML a Java 3D
Posteriormente, una vez obtenido del Traductor el archivo generado en Java, este se
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
4.2. Algoritmo del Traductor VRML a Java 3D 49
puede compilar usando el compilador de Java para obtener el archivo .class y luego este
se puede ejecutar usando la maquina virtual de Java para visualizar el escenario 3D.
Estos dos pasos, el de la compilacion y la ejecucion se pueden llevar a cabo usando un
ambiente de desarrollo como NetBeans o directamente a traves de la lınea de comandos,
una vez obtenido el archivo .java generado por el Traductor VRML a Java 3D.
De esta forma solo se requiere compilar el archivo .java para obtener el archivo .class
y este a su vez ejecutarlo en la maquina virtual. No se debe olvidar que se requiere te-
ner instalados previamente el compilador Java y la maquina virtual de Java para poder
visualizar la renderizacion del archivo de salida en Java 3D. Estas fases estan represen-
tadas por las flechas amarillas en la figura 4.2.
Las fases del Traductor VRML a Java 3D estan representadas por los tres primeros
bloques y las flechas azules. El presente trabajo, ademas de desarrollar el traductor,
proporciona una herramienta completa que incluye una interfaz grafica de usuario que
realiza todos los pasos representados por los seis bloques y las correspondientes flechas
azules y amarillas, tal como se ve en la figura 4.2.
4.2. Algoritmo del Traductor VRML a Java 3D
El algoritmo para traducir el archivo VRML a su correspondiente codigo en Java 3D
se muestra a continuacion:
1. Crear el flujo para abrir el Archivo VRML.
2. Recorrer el archivo VRML para crear un arbol que contenga las geometrıas, sus
propiedades, apariencia y transformaciones.
3. Recorrer nuevamente el archivo para obtener las geometrıas (Cone, Box, Sphere,
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
50 Capıtulo 4. Desarrollo
Figura 4.2: Diagrama a bloques completo de la herramienta Traductor VRML a Java 3D
Cone, IndexedLineSet, Pointset e IndexedFaceset), sus propiedades y apariencia.
Cada geometrıa se almacena en un nodo de una lista enlazada.
4. Recorrer el arbol VRML generado en el paso 2 para obtener una lista de las trans-
formaciones (scale, rotate, translate) y el valor que toma la transformacion, ademas
de almacenar a que figura se aplica dicha transformacion. Cada transformacion se
almacena en un nodo de una lista enlazada.
5. Crear el flujo para abrir en modo escritura el archivo Java que se generara.
6. Escribir en el archivo java los encabezados del archivo Java (import).
7. Escribir en el archivo Java el constructor de la clase con las instrucciones para
establecer las caracterısticas iniciales del mundo virtual.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
4.3. Diagrama de clases del traductor VRML a Java 3D 51
8. Escribir en el archivo Java las geometrıas contenidas en la lista de geometrıas.
9. Escribir en el archivo Java las transformaciones contenidas en la lista de transfor-
maciones y enlazarlas con las figuras correspondientes.
10. Escribir los metodos para la apariencia de cada una de las geometrıas.
11. Escribir los metodos de cada una de las transformaciones.
12. Desplegar en la aplicacion el archivo Java que se genera.
13. Compilar el archivo Java.
14. Ejecutar el archivo Java.
4.3. Diagrama de clases del traductor VRML a Java
3D
La herramienta se diseno siguiendo el paradigma orientado a objetos. Se crearon las
clases con el fin de aprovechar las caracterısticas de encapsulamiento y modularidad,
de esta forma se pueden realizar extensiones de forma ordenada y limpia. La figura 4.3
muestra el diagrama de clases utilizada en el diseno del traductor VRML a Java 3D.
4.4. Diagrama de actividades del traductor VRML
a Java 3D
El diagrama de actividades que se muestra en la figura 4.4 resume las diferentes
tareas que realiza la aplicacion para llevar a cabo la traduccion, solo se presentan las
tareas mas importantes.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
52 Capıtulo 4. Desarrollo
Figura 4.3: Diagrama de clases de la herramienta traductor VRML a Java 3D
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
4.4. Diagrama de actividades del traductor VRML a Java 3D 53
Figura 4.4: Diagrama de Actividades de la herramienta Traductor VRML a Java 3D
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
54 Capıtulo 4. Desarrollo
4.5. Especificaciones del archivo VRML que se toma
como entrada para Traductor VRML a Java 3D
El Traductor VRML a Java 3D requiere que los archivos cumplan con las siguientes
especificaciones:
Cada nodo debe estar en una lınea.
Se debe colocar primero la geometrıa y despues la apariencia.
La llave de inicio debe estar con el nodo que se analiza.
Las dimensiones de los nodos basicos deben estar en una sola lınea y en un orden
preestablecido.
Los puntos de las coordenadas deben llevar un orden.
Las llaves y corchetes de cierre se deben colocar en lıneas separadas.
No se deben dejar lıneas en blanco.
En la figura 4.5 se muestra un ejemplo representativo de lo que se menciono ante-
riormente.
4.6. Especificaciones de diseno software de la herra-
mienta: Traductor VRML a Java 3D
La herramienta Traductor de VRML a Java 3D funciona bajo las siguientes especi-
ficaciones las cuales se deben considerar en todo momento.
Instalar previamente la maquina virtual de Java.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
4.6. Especificaciones de diseno software de la herramienta: TraductorVRML a Java 3D 55
1 #VRML V2.0 u t f 82 Shape{3 geometry Cylinder{4 rad iu s 0 .4 he ight 0 .55 }6 appearance Appearance{7 t ex ture ImageTexture{8 u r l ” p i so2 . jpg ”9 }
10 }11 }12 Transform {13 t r a n s l a t i o n 0 .8 0 014 c h i l d r e n [15 Shape{16 geometry Cone{17 bottomRadius 0 .4 he ight 0 .818 }19 appearance Appearance{20 t ex ture ImageTexture {21 u r l ” l a d r i l l o 1 . jpg ”22 }23 }24 }25 ]26 }27 }
Figura 4.5: Ejemplo que cumple con las especificaciones de la estructura de un archivo validopara el Traductor VRML a Java 3D
Instalar previamente el compilador de Java.
Instalar la API para Java 3D.
Instalar el entorno de desarrollo NetBeans.
Instalar previamente la herramienta Traductor VRML a Java 3D, producto de esta
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
56 Capıtulo 4. Desarrollo
tesis.
Se recomienda instalar el plug-in Cortona 3D, para que se pueda visualizar en el
navegador los archivos VRML, con el unico fin de verificar la funcionalidad del
archivo VRML y a la vez para comparar su respectivas renderizaciones.
Los escenarios pueden contener las primitivas basicas para crear figuras regulares:
Box, Cone Cylinder y Sphere.
Los escenarios pueden contener los nodos para crear figuras irregulares : PointSet,
IndexedLineSet e IndexedFaceSet.
Los escenarios pueden contener los nodos de transformacion: rotacion, translacion
y escalamiento, los cuales deben estar correctamente anidados.
Manejo de texturas para las figuras geometricas. Se debera guardar el archivo de
la textura en el mismo directorio donde se encuentra el archivo fuente VRML. No
olvidar considerar que los archivos de textura deben ser potencias de 2, es decir
tendran un tamano de 128x128, 256x256, etc. debido a que Java 3D ası lo exige
[27].
La interfaz grafica de usuario permite al usuario seleccionar el archivo de entrada,
siempre que tenga extension .wrl.
Si los nodos estan correctamente anidados, estos se podran observar en el area para
la representacion jerarquica grafica (arbol) de los nodos del archivo a traducir. Se
pueden observar las transformaciones de cada geometrıa.
Se debe guardar la salida de la traduccion con la extension .java para poder reali-
zarse la compilacion del archivo Java 3D. Esto se realiza de forma automatica en
la interfaz grafica.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
4.7. Ejemplo del uso del Traductor VRML a Java 3D 57
La ejecucion se realiza en forma automatica, por lo que no hay necesidad de buscar
el archivo tipo class y ejecutarlo por separado usando el IDE o la lınea de comandos.
La salida del traductor, el cual es codigo Java 3D, se puede observar en la interfaz
grafica, lo que evita que el desarrollador tenga que recurrir a un editor o al IDE
parea observar el codigo generado.
Como ayuda al usuario la herramienta realiza la habilitacion y deshabilitacion de
los pasos del proceso de conversion: abrir archivo VRML, convertir a Java, compilar
y ejecutar, de esta forma hace mas facil su uso.
4.7. Ejemplo del uso del Traductor VRML a Java
3D
En esta seccion se explica detalladamente el procedimiento completo para usar la
herramienta Traductor VRML a Java 3D. Se parte del hecho de se cuenta con un archivo
VRML bien formado que se usa como entrada para la herramienta.
1. Una vez instalados los archivos correspondientes de la herramienta, abra el entorno
de desarrollo netBeans y ejecute la aplicacion. Aparecera en la pantalla la interfaz
grafica que se muestra en la figura 4.6, donde unicamente estan habilitados los
botones de abrir archivo, acerca de y salir.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
58 Capıtulo 4. Desarrollo
Figura 4.6: Pantalla de inicio de la herramienta traductor VRML a Java 3D
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
4.7. Ejemplo del uso del Traductor VRML a Java 3D 59
2. Se procede a seleccionar un archivo VRML, que cumpla con las especificaciones
dadas anteriormente. Pulse el boton con el icono de la carpeta abierta tal como se
muestra en la figura 4.7. Selecione un archivo VRML.
Figura 4.7: Pantalla que muestra la seleccion de un archivo de entrada de la herramientatraductor VRML a Java 3D
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
60 Capıtulo 4. Desarrollo
3. Una vez abierto el archivo aparece el arbol jerarquico de los nodos que conforman
el archivo VRML. Los nodos aparecen al inicio contraidos, tal como se muestra en
la figura 4.8.
Figura 4.8: Pantalla que muestra los nodos contraidos de la estructura de archivo VRML.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
4.7. Ejemplo del uso del Traductor VRML a Java 3D 61
4. En la parte izquierda de la interfaz grafica aparece la estructura del archivo VRML
mostrando sus nodos anidados. Los nodos se pueden expandir o contraer tal como
se muestra en la figura 4.9.
Figura 4.9: Pantalla que muestra el contenido de los nodos del arbol del archivoVRML expan-didos
5. Pulse el boton convertir a Java, le pedira el nombre con el que desea guardar el
archivo. No olvide escribir la extension .java, de otra forma no se podra compilar
con el compilador de Java. Recuerde tener presente que los archivos de texturas
deben estar ya ubicados en el directorio donde se encuentran los archivos VRML.
Se recomienda tener un directorio de trabajo donde esten todos los archivos VRML,
los de Java y los de las texturas. Ver figura 4.10.
6. Aparecera en la interfaz grafica el codigo generado en Java 3D, el cual es el mismo
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
62 Capıtulo 4. Desarrollo
Figura 4.10: Pantalla que muestra la ventana de dialogo para guardar el archivo traducido a.java
que se guardo en el archivo .java. Este archivo sera el que se compilara con el
compilador de Java y posteriormente se ejecutara. El usuario podra observar todo
el codigo haciendo uso del scrollbar y tendra la facilidad de copiar y pegar el codigo
para probarlo desde la lınea de comandos, si ası lo desea, de esta forma se evitan
errores de modificacion por descuido. El codigo no es modificable por cuestiones
de seguridad en la pantalla de salida. Ver figura 4.11.
7. Aparecen las ventanas de la ejecucion y la de renderizado del archivo .class gene-
rado en Java 3D por el Traductor VRML a Java 3D. Ver figura 4.12.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
4.7. Ejemplo del uso del Traductor VRML a Java 3D 63
Figura 4.11: Pantalla que muestra la generacion de codigo Java que obtiene el Traductor VRMLa Java
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
64 Capıtulo 4. Desarrollo
Figura 4.12: Pantalla que muestra la renderizacion del codigo Java
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
Capıtulo 5
Experimentos y Resultados
En este capıtulo se describen las pruebas que se realizaron con el Traductor VRML
a Java 3D. Se usaron varios escenarios con diferentes figuras y caracterısticas. Los re-
sultados aparecen en orden creciente en cuanto a complejidad debido al numero de
figuras y transformaciones. En los ejemplos de este capıtulo se resalta el uso de figuras
geometricas regulares e irregulares, ası como las transformaciones de traslacion, rotacion
y escalamiento, y el manejo de las texturas. Tambien se incluyen ejemplos con los nodos
SetPoint, IndexedLineSet e IndexedFaceSet donde se muestra su gran importancia en la
representacion de figuras irregulares.
Para cada uno de los ejemplos se presenta el siguiente orden para la comprension del
codigo y la comparacion de los resultados.
Codigo fuente en VRML.
Estructura de arbol de los nodos del archivo VRML.
Codigo resultante del traductor VRML a Java 3D.
Renderizacion del archivo VRML usando el navegador y el plug-in Cortona 3D.
65
66 Capıtulo 5. Experimentos y Resultados
Renderizacion del archivo Java 3D.
Cabe senalar que los codigos VRML deben estar bien estructurados y bien formados.
Como se puede observar en el codigo de salida en Java 3D, existen fragmentos de codigo
que siempre son constantes tales como la cabecera que contiene los import y la parte del
universo virtual, por lo que solo se explica el codigo completo en el primer ejemplo.
Los demas ejemplos se presentan en forma completa para la comprension de ambos
codigos y sus correspondientes renderizaciones para su comparacion.
En los apendices B y C se muestran los codigos de entrada en VRML y de salida en Java
3D respectivamente de cuatro ejemplos de gran complejidad con el fin de demostrar la
capacidad de la herramienta desarrollada en la presente tesis.
5.1. Escenarios con una figura regular
En esta parte se presentan figuras geometricas basicas tales como la caja o cubo, el
cilindro, el cono y la esfera.
5.1.1. Caja o cubo con rotacion
La figura 5.1 muestra el codigo VRML de un cubo con rotacion y con apariencia.
La figura 5.2 muestra el arbol que se genera y se presenta en la interfaz grafica del
traductor para el codigo VRML del cubo con rotacion.
Las figura 5.3 muestra la cabecera del programa que contiene las clases necesarias
para compilar el codigo. El paquete java.media.j3d incluye la clase Canvas3D que define
el soporte sobre el cual se representaran los objetos en 3D y la clase BranchGroup la
cual sirve para vincular todos los elementos que constituyen la rama de contenido del
diagrama de escena. Archivo: CajaRotada01.java.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.1. Escenarios con una figura regular 67
1 #VRML V2.0 u t f 82 Transform {3 r o t a t i o n 0 1 0 0.5235987755982994 c h i l d r e n [5 Shape{6 geometry Box{7 s i z e 0 . 3 0 .3 0 .38 }9 appearance Appearance{
10 mate r i a l Material {11 d i f f u s e C o l o r 0 . 8 0 . 7 0 . 412 }13 }14 }15 ]16 }
Figura 5.1: Caja o cubo con rotacion y con apariencia. Archivo: CajaRotada01.wrl
Figura 5.2: Arbol de la caja o cubo con rotacion y apariencia
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
68 Capıtulo 5. Experimentos y Resultados
1 import javax . swing . JFrame ;2 import java . awt . BorderLayout ;3 import java . awt . Frame ;4 import java . awt . event . WindowEvent ;5 import java . awt . event . WindowListener ;6 import java . awt . GraphicsConf igurat ion ;7 import com . sun . j3d . u t i l s . image . TextureLoader ;8 import com . sun . j3d . u t i l s . un ive r s e . S impleUniverse ;9 import com . sun . j3d . u t i l s . geometry . ∗ ;
10 import javax . media . j3d . ∗ ;11 import javax . vecmath . Co lor3 f ;12 import javax . vecmath . Vector3d ;13 import com . sun . j3d . u t i l s . behav io r s . vp . ∗ ;14 import javax . vecmath . Point3d ;15 import javax . vecmath . Po int3 f ;16 import javax . vecmath . Co lor3 f ;17 import javax . vecmath . ∗ ;
Figura 5.3: Paquetes de clases necesarios para compilar una aplicacion en Java 3D, las cualesson siempre utilizadas por que el traductor VRML a Java 3D en el codigo de salida en Java.
La figura 5.4 muestra el constructor para el codigo de salida en Java de un cubo con
rotacion y apariencia. Archivo: CajaRotada01.java.
La figura 5.5 muestra el main del programa generado en el codigo de salida en Java
de un cubo con rotacion y apariencia. Archivo: CajaRotada01.java.
La figura 5.6 muestra el codigo para la rama del contenido (BranchGroup) donde se
crea la escena de un cubo con rotacion y apariencia. Archivo: CajaRotada01.java.
La figura 5.7 muestra el codigo que determina la apariencia de un cubo con rotacion.
Archivo: CajaRotada01.java.
La figura 5.8 muestra el codigo que realiza la transformacion para efectuar la rotacion
de un cubo con rotacion y apariencia. Archivo: CajaRotada01.java.
La figura 5.9 muestra la renderizacion del archivo fuente original en VRML del cubo
con rotacion.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.1. Escenarios con una figura regular 69
1 public class CajaRotada01 extends JFrame {2 public CajaRotada01 ( ) {3 setLayout (new BorderLayout ( ) ) ;4 GraphicsConf igurat ion c o n f i g = SimpleUniverse .
g e tPr e f e r r edCon f i gu ra t i on ( ) ;5 Canvas3D canvas = new Canvas3D ( c o n f i g ) ;6 add ( ” Center ” , canvas ) ;7 BranchGroup escena = createSceneGraph ( ) ;8 SimpleUniverse simpleU = new SimpleUniverse ( canvas ) ;9 simpleU . getViewingPlatform ( ) .
setNominalViewingTransform ( ) ;10 simpleU . addBranchGraph ( escena ) ;11 // l a s t r e s l i n e a s s i g u i e n t e s h a b i l i t a n l a nav igac ion
de l a escena usando e l raton .12 OrbitBehavior ob = new OrbitBehavior ( canvas ) ;13 ob . setSchedul ingBounds (new BoundingSphere (new
Point3d ( 0 . 0 , 0 . 0 , 0 . 0 ) , Double .MAX VALUE) ) ;14 simpleU . getViewingPlatform ( ) . setViewPlatformBehavior
( ob ) ;15 }
Figura 5.4: Constructor de la caja o cubo con rotacion y apariencia. Archivo: CajaRota-da01.java
1 public stat ic void main ( St r ing args [ ] ) {2 CajaRotada01 frame = new CajaRotada01 ( ) ;3 frame . s e tDe fau l tC lo seOperat ion ( JFrame .EXIT ON CLOSE)
;4 frame . s e t S i z e (300 , 300) ;5 frame . s e t V i s i b l e ( true ) ;6 }
Figura 5.5: main para la caja o cubo con rotacion. Archivo: CajaRotada01.java
La figura 5.10 muestra la renderizacion del archivo de salida generado en Java 3D
del cubo con rotacion.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
70 Capıtulo 5. Experimentos y Resultados
1 public BranchGroup createSceneGraph ( ) {2 BranchGroup r a i z = new BranchGroup ( ) ;3 BoundingSphere bounds = new BoundingSphere (new
Point3d ( ) , Double .MAX VALUE) ;4 D i r e c t i o n a l L i g h t l 1 =5 new D i r e c t i o n a l L i g h t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f
) , new Vector3 f (1 f , 0 . 0 f , −0.4 f ) ) ;6 l 1 . s e t In f luenc ingBounds ( bounds ) ;7 r a i z . addChild ( l 1 ) ;8 D i r e c t i o n a l L i g h t l 2 =9 new D i r e c t i o n a l L i g h t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f
) , new Vector3 f (−1 f , 0 . 0 f , −0.4 f ) ) ;10 l 2 . s e t In f luenc ingBounds ( bounds ) ;11 r a i z . addChild ( l 2 ) ;12 D i r e c t i o n a l L i g h t l 3 =13 new D i r e c t i o n a l L i g h t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f
) , new Vector3 f (0 f , 1 . 0 f , −0.4 f ) ) ;14 l 3 . s e t In f luenc ingBounds ( bounds ) ;15 r a i z . addChild ( l 3 ) ;16 D i r e c t i o n a l L i g h t l 4 =17 new D i r e c t i o n a l L i g h t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f
) , new Vector3 f (0 f , −1.0 f , −0.4 f ) ) ;18 l 4 . s e t In f luenc ingBounds ( bounds ) ;19 r a i z . addChild ( l 4 ) ;20 Box box0= new Box ( 0 . 1 5 f , 0 . 1 5 f , 0 . 1 5 f , c r eaApar i enc ia0
( ) ) ;21 TransformGroup tg0=new TransformGroup (
trans formac ion0 ( ) ) ;22 tg0 . addChild ( box0 ) ;23 r a i z . addChild ( tg0 ) ;24 r a i z . compi le ( ) ;25 return r a i z ;26 }
Figura 5.6: Rama del contenido (BranchGroup) para la caja o cubo con rotacion y apariencia.Archivo: CajaRotada01.java
.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.1. Escenarios con una figura regular 71
1
2 public Appearance creaApar i enc ia0 ( ) {3 Appearance app=new Appearance ( ) ;4 Color3 f c o l o r=new Color3 f ( 0 . 8 f , 0 . 7 f , 0 . 4 f ) ;5 Mater ia l mate r i a l=new Mater ia l ( ) ;6 mate r i a l . s e t D i f f u s e C o l o r ( c o l o r ) ;7 mate r i a l . s e tSpecu la rCo lo r ( new Color3 f ( 1 . 0 f , 1 . 0 f ,
1 . 0 f ) ) ;8 mate r i a l . s e t S h i n i n e s s ( 30 . 0 f ) ;9 app . s e t M a t e r i a l ( mate r i a l ) ;
10 return app ;11 }
Figura 5.7: Segmento de codigo que muestra la apariencia para la caja o cubo con rotacion.Archivo: CajaRotada01.java
1 public Transform3D trans formac ion0 ( ) {2 Transform3D t0=new Transform3D ( ) ;3 t0 . rotY (0 .523598775598299) ;4 return t0 ;5 }6
7 }
Figura 5.8: Segmento de codigo que realiza la rotacion para la caja o cubo con rotacion. Archivo:CajaRotada01.java
Conclusiones de la renderizacion del la caja rotada El resultado obtenido enla renderizacion en Java 3D muestra la sensacion de profundidad de la figura geometri-ca, esto debido a la propuesta durante la conversion del codigo. Se anadio el siguientesegmento de codigo para obtener este resultado:
DirectionalLight l =
new DirectionalLight( new Color3f(1.0f, 1.0f, 1.0f), new Vector3f(-1f, 0.0f, -0.4f) );
l.setInfluencingBounds(bounds);
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
72 Capıtulo 5. Experimentos y Resultados
Figura 5.9: Renderizacion de la caja o cubo con rotacion en VRML
5.1.2. Cilindro con apariencia
La figura 5.13 muestra el codigo VRML de un cilindro con apariencia.
La figura 5.12 muestra el arbol que se genera y se presenta en la interfaz grafica del
traductor para el codigo VRML del cilindro con apariencia.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.1. Escenarios con una figura regular 73
Figura 5.10: Renderizacion de la caja o cubo con rotacion en Java 3D
1 #VRML V2.0 u t f 82 Shape{3 geometry Cylinder{4 rad iu s 0 .3 he ight 0 .55 }6 appearance Appearance{7 mate r i a l Material{8 d i f f u s e C o l o r . 3 . 2 19 }
10 }11 }
Figura 5.11: Cilindro con apariencia. Archivo: CilindroApariencia01.wrl
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
74 Capıtulo 5. Experimentos y Resultados
Figura 5.12: Arbol del Cilindro con apariencia
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.1. Escenarios con una figura regular 75
La figura 5.13 muestra el codigo completo en Java para renderizar un cilindro con
apariencia. Archivo: CilindroApariencia01.java.
La figura 5.14 muestra la segunda parte del codigo Java para renderizar un cilindro
con apariencia. Archivo: CilindroApariencia01.java.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
76 Capıtulo 5. Experimentos y Resultados
1 import javax . swing . JFrame ;2 import java . awt . BorderLayout ;3 import java . awt . Frame ;4 import java . awt . event . WindowEvent ;5 import java . awt . event . WindowListener ;6 import java . awt . GraphicsConf igurat ion ;7 import com . sun . j3d . u t i l s . image . TextureLoader ;8 import com . sun . j3d . u t i l s . un ive r s e . S impleUniverse ;9 import com . sun . j3d . u t i l s . geometry . ∗ ;
10 import javax . media . j3d . ∗ ;11 import com . sun . j3d . u t i l s . behav io r s . vp . ∗ ;12 import javax . vecmath . ∗ ;13 public class Ci l i ndroApar i enc i a extends JFrame {14 public Ci l i ndroApar i enc i a ( ) {15 setLayout (new BorderLayout ( ) ) ;16 GraphicsConf igurat ion c o n f i g = SimpleUniverse .
g e tPr e f e r r edCon f i gu ra t i on ( ) ;17 Canvas3D canvas = new Canvas3D ( c o n f i g ) ;18 add ( ” Center ” , canvas ) ;19 BranchGroup escena = createSceneGraph ( ) ;20 SimpleUniverse simpleU = new SimpleUniverse ( canvas ) ;21 simpleU . getViewingPlatform ( ) .
setNominalViewingTransform ( ) ;22 simpleU . addBranchGraph ( escena ) ;23 // l a s t r e s l i n e a s s i g u i e n t e s h a b i l i t a n l a nav igac ion
de l a escena usando e l raton .24 OrbitBehavior ob = new OrbitBehavior ( canvas ) ;25 ob . setSchedul ingBounds (new BoundingSphere (new
Point3d ( 0 . 0 , 0 . 0 , 0 . 0 ) , Double .MAX VALUE) ) ;26 simpleU . getViewingPlatform ( ) . setViewPlatformBehavior
( ob ) ;27 }28 public stat ic void main ( St r ing args [ ] ) {29 Ci l i ndroApar i enc i a frame = new Ci l i nd roApar i enc i a ( ) ;30 frame . s e tDe fau l tC lo seOperat ion ( JFrame .EXIT ON CLOSE)
;31 frame . s e t S i z e (300 , 300) ;32 frame . s e t V i s i b l e ( true ) ;33 }
Figura 5.13: Codigo que realiza la renderizacion de un cilindro. Archivo: CilindroAparien-cia01.java (Parte 1)
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.1. Escenarios con una figura regular 77
1
2 public BranchGroup createSceneGraph ( ) {3 BranchGroup r a i z = new BranchGroup ( ) ;4 BoundingSphere bounds = new BoundingSphere (new Point3d ( ) ,
Double .MAX VALUE) ;5 D i r e c t i o n a l L i g h t l 1 =6 new D i r e c t i o n a l L i g h t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,new
Vector3 f (1 f , 0 . 0 f , −0.4 f ) ) ;7 l 1 . s e t In f luenc ingBounds ( bounds ) ;8 r a i z . addChild ( l 1 ) ;9 D i r e c t i o n a l L i g h t l 2 =
10 new D i r e c t i o n a l L i g h t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,newVector3 f (−1 f , 0 . 0 f , −0.4 f ) ) ;
11 l 2 . s e t In f luenc ingBounds ( bounds ) ;12 r a i z . addChild ( l 2 ) ;13 D i r e c t i o n a l L i g h t l 3 =14 new D i r e c t i o n a l L i g h t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,new
Vector3 f (0 f , 1 . 0 f , −0.4 f ) ) ;15 l 3 . s e t In f luenc ingBounds ( bounds ) ;16 r a i z . addChild ( l 3 ) ;17 D i r e c t i o n a l L i g h t l 4 =18 new D i r e c t i o n a l L i g h t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,new
Vector3 f (0 f , −1.0 f , −0.4 f ) ) ;19 l 4 . s e t In f luenc ingBounds ( bounds ) ;20 r a i z . addChild ( l 4 ) ;21 Cyl inder c y l i n d e r 0= new Cyl inder ( 0 . 3 f , 0 . 5 f , c r eaApar i enc ia0
( ) ) ;22 r a i z . addChild ( c y l i n d e r 0 ) ;23 r a i z . compi le ( ) ;24 return r a i z ;25 }26 public Appearance creaApar i enc ia0 ( ) {27 Appearance app=new Appearance ( ) ;28 Color3 f c o l o r=new Color3 f ( 0 . 3 f , 0 . 2 f , 1 . 0 f ) ;29 Mater ia l mate r i a l=new Mater ia l ( ) ;30 mate r i a l . s e t D i f f u s e C o l o r ( c o l o r ) ;31 mate r i a l . s e tSpecu la rCo lo r ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ) ;32 mate r i a l . s e t S h i n i n e s s ( 30 . 0 f ) ;33 app . s e t M a t e r i a l ( mate r i a l ) ;34 return app ;35 }36 }
Figura 5.14: Codigo que realiza la renderizacion de un cilindro. Archivo: CilindroAparien-cia01.java (Parte 2)
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
78 Capıtulo 5. Experimentos y Resultados
La figura 5.15 muestra la renderizacion del archivo fuente original en VRML del
cilindro con apariencia.
Figura 5.15: Renderizacion de un cilindro con apariencia en VRML
La figura 5.16 muestra la renderizacion del archivo de salida generado en Java 3D
del cubo con rotacion.
Conclusiones de la renderizacion del cilindro con apariencia El resultado obte-nido en la renderizacion en Java 3D muestra la sensacion de profundidad proporcionadopor el ligero reflejo que existe en el cilindro como resultado de aplicar el siguiente seg-mento de codigo en el traductor para mejorar la apariencia.
DirectionalLight l =
new DirectionalLight( new Color3f(1.0f, 1.0f, 1.0f), new Vector3f(-1f, 0.0f, -0.4f) );
l.setInfluencingBounds(bounds);
5.2. Escenarios con varias figuras regulares
En esta seccion se presentan varias figuras geometricas basicas en un mismo escenario.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.2. Escenarios con varias figuras regulares 79
Figura 5.16: Renderizacion de un cilindro con apariencia en Java 3D
5.2.1. Cilindro y cono con texturas
La figura 5.17 muestra el codigo VRML de un cilindro y un cono con texturas.
La figura 5.18 muestra el arbol que se genera y se presenta en la interfaz grafica del
traductor para el codigo VRML de un cilindro y un cono con texturas.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
80 Capıtulo 5. Experimentos y Resultados
1 #VRML V2.0 u t f 82 Shape{3 geometry Cylinder{4 rad iu s 0 .4 he ight 0 .55 }6 appearance Appearance{7 t ex ture ImageTexture{8 u r l ” p i so2 . jpg ”9 }
10 }11 }12 Transform {13 t r a n s l a t i o n 0 .8 0 014 c h i l d r e n [15 Shape{16 geometry Cone{17 bottomRadius 0 .4 he ight 0 .818 }19 appearance Appearance{20 t ex ture ImageTexture {21 u r l ” l a d r i l l o 1 . jpg ”22 }23 }24 }25 ]26 }27 }
Figura 5.17: Cilindro con apariencia. Archivo: CilindroCono01.wrl
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.2. Escenarios con varias figuras regulares 81
Figura 5.18: Arbol del Cilindro y cono con texturas
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
82 Capıtulo 5. Experimentos y Resultados
Las figuras 5.19, 5.20 y 5.21 muestran el codigo completo en Java para renderizar un
cilindro y un cono con textura. Archivo: CilindroCono.java.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.2. Escenarios con varias figuras regulares 83
1 import javax . swing . JFrame ;2 import java . awt . BorderLayout ;3 import java . awt . Frame ;4 import java . awt . event . WindowEvent ;5 import java . awt . event . WindowListener ;6 import java . awt . GraphicsConf igurat ion ;7 import com . sun . j3d . u t i l s . image . TextureLoader ;8 import com . sun . j3d . u t i l s . un ive r s e . S impleUniverse ;9 import com . sun . j3d . u t i l s . geometry . ∗ ;
10 import javax . media . j3d . ∗ ;11 import javax . vecmath . Co lor3 f ;12 import javax . vecmath . Vector3d ;13 import com . sun . j3d . u t i l s . behav io r s . vp . ∗ ;14 import javax . vecmath . Point3d ;15 import javax . vecmath . Po int3 f ;16 import javax . vecmath . Co lor3 f ;17 import javax . vecmath . ∗ ;18 public class Cil indroCono01 extends JFrame {19 public Cil indroCono01 ( ) {20 setLayout (new BorderLayout ( ) ) ;21 GraphicsConf igurat ion c o n f i g = SimpleUniverse .
g e tPr e f e r r edCon f i gu ra t i on ( ) ;22 Canvas3D canvas = new Canvas3D ( c o n f i g ) ;23 add ( ” Center ” , canvas ) ;24 BranchGroup escena = createSceneGraph ( ) ;25 SimpleUniverse simpleU = new SimpleUniverse ( canvas ) ;26 simpleU . getViewingPlatform ( ) . setNominalViewingTransform ( ) ;27 simpleU . addBranchGraph ( escena ) ;28 // l a s t r e s l i n e a s s i g u i e n t e s h a b i l i t a n l a nav igac ion de l a
escena usando e l raton .29 OrbitBehavior ob = new OrbitBehavior ( canvas ) ;30 ob . setSchedul ingBounds (new BoundingSphere (new Point3d
( 0 . 0 , 0 . 0 , 0 . 0 ) , Double .MAX VALUE) ) ;31 simpleU . getViewingPlatform ( ) . setViewPlatformBehavior ( ob ) ;32 }33 public stat ic void main ( St r ing args [ ] ) {34 Cil indroCono01 frame = new Cil indroCono01 ( ) ;35 frame . s e tDe fau l tC lo seOperat ion ( JFrame .EXIT ON CLOSE) ;36 frame . s e t S i z e (300 , 300) ;37 frame . s e t V i s i b l e ( true ) ;38 }
Figura 5.19: Codigo que realiza la renderizacion de un cilindro y un cono con textura. Archivo:CilindroCono.java (Parte 1)
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
84 Capıtulo 5. Experimentos y Resultados
1 public BranchGroup createSceneGraph ( ) {2 BranchGroup r a i z = new BranchGroup ( ) ;3 BoundingSphere bounds = new BoundingSphere (new Point3d ( ) ,
Double .MAX VALUE) ;4 D i r e c t i o n a l L i g h t l 1 =5 new D i r e c t i o n a l L i g h t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,6 new Vector3 f (1 f , 0 . 0 f , −0.4 f ) ) ;7 l 1 . s e t In f luenc ingBounds ( bounds ) ;8 r a i z . addChild ( l 1 ) ;9 D i r e c t i o n a l L i g h t l 2 =
10 new D i r e c t i o n a l L i g h t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,11 new Vector3 f (−1 f , 0 . 0 f , −0.4 f ) ) ;12 l 2 . s e t In f luenc ingBounds ( bounds ) ;13 r a i z . addChild ( l 2 ) ;14 D i r e c t i o n a l L i g h t l 3 =15 new D i r e c t i o n a l L i g h t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,16 new Vector3 f (0 f , 1 . 0 f , −0.4 f ) ) ;17 l 3 . s e t In f luenc ingBounds ( bounds ) ;18 r a i z . addChild ( l 3 ) ;19 D i r e c t i o n a l L i g h t l 4 =20 new D i r e c t i o n a l L i g h t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,21 new Vector3 f (0 f , −1.0 f , −0.4 f ) ) ;22 l 4 . s e t In f luenc ingBounds ( bounds ) ;23 r a i z . addChild ( l 4 ) ;24 Cyl inder c y l i n d e r 0= new Cyl inder ( 0 . 4 f , 0 . 5 f , c r eaApar i enc ia0
( ) ) ;25 Cone cone1= new Cone ( 0 . 4 f , 0 . 8 f , c r eaApar i enc ia1 ( ) ) ;26
27 TransformGroup tg0=new TransformGroup ( trans formac ion0 ( ) ) ;28 tg0 . addChild ( cone1 ) ;29 r a i z . addChild ( c y l i n d e r 0 ) ;30 r a i z . addChild ( tg0 ) ;31
32 r a i z . compi le ( ) ;33 return r a i z ;34 }35 public Transform3D trans formac ion0 ( ) {36 Transform3D t0=new Transform3D ( ) ;37 Vector3d v=new Vector3d ( 0 . 8 , 0 , 0 ) ;38 t0 . s e t ( v ) ;39 return t0 ;40 }
Figura 5.20: Codigo que realiza la renderizacion de un cilindro y un cono con textura. Archivo:CilindroCono.java (Parte 2)
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.2. Escenarios con varias figuras regulares 85
1 public Appearance creaApar i enc ia0 ( ) {2 Appearance app=new Appearance ( ) ;3 PolygonAttr ibutes po lyAtt r ib = new PolygonAttr ibutes ( ) ;4 po lyAtt r ib . s e tCul lFace ( PolygonAttr ibutes .CULL NONE) ;5 app . s e tPo lygonAtt r ibute s ( po lyAtt r ib ) ;6 TexCoordGeneration texCoord = new TexCoordGeneration (
TexCoordGeneration .OBJECT LINEAR, TexCoordGeneration .TEXTURE COORDINATE 3) ;
7 app . setTexCoordGeneration ( texCoord ) ;8 St r ing nomArch=” l a d r i l l o 1 . jpg ” ;9 TextureLoader l oade r=new TextureLoader (nomArch , this ) ;
10 ImageComponent2D image=loade r . getImage ( ) ;11 i f ( image==null ) System . out . p r i n t l n ( ” Error a l cargar l a
textura ” ) ;12 Texture2D texture=new Texture2D ( Texture .BASE LEVEL, Texture
.RGBA, image . getWidth ( ) , image . getHeight ( ) ) ;13 t ex ture . setImage (0 , image ) ;14 app . setTexture ( t ex ture ) ;15 return app ;16 }17 public Appearance creaApar i enc ia1 ( ) {18 Appearance app=new Appearance ( ) ;19 PolygonAttr ibutes po lyAtt r ib = new PolygonAttr ibutes ( ) ;20 po lyAtt r ib . s e tCul lFace ( PolygonAttr ibutes .CULL NONE) ;21 app . s e tPo lygonAtt r ibute s ( po lyAtt r ib ) ;22 TexCoordGeneration texCoord = new TexCoordGeneration (
TexCoordGeneration .OBJECT LINEAR, TexCoordGeneration .TEXTURE COORDINATE 3) ;
23 app . setTexCoordGeneration ( texCoord ) ;24 St r ing nomArch=” l a d r i l l o 1 . jpg ” ;25 TextureLoader l oade r=new TextureLoader (nomArch , this ) ;26 ImageComponent2D image=loade r . getImage ( ) ;27 i f ( image==null ) System . out . p r i n t l n ( ” Error a l cargar l a
textura ” ) ;28 Texture2D texture=new Texture2D ( Texture .BASE LEVEL, Texture
.RGBA, image . getWidth ( ) , image . getHeight ( ) ) ;29 t ex ture . setImage (0 , image ) ;30 app . setTexture ( t ex ture ) ;31 return app ;32 }33 }
Figura 5.21: Codigo que realiza la renderizacion de un cilindro y un cono con textura. Archivo:CilindroCono.java (Parte 3)
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
86 Capıtulo 5. Experimentos y Resultados
La figura 5.22 muestra la renderizacion del archivo fuente original en VRML de un
cilindro y un cono con texturas.
Figura 5.22: Renderizacion de un cilindro y un cono con texturas de ladrillo en VRML
La figura 5.23 muestra la renderizacion del archivo de salida generado en Java 3D de
un cilindro y un cono con texturas.
Conclusiones de la renderizacion del cilindro y el cono con texturas Se puede
observar que resultado obtenido en la renderizacion en Java 3D se ven con mas detalle
las texturas en comparacion con lo que proporciona VRML. Se puede afirmar que la
API de Java 3D es superior en cuanto a calidad en representacion de texturas.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.2. Escenarios con varias figuras regulares 87
Figura 5.23: Renderizacion de un cilindro y un cono con texturas de ladrillo en Java 3D
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
88 Capıtulo 5. Experimentos y Resultados
5.3. Escenarios con figuras irregulares que usan:
PointSet, IndexedLineSet e IndexedFaceSet
5.3.1. Escenario con figuras irregulares con PointSet
La figura 5.26 muestra el codigo VRML de los vertices de un cubo realizado con
PointSet
1 #VRML V2.0 u t f 82 Shape{3 geometry PointSet{4 coord Coordinate {5 po int [6 −1.0 1 .0 1 . 0 ,7 1 .0 1 .0 1 . 0 ,8 1 .0 1 .0 −1.0 ,9 −1.0 1 .0 −1.0 ,
10 −1.0 −1.0 1 . 0 ,11 1 .0 −1.0 1 . 0 ,12 1 .0 −1.0 −1.0 ,13 −1.0 −1.0 −1.0 ,14 ]15 }}16 appearance Appearance{17 mate r i a l Material {18 emi s s iveCo lo r 1 .0 1 .0 1 . 019 }20 }21 }22 }
Figura 5.24: Vertices de un cubo realizado con PointSet. Archivo: ConjuntoPuntos1.wrl
La figura 5.25 muestra el arbol que se genera y se presenta en la interfaz grafica del
traductor para el codigo VRML de un cubo formado con puntos.
Las figuras 5.26, 5.27 y 5.28 muestran el codigo completo en Java para renderizar un
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.3. Escenarios con figuras irregulares que usan:PointSet, IndexedLineSet e IndexedFaceSet 89
Figura 5.25: Arbol generado del cubo formado con puntos
conjunto de puntos que representan la figura de un cubo. Archivo: ConjuntoPuntos1.java.
La figura 5.29 muestra la renderizacion del archivo fuente original en VRML de los
vertices de un cubo formado por un conjunto de puntos. Los puntos se marcaron con un
cırculo naranja para su mejor visualizacion.
La figura 5.30 muestra la renderizacion del archivo de salida generado en Java 3D
de los vertices de un cubo formado por un conjunto de puntos. Los puntos se marcaron
con un cırculo naranja para su mejor visualizacion.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
90 Capıtulo 5. Experimentos y Resultados
1 import javax . swing . JFrame ;2 import java . awt . BorderLayout ;3 import java . awt . Frame ;4 import java . awt . event . WindowEvent ;5 import java . awt . event . WindowListener ;6 import java . awt . GraphicsConf igurat ion ;7 import com . sun . j3d . u t i l s . image . TextureLoader ;8 import com . sun . j3d . u t i l s . un ive r s e . S impleUniverse ;9 import com . sun . j3d . u t i l s . geometry . ∗ ;
10 import javax . media . j3d . ∗ ;11 import javax . vecmath . Co lor3 f ;12 import javax . vecmath . Vector3d ;13 import com . sun . j3d . u t i l s . behav io r s . vp . ∗ ;14 import javax . vecmath . Point3d ;15 import javax . vecmath . Po int3 f ;16 import javax . vecmath . Co lor3 f ;17 import javax . vecmath . ∗ ;18 public class ConjuntoPuntos1 extends JFrame {19 public ConjuntoPuntos1 ( ) {20 setLayout (new BorderLayout ( ) ) ;21 GraphicsConf igurat ion c o n f i g = SimpleUniverse .
g e tPr e f e r r edCon f i gu ra t i on ( ) ;22 Canvas3D canvas = new Canvas3D ( c o n f i g ) ;23 add ( ” Center ” , canvas ) ;24 BranchGroup escena = createSceneGraph ( ) ;25 SimpleUniverse simpleU = new SimpleUniverse ( canvas ) ;26 simpleU . getViewingPlatform ( ) . setNominalViewingTransform ( ) ;27 simpleU . addBranchGraph ( escena ) ;28 // l a s t r e s l i n e a s s i g u i e n t e s h a b i l i t a n l a nav igac ion de l a
escena usando e l raton .29 OrbitBehavior ob = new OrbitBehavior ( canvas ) ;30 ob . setSchedul ingBounds (new BoundingSphere (new Point3d
( 0 . 0 , 0 . 0 , 0 . 0 ) , Double .MAX VALUE) ) ;31 simpleU . getViewingPlatform ( ) . setViewPlatformBehavior ( ob ) ;32 }33 public stat ic void main ( St r ing args [ ] ) {34 ConjuntoPuntos1 frame = new ConjuntoPuntos1 ( ) ;35 frame . s e tDe fau l tC lo seOperat ion ( JFrame .EXIT ON CLOSE) ;36 frame . s e t S i z e (300 , 300) ;37 frame . s e t V i s i b l e ( true ) ;38 }
Figura 5.26: Codigo que realiza la renderizacion de un conjunto de puntos. Archivo: Conjun-toPuntos1.java (Parte 1)
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.3. Escenarios con figuras irregulares que usan:PointSet, IndexedLineSet e IndexedFaceSet 91
1 public BranchGroup createSceneGraph ( ) {2 BranchGroup r a i z = new BranchGroup ( ) ;3 BoundingSphere bounds = new BoundingSphere (new Point3d ( ) , Double .
MAX VALUE) ;4 D i r e c t i o n a l L i g h t l 1 = new D i r e c t i o n a l L i g h t (5 new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) , new Vector3 f (1 f , 0 . 0 f , −0.4 f ) ) ;6 l 1 . s e t In f luenc ingBounds ( bounds ) ;7 r a i z . addChild ( l 1 ) ;8 D i r e c t i o n a l L i g h t l 2 = new D i r e c t i o n a l L i g h t (9 new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) , new Vector3 f (−1 f , 0 . 0 f , −0.4 f ) ) ;
10 l 2 . s e t In f luenc ingBounds ( bounds ) ;11 r a i z . addChild ( l 2 ) ;12 D i r e c t i o n a l L i g h t l 3 =13 new D i r e c t i o n a l L i g h t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,14 new Vector3 f (0 f , 1 . 0 f , −0.4 f ) ) ;15 l 3 . s e t In f luenc ingBounds ( bounds ) ;16 r a i z . addChild ( l 3 ) ;17 D i r e c t i o n a l L i g h t l 4 =18 new D i r e c t i o n a l L i g h t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,19 new Vector3 f (0 f , −1.0 f , −0.4 f ) ) ;20 l 4 . s e t In f luenc ingBounds ( bounds ) ;21 r a i z . addChild ( l 4 ) ;22 PointArray p o i n t s e t 0= new PointArray (8 , PointArray .COORDINATES|
PointArray .COLOR 3) ;23 p o i n t s e t 0 . s e tCoord inate (0 ,new Point3 f (−1.0 f , 1 . 0 f , 1 . 0 f ) ) ;24 p o i n t s e t 0 . s e tCoord inate (1 ,new Point3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ) ;25 p o i n t s e t 0 . s e tCoord inate (2 ,new Point3 f ( 1 . 0 f , 1 . 0 f ,−1.0 f ) ) ;26 p o i n t s e t 0 . s e tCoord inate (3 ,new Point3 f (−1.0 f , 1 . 0 f ,−1.0 f ) ) ;27 p o i n t s e t 0 . s e tCoord inate (4 ,new Point3 f (−1.0 f ,−1.0 f , 1 . 0 f ) ) ;28 p o i n t s e t 0 . s e tCoord inate (5 ,new Point3 f ( 1 . 0 f ,−1.0 f , 1 . 0 f ) ) ;29 p o i n t s e t 0 . s e tCoord inate (6 ,new Point3 f ( 1 . 0 f ,−1.0 f ,−1.0 f ) ) ;30 p o i n t s e t 0 . s e tCoord inate (7 ,new Point3 f (−1.0 f ,−1.0 f ,−1.0 f ) ) ;31 p o i n t s e t 0 . s e tCo lo r (0 ,new Color3 f (1 f , 1 f , 1 f ) ) ;32 p o i n t s e t 0 . s e tCo lo r (1 ,new Color3 f (1 f , 1 f , 1 f ) ) ;33 p o i n t s e t 0 . s e tCo lo r (2 ,new Color3 f (1 f , 1 f , 1 f ) ) ;34 p o i n t s e t 0 . s e tCo lo r (3 ,new Color3 f (1 f , 1 f , 1 f ) ) ;35 p o i n t s e t 0 . s e tCo lo r (4 ,new Color3 f (1 f , 1 f , 1 f ) ) ;36 p o i n t s e t 0 . s e tCo lo r (5 ,new Color3 f (1 f , 1 f , 1 f ) ) ;37 p o i n t s e t 0 . s e tCo lo r (6 ,new Color3 f (1 f , 1 f , 1 f ) ) ;38 p o i n t s e t 0 . s e tCo lo r (7 ,new Color3 f (1 f , 1 f , 1 f ) ) ;39 r a i z . addChild (new Shape3D ( p o i n t s e t 0 ) ) ;40 r a i z . compi le ( ) ;41 return r a i z ;42 }
Figura 5.27: Codigo que realiza la renderizacion de un conjunto de puntos. Archivo: Conjun-toPuntos1.java (Parte 2)
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
92 Capıtulo 5. Experimentos y Resultados
1 public Appearance creaApar i enc ia0 ( ) {2 Appearance app=new Appearance ( ) ;3 Color3 f c o l o r=new Color3 f (1 f , 1 f , 1 f ) ;4 Mater ia l mate r i a l=new Mater ia l ( ) ;5 mate r i a l . s e t D i f f u s e C o l o r ( c o l o r ) ;6 mate r i a l . s e tSpecu la rCo lo r ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ) ;7 mate r i a l . s e t S h i n i n e s s ( 30 . 0 f ) ;8 app . s e t M a t e r i a l ( mate r i a l ) ;9 return app ;
10 }11
12
13 }
Figura 5.28: Codigo que realiza la renderizacion de un conjunto de puntos. Archivo: Conjun-toPuntos1.java (Parte 3)
Figura 5.29: Renderizacion de un conjunto de puntos en VRML
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.3. Escenarios con figuras irregulares que usan:PointSet, IndexedLineSet e IndexedFaceSet 93
Figura 5.30: Renderizacion de un conjunto de puntos en Java 3D
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
94 Capıtulo 5. Experimentos y Resultados
5.3.2. Escenario con figuras irregulares con IndexedLineSet
La figura 5.33 muestra el codigo VRML de las aristas de un cubo realizado con
IndexedLineSet.
La figura 5.32 muestra el arbol que se genera y se presenta en la interfaz grafica del
traductor para el codigo VRML de un cubo formado con un conjunto de lıneas.
Las figuras 5.33, 5.34 y 5.35 muestran el codigo completo en Java para renderizar un
conjunto de lıneas que representan la figura de un cubo. Archivo: ConjuntoLineas1.java.
La figura 5.36 muestra la renderizacion del archivo fuente original en VRML de las
aristas de un cubo formado por un conjunto de lıneas.
La figura 5.37 muestra la renderizacion del archivo de salida generado en Java 3D de
las aristas de un cubo formado por un conjunto de lıneas.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.3. Escenarios con figuras irregulares que usan:PointSet, IndexedLineSet e IndexedFaceSet 95
1 #VRML V2.0 u t f 82 Shape{3 geometry IndexedLineSet{4 coord Coordinate {5 po int [6 −1.0 1 .0 1 . 0 ,7 1 .0 1 .0 1 . 0 ,8 1 .0 1 .0 −1.0 ,9 −1.0 1 .0 −1.0 ,
10 −1.0 −1.0 1 . 0 ,11 1 .0 −1.0 1 . 0 ,12 1 .0 −1.0 −1.0 ,13 −1.0 −1.0 −1.0 ,14 ]15 }16 coordIndex [17 0 , 1 , 2 , 3 , 0 , −118 4 , 5 , 6 , 7 , 4 , −119 0 , 4 , −120 1 , 5 , −121 2 , 6 , −122 3 , 723 ]24 }25 appearance Appearance{26 mate r i a l Material {27 emi s s iveCo lo r 1 .0 1 .0 1 . 028 }29 }30 }31 }
Figura 5.31: Caja o cubo formado con lıneas. Archivo:ConjuntoLineas1.wrl
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
96 Capıtulo 5. Experimentos y Resultados
Figura 5.32: Arbol generado de una caja o cubo formado con lıneas
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.3. Escenarios con figuras irregulares que usan:PointSet, IndexedLineSet e IndexedFaceSet 97
1 import javax . swing . JFrame ;2 import java . awt . BorderLayout ;3 import java . awt . Frame ;4 import java . awt . event . WindowEvent ;5 import java . awt . event . WindowListener ;6 import java . awt . GraphicsConf igurat ion ;7 import com . sun . j3d . u t i l s . image . TextureLoader ;8 import com . sun . j3d . u t i l s . un ive r s e . S impleUniverse ;9 import com . sun . j3d . u t i l s . geometry . ∗ ;
10 import javax . media . j3d . ∗ ;11 import javax . vecmath . Co lor3 f ;12 import javax . vecmath . Vector3d ;13 import com . sun . j3d . u t i l s . behav io r s . vp . ∗ ;14 import javax . vecmath . Point3d ;15 import javax . vecmath . Po int3 f ;16 import javax . vecmath . Co lor3 f ;17 import javax . vecmath . ∗ ;18 public class ConjuntoLineas1 extends JFrame {19 public ConjuntoLineas1 ( ) {20 setLayout (new BorderLayout ( ) ) ;21 GraphicsConf igurat ion c o n f i g = SimpleUniverse .
g e tPr e f e r r edCon f i gu ra t i on ( ) ;22 Canvas3D canvas = new Canvas3D ( c o n f i g ) ;23 add ( ” Center ” , canvas ) ;24 BranchGroup escena = createSceneGraph ( ) ;25 SimpleUniverse simpleU = new SimpleUniverse ( canvas ) ;26 simpleU . getViewingPlatform ( ) . setNominalViewingTransform ( ) ;27 simpleU . addBranchGraph ( escena ) ;28 // l a s t r e s l i n e a s s i g u i e n t e s h a b i l i t a n l a nav igac ion de l a
escena usando e l raton .29 OrbitBehavior ob = new OrbitBehavior ( canvas ) ;30 ob . setSchedul ingBounds (new BoundingSphere (new Point3d
( 0 . 0 , 0 . 0 , 0 . 0 ) , Double .MAX VALUE) ) ;31 simpleU . getViewingPlatform ( ) . setViewPlatformBehavior ( ob ) ;32 }33 public stat ic void main ( St r ing args [ ] ) {34 ConjuntoLineas1 frame = new ConjuntoLineas1 ( ) ;35 frame . s e tDe fau l tC lo seOperat ion ( JFrame .EXIT ON CLOSE) ;36 frame . s e t S i z e (300 , 300) ;37 frame . s e t V i s i b l e ( true ) ;38 }
Figura 5.33: Codigo que realiza la renderizacion de un conjunto de lıneas. Archivo: Conjunto-Lineas1.java (Parte 1)
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
98 Capıtulo 5. Experimentos y Resultados
1 public BranchGroup createSceneGraph ( ) {2 BranchGroup r a i z = new BranchGroup ( ) ;3 BoundingSphere bounds = new BoundingSphere (new Point3d ( ) , Double .
MAX VALUE) ;4 D i r e c t i o n a l L i g h t l 1 =5 new D i r e c t i o n a l L i g h t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,6 new Vector3 f (1 f , 0 . 0 f , −0.4 f ) ) ;7 l 1 . s e t In f luenc ingBounds ( bounds ) ;8 r a i z . addChild ( l 1 ) ;9 D i r e c t i o n a l L i g h t l 2 =
10 new D i r e c t i o n a l L i g h t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,11 new Vector3 f (−1 f , 0 . 0 f , −0.4 f ) ) ;12 l 2 . s e t In f luenc ingBounds ( bounds ) ;13 r a i z . addChild ( l 2 ) ;14 D i r e c t i o n a l L i g h t l 3 =15 new D i r e c t i o n a l L i g h t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,16 new Vector3 f (0 f , 1 . 0 f , −0.4 f ) ) ;17 l 3 . s e t In f luenc ingBounds ( bounds ) ;18 r a i z . addChild ( l 3 ) ;19 D i r e c t i o n a l L i g h t l 4 =20 new D i r e c t i o n a l L i g h t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,21 new Vector3 f (0 f , −1.0 f , −0.4 f ) ) ;22 l 4 . s e t In f luenc ingBounds ( bounds ) ;23 r a i z . addChild ( l 4 ) ;24 Point3d [ ] coordenadas0 = new Point3d [ 8 ] ;25 coordenadas0 [0 ]=new Point3d (−1.0 f , 1 . 0 f , 1 . 0 f ) ;26 coordenadas0 [1 ]=new Point3d ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ;27 coordenadas0 [2 ]=new Point3d ( 1 . 0 f , 1 . 0 f ,−1.0 f ) ;28 coordenadas0 [3 ]=new Point3d (−1.0 f , 1 . 0 f ,−1.0 f ) ;29 coordenadas0 [4 ]=new Point3d (−1.0 f ,−1.0 f , 1 . 0 f ) ;30 coordenadas0 [5 ]=new Point3d ( 1 . 0 f ,−1.0 f , 1 . 0 f ) ;31 coordenadas0 [6 ]=new Point3d ( 1 . 0 f ,−1.0 f ,−1.0 f ) ;32 coordenadas0 [7 ]=new Point3d (−1.0 f ,−1.0 f ,−1.0 f ) ;33 int [ ] i n d i c e s 0 = {0 , 1 , 1 , 2 , 2 , 3 , 3 , 0 ,4 , 5 , 5 , 6 , 6 , 7 , 7 , 4 ,0 ,
4 ,1 , 5 ,2 , 6 ,3 , 7} ;34 IndexedLineArray i n d e x e d l i n e s e t 0 =new IndexedLineArray (
coordenadas0 . length , GeometryArray .COORDINATES, i n d i c e s 0 . l ength) ;
35 i n d e x e d l i n e s e t 0 . s e tCoord inate s (0 , coordenadas0 ) ;36 i n d e x e d l i n e s e t 0 . s e t Coo r d ina t e Ind i c e s (0 , i n d i c e s 0 ) ;37 r a i z . addChild (new Shape3D ( i n d e x e d l i n e s e t 0 ) ) ;38 r a i z . compi le ( ) ;39 return r a i z ;40 }
Figura 5.34: Codigo que realiza la renderizacion de un conjunto de lıneas. Archivo: Conjunto-Lineas1.java (Parte 2)
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.3. Escenarios con figuras irregulares que usan:PointSet, IndexedLineSet e IndexedFaceSet 99
1 public Appearance creaApar i enc ia0 ( ) {2 Appearance app=new Appearance ( ) ;3 Color3 f c o l o r=new Color3 f (1 f , 1 f , 1 f ) ;4 Mater ia l mate r i a l=new Mater ia l ( ) ;5 mate r i a l . s e t D i f f u s e C o l o r ( c o l o r ) ;6 mate r i a l . s e tSpecu la rCo lo r ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ) ;7 mate r i a l . s e t S h i n i n e s s ( 30 . 0 f ) ;8 app . s e t M a t e r i a l ( mate r i a l ) ;9 return app ;
10 }11 }
Figura 5.35: Codigo que realiza la renderizacion de las aristas de un cubo formado por unconjunto de lıneas. Archivo: ConjuntoLineas1.java (Parte 3)
Figura 5.36: Renderizacion de las aristas de un cubo formado por un conjunto de lıneas enVRML
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
100 Capıtulo 5. Experimentos y Resultados
Figura 5.37: Renderizacion de las aristas de un cubo formado por un conjunto de lıneas enJava 3D
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.3. Escenarios con figuras irregulares que usan:PointSet, IndexedLineSet e IndexedFaceSet 101
5.3.3. Escenario con figuras irregulares con IndexedFaceSet
La figura 5.40 muestra el codigo VRML de los lados de un cubo realizado con Inde-
xedFaceSet.
La figura 5.39 muestra el arbol que se genera y se presenta en la interfaz grafica del
traductor para el codigo VRML de un cubo formado con un conjunto de caras.
Las figuras 5.40, 5.41, 5.42 y 5.43 muestran el codigo completo en Java para rende-
rizar un conjunto de caras que representan la figura de un cubo. Archivo: ConjuntoCa-
ras1.java.
La figura 5.44 muestra la renderizacion del archivo fuente original en VRML de los
lados de un cubo formado por un conjunto de caras.
La figura 5.45 muestra la renderizacion del archivo de salida generado en Java 3D de
los lados de un cubo formado por un conjunto de caras.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
102 Capıtulo 5. Experimentos y Resultados
1 #VRML V2.0 u t f 82 Transform {3 s c a l e 0 . 5 0 .5 0 . 54 c h i l d r e n [5 Shape{6 geometry IndexedFaceSet{7 coord Coordinate {8 po int [9 −1.0 1 .0 1 . 0 ,
10 1 .0 1 .0 1 . 0 ,11 1 .0 1 .0 −1.0 ,12 −1.0 1 .0 −1.0 ,13 −1.0 −1.0 1 . 0 ,14 1 .0 −1.0 1 . 0 ,15 1 .0 −1.0 −1.0 ,16 −1.0 −1.0 −1.0 ,17 ]18 }19 coordIndex [20 0 ,1 ,2 ,3 ,−121 7 ,6 ,5 ,4 ,−122 0 ,4 ,5 ,1 ,−123 1 ,5 ,6 ,2 ,−124 2 ,6 ,7 ,3 ,−125 3 ,7 ,4 ,026 ]27 }28 appearance Appearance{29 t ex ture ImageTexture {30 u r l ” l a d r i l l o 1 . jpg ”31 }32 }33 }34 ]35 }
Figura 5.38: Caja o cubo formada con un conjunto de caras. Archivo: ConjuntoCaras1.wrl
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.3. Escenarios con figuras irregulares que usan:PointSet, IndexedLineSet e IndexedFaceSet 103
Figura 5.39: Arbol generado de la caja o cubo formada con caras
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
104 Capıtulo 5. Experimentos y Resultados
1 import javax . swing . JFrame ;2 import java . awt . BorderLayout ;3 import java . awt . Frame ;4 import java . awt . event . WindowEvent ;5 import java . awt . event . WindowListener ;6 import java . awt . GraphicsConf igurat ion ;7 import com . sun . j3d . u t i l s . image . TextureLoader ;8 import com . sun . j3d . u t i l s . un ive r s e . S impleUniverse ;9 import com . sun . j3d . u t i l s . geometry . ∗ ;
10 import javax . media . j3d . ∗ ;11 import javax . vecmath . Co lor3 f ;12 import javax . vecmath . Vector3d ;13 import com . sun . j3d . u t i l s . behav io r s . vp . ∗ ;14 import javax . vecmath . Point3d ;15 import javax . vecmath . Po int3 f ;16 import javax . vecmath . Co lor3 f ;17 import javax . vecmath . ∗ ;18
19 public class ConjuntoCaras1 extends JFrame {20 public ConjuntoCaras1 ( ) {21 setLayout (new BorderLayout ( ) ) ;22 GraphicsConf igurat ion c o n f i g = SimpleUniverse .
g e tPr e f e r r edCon f i gu ra t i on ( ) ;23 Canvas3D canvas = new Canvas3D ( c o n f i g ) ;24 add ( ” Center ” , canvas ) ;25 BranchGroup escena = createSceneGraph ( ) ;26 SimpleUniverse simpleU = new SimpleUniverse ( canvas ) ;27 simpleU . getViewingPlatform ( ) . setNominalViewingTransform ( ) ;28 simpleU . addBranchGraph ( escena ) ;29 // l a s t r e s l i n e a s s i g u i e n t e s h a b i l i t a n l a nav igac ion de l a
escena usando e l raton .30 OrbitBehavior ob = new OrbitBehavior ( canvas ) ;31 ob . setSchedul ingBounds (new BoundingSphere (new Point3d
( 0 . 0 , 0 . 0 , 0 . 0 ) , Double .MAX VALUE) ) ;32 simpleU . getViewingPlatform ( ) . setViewPlatformBehavior ( ob ) ;33 }34
35
36 public stat ic void main ( St r ing args [ ] ) {37 ConjuntoCaras1 frame = new ConjuntoCaras1 ( ) ;38 frame . s e tDe fau l tC lo seOperat ion ( JFrame .EXIT ON CLOSE) ;39 frame . s e t S i z e (300 , 300) ;40 frame . s e t V i s i b l e ( true ) ;41 }
Figura 5.40: Codigo que realiza la renderizacion de un conjunto de caras que forman un cubo.Archivo: ConjuntoCaras1.java (Parte 1)
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.3. Escenarios con figuras irregulares que usan:PointSet, IndexedLineSet e IndexedFaceSet 105
1 public BranchGroup createSceneGraph ( ) {2 BranchGroup r a i z = new BranchGroup ( ) ;3 BoundingSphere bounds = new BoundingSphere (new Point3d ( ) , Double .
MAX VALUE) ;4 D i r e c t i o n a l L i g h t l 1 =new D i r e c t i o n a l L i g h t (5 new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,new Vector3 f (1 f , 0 . 0 f , −0.4 f ) ) ;6 l 1 . s e t In f luenc ingBounds ( bounds ) ;7 r a i z . addChild ( l 1 ) ;8 D i r e c t i o n a l L i g h t l 2 =new D i r e c t i o n a l L i g h t (9 new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) , new Vector3 f (−1 f , 0 . 0 f , −0.4 f ) ) ;
10 l 2 . s e t In f luenc ingBounds ( bounds ) ;11 r a i z . addChild ( l 2 ) ;12 D i r e c t i o n a l L i g h t l 3 =new D i r e c t i o n a l L i g h t (13 new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,new Vector3 f (0 f , 1 . 0 f , −0.4 f ) ) ;14 l 3 . s e t In f luenc ingBounds ( bounds ) ;15 r a i z . addChild ( l 3 ) ;16 D i r e c t i o n a l L i g h t l 4 =new D i r e c t i o n a l L i g h t (17 new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) , new Vector3 f (0 f , −1.0 f , −0.4 f ) ) ;18 l 4 . s e t In f luenc ingBounds ( bounds ) ;19 r a i z . addChild ( l 4 ) ;20
21 QuadArray i nd e xe d f a c e s e t 0=new QuadArray (4 , QuadArray .COORDINATES) ;22 i nd ex ed f a c e s e t 0 . s e tCoord inate (0 , new Point3 f (−1.0 f , 1 . 0 f , 1 . 0 f ) ) ;23 i nd ex ed f a c e s e t 0 . s e tCoord inate (1 , new Point3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ) ;24 i nd ex ed f a c e s e t 0 . s e tCoord inate (2 , new Point3 f ( 1 . 0 f , 1 . 0 f ,−1.0 f ) ) ;25 i nd ex ed f a c e s e t 0 . s e tCoord inate (3 , new Point3 f (−1.0 f , 1 . 0 f ,−1.0 f ) ) ;26
27 QuadArray i nd e xe d f a c e s e t 1=new QuadArray (4 , QuadArray .COORDINATES) ;28 i nd ex ed f a c e s e t 1 . s e tCoord inate (0 , new Point3 f (−1.0 f ,−1.0 f ,−1.0 f ) ) ;29 i nd ex ed f a c e s e t 1 . s e tCoord inate (1 , new Point3 f ( 1 . 0 f ,−1.0 f ,−1.0 f ) ) ;30 i nd ex ed f a c e s e t 1 . s e tCoord inate (2 , new Point3 f ( 1 . 0 f ,−1.0 f , 1 . 0 f ) ) ;31 i nd ex ed f a c e s e t 1 . s e tCoord inate (3 , new Point3 f (−1.0 f ,−1.0 f , 1 . 0 f ) ) ;32
33 QuadArray i nd e xe d f a c e s e t 2=new QuadArray (4 , QuadArray .COORDINATES) ;34 i nd ex ed f a c e s e t 2 . s e tCoord inate (0 , new Point3 f (−1.0 f , 1 . 0 f , 1 . 0 f ) ) ;35 i nd ex ed f a c e s e t 2 . s e tCoord inate (1 , new Point3 f (−1.0 f ,−1.0 f , 1 . 0 f ) ) ;36 i nd ex ed f a c e s e t 2 . s e tCoord inate (2 , new Point3 f ( 1 . 0 f ,−1.0 f , 1 . 0 f ) ) ;37 i nd ex ed f a c e s e t 2 . s e tCoord inate (3 , new Point3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ) ;38
39 QuadArray i nd e xe d f a c e s e t 3=new QuadArray (4 , QuadArray .COORDINATES) ;40 i nd ex ed f a c e s e t 3 . s e tCoord inate (0 , new Point3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ) ;41 i nd ex ed f a c e s e t 3 . s e tCoord inate (1 , new Point3 f ( 1 . 0 f ,−1.0 f , 1 . 0 f ) ) ;42 i nd ex ed f a c e s e t 3 . s e tCoord inate (2 , new Point3 f ( 1 . 0 f ,−1.0 f ,−1.0 f ) ) ;43 i nd ex ed f a c e s e t 3 . s e tCoord inate (3 , new Point3 f ( 1 . 0 f , 1 . 0 f ,−1.0 f ) ) ;
Figura 5.41: Codigo que realiza la renderizacion de un conjunto de caras que forman un cubo.Archivo: ConjuntoCaras1.java (Parte 2)
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
106 Capıtulo 5. Experimentos y Resultados
1 QuadArray i nd e xe d f a c e s e t 4=new QuadArray (4 , QuadArray .COORDINATES) ;2 i nd ex ed f a c e s e t 4 . s e tCoord inate (0 , new Point3 f ( 1 . 0 f , 1 . 0 f ,−1.0 f ) ) ;3 i nd ex ed f a c e s e t 4 . s e tCoord inate (1 , new Point3 f ( 1 . 0 f ,−1.0 f ,−1.0 f ) ) ;4 i nd ex ed f a c e s e t 4 . s e tCoord inate (2 , new Point3 f (−1.0 f ,−1.0 f ,−1.0 f ) ) ;5 i nd ex ed f a c e s e t 4 . s e tCoord inate (3 , new Point3 f (−1.0 f , 1 . 0 f ,−1.0 f ) ) ;6
7 QuadArray i nd e xe d f a c e s e t 5=new QuadArray (4 , QuadArray .COORDINATES) ;8 i nd ex ed f a c e s e t 5 . s e tCoord inate (0 , new Point3 f (−1.0 f , 1 . 0 f ,−1.0 f ) ) ;9 i nd ex ed f a c e s e t 5 . s e tCoord inate (1 , new Point3 f (−1.0 f ,−1.0 f ,−1.0 f ) ) ;
10 i nd ex ed f a c e s e t 5 . s e tCoord inate (2 , new Point3 f (−1.0 f ,−1.0 f , 1 . 0 f ) ) ;11 i nd ex ed f a c e s e t 5 . s e tCoord inate (3 , new Point3 f (−1.0 f , 1 . 0 f , 1 . 0 f ) ) ;12
13 TransformGroup tg0=new TransformGroup ( trans formac ion0 ( ) ) ;14 tg0 . addChild (new Shape3D ( indexed face s e t0 , c r eaApar i enc ia0 ( ) ) ) ;15 tg0 . addChild (new Shape3D ( indexed face s e t1 , c r eaApar i enc ia0 ( ) ) ) ;16 tg0 . addChild (new Shape3D ( indexed face s e t2 , c r eaApar i enc ia0 ( ) ) ) ;17 tg0 . addChild (new Shape3D ( indexed face s e t3 , c r eaApar i enc ia0 ( ) ) ) ;18 tg0 . addChild (new Shape3D ( indexed face s e t4 , c r eaApar i enc ia0 ( ) ) ) ;19 tg0 . addChild (new Shape3D ( indexed face s e t5 , c r eaApar i enc ia0 ( ) ) ) ;20 r a i z . addChild ( tg0 ) ;21 r a i z . compi le ( ) ;22 return r a i z ;23 }
Figura 5.42: Codigo que realiza la renderizacion de un conjunto de caras que forman un cubo.Archivo: ConjuntoCaras1.java (Parte 3)
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.3. Escenarios con figuras irregulares que usan:PointSet, IndexedLineSet e IndexedFaceSet 107
1 public Appearance creaApar i enc ia0 ( ) {2 Appearance app=new Appearance ( ) ;3 PolygonAttr ibutes po lyAtt r ib = new PolygonAttr ibutes ( ) ;4 po lyAtt r ib . s e tCul lFace ( PolygonAttr ibutes .CULL NONE) ;5 app . s e tPo lygonAtt r ibute s ( po lyAtt r ib ) ;6 TexCoordGeneration texCoord = new TexCoordGeneration (
TexCoordGeneration .OBJECT LINEAR, TexCoordGeneration .TEXTURE COORDINATE 3) ;
7 app . setTexCoordGeneration ( texCoord ) ;8 St r ing nomArch=” l a d r i l l o 1 . jpg ” ;9 TextureLoader l oade r=new TextureLoader (nomArch , this ) ;
10 ImageComponent2D image=loade r . getImage ( ) ;11 i f ( image==null )12 System . out . p r i n t l n ( ” Error a l cargar l a textura ” ) ;13 Texture2D texture=new Texture2D ( Texture .BASE LEVEL, Texture
.RGBA, image . getWidth ( ) , image . getHeight ( ) ) ;14 t ex ture . setImage (0 , image ) ;15 app . setTexture ( t ex ture ) ;16 return app ;17 }18
19 public Transform3D trans formac ion0 ( ) {20 Transform3D t0=new Transform3D ( ) ;21 Vector3d v=new Vector3d ( 0 . 5 , 0 . 5 , 0 . 5 ) ;22 t0 . s e t S c a l e ( v ) ;23 return t0 ;24 }25 }
Figura 5.43: Codigo que realiza la renderizacion de un conjunto de caras que forman un cubo.Archivo: ConjuntoCaras1.java (Parte 4)
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
108 Capıtulo 5. Experimentos y Resultados
Figura 5.44: Renderizacion de los lados de un cubo formado por un conjunto de caras en VRML
Figura 5.45: Renderizacion de los lados de un cubo formado por un conjunto de caras en Java3D
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
5.4. Conclusiones acerca de las diferencias entre VRML y Java 3D 109
5.4. Conclusiones acerca de las diferencias entre VRML
y Java 3D
Despues de haber realizado varias pruebas con la herramienta Traductor de VRML aJava 3D, se puede concluir que las renderizaciones en Java 3D son mas nıtidas y tienenmas realismo que las de VRML. Ademas, las texturas tienen mejor detalle en Java 3Dque las proporcionadas por VRML. Las mejoras mencionadas se deben en gran medida aque se incluyo el siguiente codigo en el traductor, el cual elimina la sensacion de figurasplanas que se obtenıan en las imagenes del trabajo anterior.
DirectionalLight l =
new DirectionalLight( new Color3f(1.0f, 1.0f, 1.0f), new Vector3f(-1f, 0.0f, -0.4f) );
l.setInfluencingBounds(bounds);
Por otro lado, VRML tiene las siguientes ventajas: se ejecuta muy rapidamente, el
tamano del codigo es reducido y es muy facil de comprender siendo, estas a la vez, las
principales desventajas de Java 3D.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
110 Capıtulo 5. Experimentos y Resultados
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
Capıtulo 6
Conclusiones
El presente trabajo de tesis proporciona una herramienta disenada usando el para-
digma orientado a objetos y fue totalmente desarrollada con el lenguaje de programacion
Java.
Esta herramienta tiene la capacidad de apoyar a los desarrolladores de aplicaciones
de realidad virtual para mejorar su productividad, si ya cuentan con codigo VRML que
ya ha sido probado y que por lo tanto es funcionalmente correcto.
La herramienta toma como entrada un codigo fuente en VRML bien formado y lo
traduce a codigo Java 3D, de esta forma la herramienta no contempla la deteccion de
errores de sintaxis del codigo fuente de entrada, tal como lo harıa un compilador.
La herramienta denominada Traductor de VRML a Java 3D cuenta con las siguientes
caracterısticas:
Primitivas basicas para crear figuras regulares: Box, Cone Cylinder y Sphere.
111
112 Capıtulo 6. Conclusiones
Nodos para crear figuras irregulares : PointSet, IndexedLineSet e IndexedFaceSet.
Manejo de nodos de transformacion: rotacion, translacion y escalamiento usando
las estructuras dinamicas arbol y una lista ligada, de esta forma la recursividad
del arbol permite usar multiples transformaciones sin necesidad de usar alguna
bandera.
Se mejoro el escalamiento en Java 3D, el cual tiende a deformar los objetos.
Mejora de la apariencia final.
Manejo de texturas dentro de las limitantes de Java 3D.
Interfaz grafica amigable con el usuario que permite seleccionar el archivo de en-
trada, traducir, compilar, ejecutar y visualizar el renderizado en Java 3D.
Area para la representacion jerarquica grafica (arbol) de los nodos de la aplicacion
donde se pueden observar las transformaciones de cada geometrıa.
Se integra la compilacion del archivo Java 3D con el compilador de Java de forma
automatica.
Se integra la ejecucion del archivo Java desde la interfaz grafica, por lo que no hay
necesidad de buscar el archivo tipo class y ejecutarlo por separado.
Cuenta con una area de salida donde se muestra el codigo traducido generado en
Java 3D, con el fin de que el desarrollador vea la salida sin necesidad de recurrir a
un editor.
Permite especificar los nombres de archivos de salida en Java al gusto del desarro-
llador.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
6.1. Contribuciones 113
Redundancia para seleccionar las opciones del proceso de conversion a traves de
menu o de botones con ıconos nemonicos.
Habilitacion y deshabilitacion de los pasos del proceso de conversion: abrir archivo
VRML, convertir a Java, compilar y ejecutar.
Botones Acerca de y Salir.
6.1. Contribuciones
La herramienta producto de este trabajo denominada Traductor de VRML a Java 3D
cumple con todas las especificaciones establecidas en el protocolo de tesis y es comple-
tamente funcional dentro de las limitaciones del alcance propuesto. Adicionalmente se
integraron las fases de compilacion y ejecucion del codigo Java generado desde la misma
interfaz grafica de la herramienta.
Esta herramienta ayudara a reutilizar el codigo VRML bien formado y que funciona
correctamente.
Este traductor contribuira a:
Aprovechar aplicaciones de realidad virtual en VRML.
Reducir los tiempos de realizar aplicaciones de realidad virtual.
Comprender los lenguajes VRML y Java 3D, ası como identificar sus diferencias.
Estructurar de forma entendible la forma como se programa en Java 3D.
Realiza las transformaciones sin ayuda de alguna bandera u otro apoyo extra en
el codigo fuente.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
114 Capıtulo 6. Conclusiones
Se mejoro la apariencia de las texturas, eliminandose el aspecto plano de las figuras
3D tıpicas de Java 3D, y que dan una sensasion de poco realismo.
Interfaz grafica que integra todos los pasos de conversion.
Se agrego en la interfaz grafica la integracion de los pasos de compilacion con el
compilador de Java y la ejecucion sin necesidad de realizarlo desde la lınea de
comandos o desde un entorno de desarrollo como netBeans, lo cual ahorra tiempo
al desarrollador por ejemplo en la busqueda de los archivos y evita los consecuentes
errores.
Finalmente, se puede afirmar que es una herramienta unica en su tipo.
6.2. Trabajo Futuro
En el presente trabajo se ha realizado un gran avance en cuanto a solucionar varios de
los puntos mas difıciles de la estructura del codigo en VRML, tales como los nodos para
crear figuras irregulares : PointSet, IndexedLineSet e IndexedFaceSet y el manejo de los
nodos de transformacion: rotacion, translacion y escalamiento. Lo anterior posibillita
para que se realicen extensiones al convertidor VRML a Java 3D en trabajos futuros,
tales como el uso de movimiento y la inclusion de sonido, lo cual completarıa las funcio-
nalidades mas demandadas por los programadores y que no se encuentran disponibles
en el ambito comercial, ni en el academico. Cabe resaltar que por haberse desarrollado
en Java, no se requiere de licencia para el desarrollo posterior, ademas de la portabilidad
que se cuenta para que pueda ser ejecutado en cualquier plataforma que cuente con el
compilador de Java y la maquina virtual de Java.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
Bibliografıa
[1] Manetta C. and Blade, R.A., Glossary of Virtual Reality Terminology, International
Journal of Virtual Reality, http://ijvr.uccs.edu/manetta.htm, 1998.
[2] Judkins, P.,Glimpses of heaven, visions of hell: virtual reality and its applications,
Hodder & Stoughton, 1994.
[3] Aukstakalnis S., Blatner D. and Roth S., Silicon Mirage: The Art and Science of
Virtual Reality, Peachpit Pr, 1992.
[4] Isdale J., What Is Virtual Reality? A Web-Based Introduction,
http://vr.isdale.com/WhatIsVR.html, 1998.
[5] Louka, M., Human Factors Engineering and Control Room Design using a Virtual
Reality Based Tool for Design and Testing, WRSM, 1998.
[6] Ames, Andrea L., Nadeau, David R. and Moreland, John L., VRML 2.0 SOURCE-
BOOK, John Wiley & Sons, Inc 1997.
[7] Jamsa, Kris , Schmauder, Phil and Yee, Nelson, VRML Biblioteca del programador,
Mc Graw Hill, 1997.
[8] Arzate Pelayo,Gersain, Diseno e Implementacion de un traductor de lenguaje
VRML a JAVA3D, CIDETEC-IPN, 2009.
115
116 BIBLIOGRAFIA
[9] Morales Alvarado, Rodrigo, Interfaz para el aprendizaje de la realidad virtual ha-
ciendo uso de un guante de datos, CIDETEC-IPN, 2007.
[10] Pratdepadua, Joan J. Programacion en 3D con Java3D, Alfaomega, 2003.
[11] Lea, Rodger, Java for 3d and Vrml Worlds, Rodger Lea, 2004.
[12] Davidson, Andrew, Pro Java 6 3D Game Development: Java 3D, JOGL, JInput
and JOAL APIs (Expert’s Voice in Java) , Mc. Graw Hill, Inc 2007.
[13] Jimenez Macıas, E., Sanz Adan, F. y Perez de la Parte, M., Analisis comparativo de
VRML, X3D y Java 3D, Departamento de Ingenierıa Electrica. Area de Ingenierıa
de Sistemas y Automatica. Universidad de La Rioja, 2004.
[14] Martınez Muneta, M. Luisa, Felez Mindan, Jesus y Romero Rey, Gregorio, Ultimas
tendencias en graficos web 3D para internet, Universidad Politecnica de Madrid.
ETS. Ingenieros Industriales, 2001.
[15] Emoto, M., Shoji, M., Suzuki, S. and Yamaguchi, S., The interactive data visualii-
zation with Java 3D, University of Industrial Technology, Sagamihara, 2001.
[16] Jimenez Macıas, E., Moreno Fernandez, J.A. y Perez de la Parte, M. Simulacion en
internet de un laboratorio virtual en sus entorno mediante VRML, Departamento
de Ingenierıa Electrica. Area de Ingenierıa de Sistemas y Automatica. Universidad
de La Rioja, 2006.
[17] Wightman M. P., Galvis G. y Jabba, A., Ambientes de Realidad Virtual no inmersi-
va multiusuario con herramientas de software libre, Mc. Graw HilThe Waite Group,
Inc 2003.
[18] Molina Dıaz A., Sistema de diseno de entornos virtuales de edificios domotizados
con Java 3D, 2002.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
BIBLIOGRAFIA 117
[19] Olguın Carbajal, M., Rivera Zarate, I. y Herrera Lozada, J.C., Implementacion de
camino sin fin para mundos virtuales por medio de una caminadora, CIDETEC-
IPN, 2005.
[20] Varela Vaca A. J., Matamoros Casas T. Refoyo Ruiz B. y Vega Cazalla J., VRML
Slicing, 2008.
[21] Mauve, Martin, Transparent Access To And Encoding Of VRML State Information,
2002.
[22] Garcıa-Bermejo Giner, Jose Rafael, Java SE6 & Swing El lenguaje mas versatil,
Pearson, 2007.
[23] Darwin, Ian F., Curso de java: soluciones y ejemplos para desarrolladores de Java,
Anaya multimedia, 2004.
[24] Martin Sierra, Antonio, Programador certificado java 2, Rama, 2010.
[25] VV.AA, Profesional java jdk 6, Anaya multimedia/Wrox, 2007.
[26] Horstmann, Cay & Cornelll, Gary, Core Java Volumen I, Pearson, 2006.
[27] Horstmann, Cay & Cornelll, Gary, Core Java Volumen II- Caracterısticas avanza-
das, Pearson, 2006.
[28] Eckel, Bruce, Piensa en Java, Pearson, 2002.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
118 BIBLIOGRAFIA
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
Apendice A
Comparacion entre la herramienta
de esta tesis y [8]
119
120 Apendice A. Comparacion entre la herramienta de esta tesis y [8]
Tabla A.1: Comparacion entre ambos traductoresTrabajo anterior Nueva propuesta
Nombre de la tesis
Diseno e implementa-cion de un traductor delenguajes, VRML a Ja-va3D
Mejoras en el diseno,e implementacion de untraductor de VRML aJava 3D
Autor Gersaın Arzate PelayoJose Marco AntonioRueda Melendez
Ano 2009 2011Lenguaje de programa-cion
Visual Basic .net (Re-quiere licencia)
Java (gratuito)
Paradigma de progra-macion
Orientado a objetos Orientado a objetos
Sistema operativo Versiones de WindowsUnix/Linux, Windows,Mac, etc.
Procesador IntelIntel, Motorola, Sparc,etc.
Figuras regulares SI SIFiguras irregulares NO SIDeformacion en figurascompuestas
SI NO
Transformaciones multi-ples
NO (uso de banderas pa-ra reconocer las rotacio-nes)
SI (no requiere deningun apoyo)
AparienciaSensacion de objetosplanos
Se aprecia la profundi-dad
Estructuras de datos ArreglosArbol y lista ligada (es-tructuras dinamicas)
Interfaz graficaSolo en la conversionVRML a Java 3D
Proceso completo (inclu-ye compilacion y ejecu-cion en Java)
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
Apendice B
Codigos en VRML y en Java 3D de
figuras complejas
En esta seccion se presentan cuatro ejemplos de gran complejidad que se usaron para
probar el correcto funcionamiento de la herramienta Traductor VRML a Java 3D. En
todos los casos se presentan los codigos de entrada en VRML y sus respectivos codigos
de salida en Java 3D generados por el Traductor VRML a Java 3D.
En los tres primeros ejemplos se muestran objetos complejos formados por figuras regu-
lares con traslaciones, rotaciones y escalamiento.
En el cuarto ejemplo se presenta una imagen muy compleja usando IndexedFaceSet.
B.1. Codigos para renderizar la figura: Silla
En este primer ejemplo se muestra el codigo de entrada en VRML y el codigo de
salida en Java 3D, para representar una silla de madera, la cual esta formado por varias
figuras regulares con traslaciones, rotaciones y escalamiento, ademas de tener una textura
asociada.
121
122 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
B.1.1. Codigo de entrada al Traductor VRML a Java 3D. Ar-
chivo: SillaMadera01.wrl
Este ejemplo se presento en [8] como ejemplo final, pero se nota la deformacion en la
proporcion de las dimensiones y que son debidas a la forma de dimensionar las figuras
basicas en Java 3D. La herramienta propuesta ha corregido este problema. Se presenta
este ejemplo para comprobar la correccion del problema antes mencionado.
1 #VRML V2.0 u t f 8
2 Transform{
3 r o t a t i on 0 1 0 0 .23
4 ch i l d r en [
5 Transform {
6 r o t a t i on 1 0 0 0 .428
7 ch i l d r en [
8 Shape{
9 geometry Box{
10 s i z e 0 .45 0 .4 0 .02
11 }
12 appearance Appearance{
13 t ex tu re ImageTexture{
14 u r l ”madera1 . jpg ”
15 }
16 }
17 }
18 Transform {
19 t r a n s l a t i o n 0 .0 −0.19 0 .19
20 ch i l d r en [
21 Shape{
22 geometry Box{
23 s i z e 0 .45 0 .02 0 .4
24 }
25 appearance Appearance{
26 t ex tu re ImageTexture {
27 u r l ”madera4 . jpg ”
28 }
29 }
30 }
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.1. Codigos para renderizar la figura: Silla 123
31 ]
32 }
33 Transform {
34 t r a n s l a t i o n −0.17 −0.38 0 .04
35 ch i l d r en [
36 Shape{
37 geometry Cylinder{
38 rad iu s 0 .02 he ight 0 .40
39 }
40 appearance Appearance{
41 t ex tu re ImageTexture {
42 u r l ”madera1 . jpg ”
43 }
44 }
45 }
46 ]
47 }
48 Transform {
49 t r a n s l a t i o n 0 .17 −0.38 0 .04
50 ch i l d r en [
51 Shape{
52 geometry Cylinder{
53 rad iu s 0 .02 he ight 0 .40
54 }
55 appearance Appearance{
56 t ex tu re ImageTexture {
57 u r l ”madera1 . jpg ”
58 }
59 }
60 }
61 ]
62 }
63 Transform {
64 t r a n s l a t i o n −0.17 −0.38 0 .34
65 ch i l d r en [
66 Shape{
67 geometry Cylinder{
68 rad iu s 0 .02 he ight 0 .40
69 }
70 appearance Appearance{
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
124 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
71 t ex tu re ImageTexture {
72 u r l ”madera1 . jpg ”
73 }
74 }
75 }
76 ]
77 }
78 Transform {
79 t r a n s l a t i o n 0 .17 −0.38 0 .34
80 ch i l d r en [
81 Shape{
82 geometry Cylinder{
83 rad iu s 0 .02 he ight 0 .40
84 }
85 appearance Appearance{
86 t ex tu re ImageTexture {
87 u r l ”madera1 . jpg ”
88 }
89 }
90 }
91 ]
92 }
93 ]
94 }
95 ]
96 }
B.1.2. Codigo de salida del Traductor VRML a Java 3D. Ar-
chivo: SillaMadera01.java
1 import javax . swing . JFrame ;
2 import java . awt . BorderLayout ;
3 import java . awt . Frame ;
4 import java . awt . event .WindowEvent ;
5 import java . awt . event . WindowListener ;
6 import java . awt . GraphicsConf igurat ion ;
7 import com . sun . j3d . u t i l s . image . TextureLoader ;
8 import com . sun . j3d . u t i l s . un ive r s e . S impleUniverse ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.1. Codigos para renderizar la figura: Silla 125
9 import com . sun . j3d . u t i l s . geometry . ∗ ;
10 import javax . media . j3d . ∗ ;
11 import javax . vecmath . Co lor3 f ;
12 import javax . vecmath . Vector3d ;
13 import com . sun . j3d . u t i l s . behav ior s . vp . ∗ ;
14 import javax . vecmath . Point3d ;
15 import javax . vecmath . Po int3 f ;
16 import javax . vecmath . Co lor3 f ;
17 import javax . vecmath . ∗ ;
18
19 public class Si l laMadera01 extends JFrame {
20 public Si l laMadera01 ( ) {
21 setLayout (new BorderLayout ( ) ) ;
22 GraphicsConf igurat ion con f i g = SimpleUniverse . g e tPr e f e r r edCon f i gu ra t i on
( ) ;
23 Canvas3D canvas = new Canvas3D( con f i g ) ;
24 add ( ”Center ” , canvas ) ;
25 BranchGroup escena = createSceneGraph ( ) ;
26 SimpleUniverse simpleU = new SimpleUniverse ( canvas ) ;
27 simpleU . getViewingPlatform ( ) . setNominalViewingTransform ( ) ;
28 simpleU . addBranchGraph ( escena ) ;
29 // l a s t r e s l i n e a s s i g u i e n t e s h a b i l i t a n l a navigac ion de l a escena
usando e l raton .
30 OrbitBehavior ob = new OrbitBehavior ( canvas ) ;
31 ob . setSchedul ingBounds (new BoundingSphere (new Point3d ( 0 . 0 , 0 . 0 , 0 . 0 ) ,
Double .MAXVALUE) ) ;
32 simpleU . getViewingPlatform ( ) . setViewPlatformBehavior ( ob ) ;
33 }
34
35 public stat ic void main ( St r ing args [ ] ) {
36 Si l laMadera01 frame = new Si l laMadera01 ( ) ;
37 frame . s e tDe fau l tC lo seOperat ion ( JFrame .EXIT ON CLOSE) ;
38 frame . s e t S i z e (300 , 300) ;
39 frame . s e tV i s i b l e ( true ) ;
40 }
41
42 public BranchGroup createSceneGraph ( ) {
43 BranchGroup r a i z = new BranchGroup ( ) ;
44 BoundingSphere bounds = new BoundingSphere (new Point3d ( ) , Double .
MAXVALUE) ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
126 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
45 Di r e c t i ona lL i gh t l 1 =
46 new Di r e c t i ona lL i gh t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,
47 new Vector3 f (1 f , 0 . 0 f , −0.4 f ) ) ;
48 l 1 . s e t In f luenc ingBounds ( bounds ) ;
49 r a i z . addChild ( l 1 ) ;
50 Di r e c t i ona lL i gh t l 2 =
51 new Di r e c t i ona lL i gh t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,
52 new Vector3 f (−1 f , 0 . 0 f , −0.4 f ) ) ;
53 l 2 . s e t In f luenc ingBounds ( bounds ) ;
54 r a i z . addChild ( l 2 ) ;
55 Di r e c t i ona lL i gh t l 3 =
56 new Di r e c t i ona lL i gh t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,
57 new Vector3 f (0 f , 1 . 0 f , −0.4 f ) ) ;
58 l 3 . s e t In f luenc ingBounds ( bounds ) ;
59 r a i z . addChild ( l 3 ) ;
60 Di r e c t i ona lL i gh t l 4 =
61 new Di r e c t i ona lL i gh t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,
62 new Vector3 f (0 f , −1.0 f , −0.4 f ) ) ;
63 l 4 . s e t In f luenc ingBounds ( bounds ) ;
64 r a i z . addChild ( l 4 ) ;
65 Box box0= new Box (0 . 225 f , 0 . 2 f , 0 . 0 1 f , c r eaApar i enc ia0 ( ) ) ;
66 Box box1= new Box (0 . 225 f , 0 . 0 1 f , 0 . 2 f , c r eaApar i enc ia1 ( ) ) ;
67 Cyl inder cy l i nd e r 2= new Cyl inder ( 0 . 02 f , 0 . 4 0 f , c r eaApar i enc ia2 ( ) ) ;
68 Cyl inder cy l i nd e r 3= new Cyl inder ( 0 . 02 f , 0 . 4 0 f , c r eaApar i enc ia3 ( ) ) ;
69 Cyl inder cy l i nd e r 4= new Cyl inder ( 0 . 02 f , 0 . 4 0 f , c r eaApar i enc ia4 ( ) ) ;
70 Cyl inder cy l i nd e r 5= new Cyl inder ( 0 . 02 f , 0 . 4 0 f , c r eaApar i enc ia5 ( ) ) ;
71
72 TransformGroup tg0=new TransformGroup ( t rans formac ion0 ( ) ) ;
73 tg0 . addChild ( box1 ) ;
74 TransformGroup tg1=new TransformGroup ( t rans formac ion1 ( ) ) ;
75 tg1 . addChild ( cy l i nd e r 2 ) ;
76 TransformGroup tg2=new TransformGroup ( t rans formac ion2 ( ) ) ;
77 tg2 . addChild ( cy l i nd e r 3 ) ;
78 TransformGroup tg3=new TransformGroup ( t rans formac ion3 ( ) ) ;
79 tg3 . addChild ( cy l i nd e r 4 ) ;
80 TransformGroup tg4=new TransformGroup ( t rans formac ion4 ( ) ) ;
81 tg4 . addChild ( cy l i nd e r 5 ) ;
82 TransformGroup tg5=new TransformGroup ( t rans formac ion5 ( ) ) ;
83 tg5 . addChild ( box0 ) ;
84 tg5 . addChild ( tg0 ) ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.1. Codigos para renderizar la figura: Silla 127
85 tg5 . addChild ( tg1 ) ;
86 tg5 . addChild ( tg2 ) ;
87 tg5 . addChild ( tg3 ) ;
88 tg5 . addChild ( tg4 ) ;
89 r a i z . addChild ( tg5 ) ;
90
91 r a i z . compi le ( ) ;
92 return r a i z ;
93 }
94
95 public Appearance c reaApar i enc ia0 ( ) {
96 Appearance app=new Appearance ( ) ;
97 PolygonAttr ibutes po lyAtt r ib = new PolygonAttr ibutes ( ) ;
98 po lyAtt r ib . s e tCul lFace ( PolygonAttr ibutes .CULL NONE) ;
99 app . s e tPo lygonAtt r ibute s ( po lyAtt r ib ) ;
100 TexCoordGeneration texCoord = new TexCoordGeneration ( TexCoordGeneration
.OBJECT LINEAR, TexCoordGeneration .TEXTURE COORDINATE 3) ;
101 app . setTexCoordGeneration ( texCoord ) ;
102 St r ing nomArch=”madera1 . jpg ” ;
103 TextureLoader l oade r=new TextureLoader (nomArch , this ) ;
104 ImageComponent2D image=loade r . getImage ( ) ;
105 i f ( image==null )
106 System . out . p r i n t l n ( ”Error a l cargar l a textura ” ) ;
107 Texture2D texture=new Texture2D ( Texture .BASE LEVEL, Texture .RGBA, image .
getWidth ( ) , image . getHeight ( ) ) ;
108 t ex tu re . setImage (0 , image ) ;
109 app . setTexture ( t ex tu re ) ;
110 return app ;
111 }
112 public Appearance c reaApar i enc ia1 ( ) {
113 Appearance app=new Appearance ( ) ;
114 PolygonAttr ibutes po lyAtt r ib = new PolygonAttr ibutes ( ) ;
115 po lyAtt r ib . s e tCul lFace ( PolygonAttr ibutes .CULL NONE) ;
116 app . s e tPo lygonAtt r ibute s ( po lyAtt r ib ) ;
117 TexCoordGeneration texCoord = new TexCoordGeneration ( TexCoordGeneration
.OBJECT LINEAR, TexCoordGeneration .TEXTURE COORDINATE 3) ;
118 app . setTexCoordGeneration ( texCoord ) ;
119 St r ing nomArch=”madera4 . jpg ” ;
120 TextureLoader l oade r=new TextureLoader (nomArch , this ) ;
121 ImageComponent2D image=loade r . getImage ( ) ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
128 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
122 i f ( image==null )
123 System . out . p r i n t l n ( ”Error a l cargar l a textura ” ) ;
124 Texture2D texture=new Texture2D ( Texture .BASE LEVEL, Texture .RGBA, image .
getWidth ( ) , image . getHeight ( ) ) ;
125 t ex tu re . setImage (0 , image ) ;
126 app . setTexture ( t ex tu re ) ;
127 return app ;
128 }
129 public Appearance c reaApar i enc ia2 ( ) {
130 Appearance app=new Appearance ( ) ;
131 PolygonAttr ibutes po lyAtt r ib = new PolygonAttr ibutes ( ) ;
132 po lyAtt r ib . s e tCul lFace ( PolygonAttr ibutes .CULL NONE) ;
133 app . s e tPo lygonAtt r ibute s ( po lyAtt r ib ) ;
134 TexCoordGeneration texCoord = new TexCoordGeneration ( TexCoordGeneration
.OBJECT LINEAR, TexCoordGeneration .TEXTURE COORDINATE 3) ;
135 app . setTexCoordGeneration ( texCoord ) ;
136 St r ing nomArch=”madera1 . jpg ” ;
137 TextureLoader l oade r=new TextureLoader (nomArch , this ) ;
138 ImageComponent2D image=loade r . getImage ( ) ;
139 i f ( image==null )
140 System . out . p r i n t l n ( ”Error a l cargar l a textura ” ) ;
141 Texture2D texture=new Texture2D ( Texture .BASE LEVEL, Texture .RGBA, image .
getWidth ( ) , image . getHeight ( ) ) ;
142 t ex tu re . setImage (0 , image ) ;
143 app . setTexture ( t ex tu re ) ;
144 return app ;
145 }
146 public Appearance c reaApar i enc ia3 ( ) {
147 Appearance app=new Appearance ( ) ;
148 PolygonAttr ibutes po lyAtt r ib = new PolygonAttr ibutes ( ) ;
149 po lyAtt r ib . s e tCul lFace ( PolygonAttr ibutes .CULL NONE) ;
150 app . s e tPo lygonAtt r ibute s ( po lyAtt r ib ) ;
151 TexCoordGeneration texCoord = new TexCoordGeneration ( TexCoordGeneration
.OBJECT LINEAR, TexCoordGeneration .TEXTURE COORDINATE 3) ;
152 app . setTexCoordGeneration ( texCoord ) ;
153 St r ing nomArch=”madera1 . jpg ” ;
154 TextureLoader l oade r=new TextureLoader (nomArch , this ) ;
155 ImageComponent2D image=loade r . getImage ( ) ;
156 i f ( image==null )
157 System . out . p r i n t l n ( ”Error a l cargar l a textura ” ) ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.1. Codigos para renderizar la figura: Silla 129
158 Texture2D texture=new Texture2D ( Texture .BASE LEVEL, Texture .RGBA, image .
getWidth ( ) , image . getHeight ( ) ) ;
159 t ex tu re . setImage (0 , image ) ;
160 app . setTexture ( t ex tu re ) ;
161 return app ;
162 }
163 public Appearance c reaApar i enc ia4 ( ) {
164 Appearance app=new Appearance ( ) ;
165 PolygonAttr ibutes po lyAtt r ib = new PolygonAttr ibutes ( ) ;
166 po lyAtt r ib . s e tCul lFace ( PolygonAttr ibutes .CULL NONE) ;
167 app . s e tPo lygonAtt r ibute s ( po lyAtt r ib ) ;
168 TexCoordGeneration texCoord = new TexCoordGeneration ( TexCoordGeneration
.OBJECT LINEAR, TexCoordGeneration .TEXTURE COORDINATE 3) ;
169 app . setTexCoordGeneration ( texCoord ) ;
170 St r ing nomArch=”madera1 . jpg ” ;
171 TextureLoader l oade r=new TextureLoader (nomArch , this ) ;
172 ImageComponent2D image=loade r . getImage ( ) ;
173 i f ( image==null )
174 System . out . p r i n t l n ( ”Error a l cargar l a textura ” ) ;
175 Texture2D texture=new Texture2D ( Texture .BASE LEVEL, Texture .RGBA, image .
getWidth ( ) , image . getHeight ( ) ) ;
176 t ex tu re . setImage (0 , image ) ;
177 app . setTexture ( t ex tu re ) ;
178 return app ;
179 }
180 public Appearance c reaApar i enc ia5 ( ) {
181 Appearance app=new Appearance ( ) ;
182 PolygonAttr ibutes po lyAtt r ib = new PolygonAttr ibutes ( ) ;
183 po lyAtt r ib . s e tCul lFace ( PolygonAttr ibutes .CULL NONE) ;
184 app . s e tPo lygonAtt r ibute s ( po lyAtt r ib ) ;
185 TexCoordGeneration texCoord = new TexCoordGeneration ( TexCoordGeneration
.OBJECT LINEAR, TexCoordGeneration .TEXTURE COORDINATE 3) ;
186 app . setTexCoordGeneration ( texCoord ) ;
187 St r ing nomArch=”madera1 . jpg ” ;
188 TextureLoader l oade r=new TextureLoader (nomArch , this ) ;
189 ImageComponent2D image=loade r . getImage ( ) ;
190 i f ( image==null )
191 System . out . p r i n t l n ( ”Error a l cargar l a textura ” ) ;
192 Texture2D texture=new Texture2D ( Texture .BASE LEVEL, Texture .RGBA, image .
getWidth ( ) , image . getHeight ( ) ) ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
130 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
193 t ex tu re . setImage (0 , image ) ;
194 app . setTexture ( t ex tu re ) ;
195 return app ;
196 }
197
198 public Transform3D trans formac ion0 ( ) {
199 Transform3D t0=new Transform3D ( ) ;
200 Vector3d v=new Vector3d (0 . 0 , −0 .19 , 0 . 19 ) ;
201 t0 . s e t ( v ) ;
202 return t0 ;
203 }
204 public Transform3D trans formac ion1 ( ) {
205 Transform3D t0=new Transform3D ( ) ;
206 Vector3d v=new Vector3d (−0.17 ,−0.38 ,0 .04) ;
207 t0 . s e t ( v ) ;
208 return t0 ;
209 }
210 public Transform3D trans formac ion2 ( ) {
211 Transform3D t0=new Transform3D ( ) ;
212 Vector3d v=new Vector3d (0 . 17 , −0 .38 ,0 . 04 ) ;
213 t0 . s e t ( v ) ;
214 return t0 ;
215 }
216 public Transform3D trans formac ion3 ( ) {
217 Transform3D t0=new Transform3D ( ) ;
218 Vector3d v=new Vector3d (−0.17 ,−0.38 ,0 .34) ;
219 t0 . s e t ( v ) ;
220 return t0 ;
221 }
222 public Transform3D trans formac ion4 ( ) {
223 Transform3D t0=new Transform3D ( ) ;
224 Vector3d v=new Vector3d (0 . 17 , −0 .38 ,0 . 34 ) ;
225 t0 . s e t ( v ) ;
226 return t0 ;
227 }
228 public Transform3D trans formac ion5 ( ) {
229 Transform3D t0=new Transform3D ( ) ;
230 t0 . rotX (0 . 4 28 ) ;
231 Transform3D t1=new Transform3D ( ) ;
232 t1 . rotY ( 0 . 2 3 ) ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.2. Codigos para renderizar la figura: Sofa 131
233 t0 . mul ( t1 ) ;
234 return t0 ;
235 }
236
237 }
B.2. Codigos para renderizar la figura: Sofa
En este segundo ejemplo se muestra el codigo de entrada en VRML y el codigo de
salida en Java 3D, para representar un Sofa con textura de piel, el cual esta formado por
varias figuras regulares con traslaciones, rotaciones y escalamiento. Se puede observar
una ligera diferencia en la representacion de las texturas. En Java 3D se puede notar
que el sofa parece mas real por la sensacion de estar acojinado.
B.2.1. Codigo de entrada al Traductor VRML a Java 3D. Ar-
chivo: Sofa1.wrl
1 #VRML V2.0 u t f 8
2 Transform {
3 s c a l e 0 . 3 0 .3 0 .3
4 ch i l d r en [
5 Transform{
6 t r a n s l a t i o n 3 1 0
7 ch i l d r en [
8 Transform{
9 r o t a t i on 1 0 0 1 .571
10 ch i l d r en [
11 Shape{
12 geometry Cylinder{
13 rad iu s 0 .25 he ight 2
14 }
15 appearance Appearance{
16 t ex tu re ImageTexture{
17 u r l ” p i e l 2 . jpg ”
18 }
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
132 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
19 }
20 }
21 ]
22 }
23 ]
24 }
25 ]
26 }
27 Transform {
28 s c a l e 0 . 3 0 .3 0 .3
29 ch i l d r en [
30 Transform {
31 t r a n s l a t i o n −3 1 0
32 ch i l d r en [
33 Transform{
34 r o t a t i on 1 0 0 1 .571
35 ch i l d r en [
36 Shape{
37 geometry Cylinder{
38 rad iu s 0 .25 he ight 2
39 }
40 appearance Appearance{
41 t ex tu re ImageTexture{
42 u r l ” p i e l 2 . jpg ”
43 }
44 }
45 }
46 ]
47 }
48 ]
49 }
50 ]
51 }
52 Transform {
53 s c a l e 0 . 3 0 .3 0 .3
54 ch i l d r en [
55 Transform{
56 t r a n s l a t i o n 0 2 .0 −1
57 ch i l d r en [
58 Transform{
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.2. Codigos para renderizar la figura: Sofa 133
59 r o t a t i on 0 0 1 1 .571
60 ch i l d r en [
61 Shape{
62 geometry Cylinder{
63 rad iu s . 25 he ight 6
64 }
65 appearance Appearance{
66 t ex tu re ImageTexture{
67 u r l ” p i e l 2 . jpg ”
68 }
69 }
70 }
71 ]
72 }
73 ]
74 }
75 ]
76 }
77 Transform{
78 s c a l e 0 . 3 0 .3 0 .3
79 ch i l d r en [
80 Transform{
81 t r a n s l a t i o n 0 0 .5 −1
82 ch i l d r en [
83 Shape{
84 geometry Box{
85 s i z e 6 3 0 .5
86 }
87 appearance Appearance{
88 t ex tu re ImageTexture{
89 u r l ” p i e l 2 . jpg ”
90 }
91 }
92 }
93 ]
94 }
95 ]
96 }
97 Transform {
98 s c a l e 0 . 3 0 .3 0 .3
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
134 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
99 ch i l d r en [
100 Transform{
101 t r a n s l a t i o n 0 .0 0 .5 0 .0
102 ch i l d r en [
103 Shape{
104 geometry Box{
105 s i z e 6 0 .5 2
106 }
107 appearance Appearance{
108 t ex tu re ImageTexture{
109 u r l ” p i e l 2 . jpg ”
110 }
111 }
112 }
113 ]
114 }
115 ]
116 }
117 Transform {
118 s c a l e 0 . 3 0 .3 0 .3
119 ch i l d r en [
120 Transform{
121 t r a n s l a t i o n 3 0 0
122 ch i l d r en [
123 Shape{
124 geometry Box{
125 s i z e 0 . 5 2 2
126 }
127 appearance Appearance{
128 t ex tu re ImageTexture{
129 u r l ” p i e l 2 . jpg ”
130 }
131 }
132 }
133 ]
134 }
135 ]
136 }
137 Transform {
138 s c a l e 0 . 3 0 .3 0 .3
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.2. Codigos para renderizar la figura: Sofa 135
139 ch i l d r en [
140 Transform{
141 t r a n s l a t i o n −3 0 0
142 ch i l d r en [
143 Shape{
144 geometry Box{
145 s i z e 0 . 5 2 2
146 }
147 appearance Appearance{
148 t ex tu re ImageTexture{
149 u r l ” p i e l 2 . jpg ”
150 }
151 }
152 }
153 ]
154 }
155 ]
156 }
157 Transform {
158 s c a l e 0 . 3 0 .3 0 .3
159 ch i l d r en [
160 Transform{
161 t r a n s l a t i o n −3 1 1
162 ch i l d r en [
163 Transform{
164 s c a l e 1 1 0 .5
165 ch i l d r en [
166 Shape{
167 geometry Sphere{
168 rad iu s . 25
169 }
170 appearance Appearance {
171 t ex tu re ImageTexture{
172 u r l ” p i e l 2 . jpg ”
173 }
174 }
175 }
176 ]
177 }
178 ]
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
136 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
179 }
180 ]
181 }
182 Transform {
183 s c a l e 0 . 3 0 .3 0 .3
184 ch i l d r en [
185 Transform{
186 t r a n s l a t i o n 3 1 1
187 ch i l d r en [
188 Transform{
189 s c a l e 1 1 0 .5
190 ch i l d r en [
191 Shape{
192 geometry Sphere{
193 rad iu s . 25
194 }
195 appearance Appearance{
196 t ex tu re ImageTexture{
197 u r l ” p i e l 2 . jpg ”
198 }
199 }
200 }
201 ]
202 }
203 ]
204 }
205 ]
206 }
B.2.2. Codigo de salida del Traductor VRML a Java 3D. Ar-
chivo: Sofa.java
1 import javax . swing . JFrame ;
2 import java . awt . BorderLayout ;
3 import java . awt . Frame ;
4 import java . awt . event .WindowEvent ;
5 import java . awt . event . WindowListener ;
6 import java . awt . GraphicsConf igurat ion ;
7 import com . sun . j3d . u t i l s . image . TextureLoader ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.2. Codigos para renderizar la figura: Sofa 137
8 import com . sun . j3d . u t i l s . un ive r s e . S impleUniverse ;
9 import com . sun . j3d . u t i l s . geometry . ∗ ;
10 import javax . media . j3d . ∗ ;
11 import javax . vecmath . Co lor3 f ;
12 import javax . vecmath . Vector3d ;
13 import com . sun . j3d . u t i l s . behav ior s . vp . ∗ ;
14 import javax . vecmath . Point3d ;
15 import javax . vecmath . Po int3 f ;
16 import javax . vecmath . Co lor3 f ;
17 import javax . vecmath . ∗ ;
18
19 public class Sofa1 extends JFrame {
20 public Sofa1 ( ) {
21 setLayout (new BorderLayout ( ) ) ;
22 GraphicsConf igurat ion con f i g = SimpleUniverse . g e tPr e f e r r edCon f i gu ra t i on
( ) ;
23 Canvas3D canvas = new Canvas3D( con f i g ) ;
24 add ( ”Center ” , canvas ) ;
25 BranchGroup escena = createSceneGraph ( ) ;
26 SimpleUniverse simpleU = new SimpleUniverse ( canvas ) ;
27 simpleU . getViewingPlatform ( ) . setNominalViewingTransform ( ) ;
28 simpleU . addBranchGraph ( escena ) ;
29 // l a s t r e s l i n e a s s i g u i e n t e s h a b i l i t a n l a navigac ion de l a escena
usando e l raton .
30 OrbitBehavior ob = new OrbitBehavior ( canvas ) ;
31 ob . setSchedul ingBounds (new BoundingSphere (new Point3d ( 0 . 0 , 0 . 0 , 0 . 0 ) ,
Double .MAXVALUE) ) ;
32 simpleU . getViewingPlatform ( ) . setViewPlatformBehavior ( ob ) ;
33 }
34
35
36 public stat ic void main ( St r ing args [ ] ) {
37 Sofa1 frame = new Sofa1 ( ) ;
38 frame . s e tDe fau l tC lo seOperat ion ( JFrame .EXIT ON CLOSE) ;
39 frame . s e t S i z e (300 , 300) ;
40 frame . s e tV i s i b l e ( true ) ;
41 }
42
43 public BranchGroup createSceneGraph ( ) {
44 BranchGroup r a i z = new BranchGroup ( ) ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
138 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
45 BoundingSphere bounds = new BoundingSphere (new Point3d ( ) , Double .
MAXVALUE) ;
46 Di r e c t i ona lL i gh t l 1 =
47 new Di r e c t i ona lL i gh t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,
48 new Vector3 f (1 f , 0 . 0 f , −0.4 f ) ) ;
49 l 1 . s e t In f luenc ingBounds ( bounds ) ;
50 r a i z . addChild ( l 1 ) ;
51 Di r e c t i ona lL i gh t l 2 =
52 new Di r e c t i ona lL i gh t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,
53 new Vector3 f (−1 f , 0 . 0 f , −0.4 f ) ) ;
54 l 2 . s e t In f luenc ingBounds ( bounds ) ;
55 r a i z . addChild ( l 2 ) ;
56 Di r e c t i ona lL i gh t l 3 =
57 new Di r e c t i ona lL i gh t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,
58 new Vector3 f (0 f , 1 . 0 f , −0.4 f ) ) ;
59 l 3 . s e t In f luenc ingBounds ( bounds ) ;
60 r a i z . addChild ( l 3 ) ;
61 Di r e c t i ona lL i gh t l 4 =
62 new Di r e c t i ona lL i gh t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,
63 new Vector3 f (0 f , −1.0 f , −0.4 f ) ) ;
64 l 4 . s e t In f luenc ingBounds ( bounds ) ;
65 r a i z . addChild ( l 4 ) ;
66 Cyl inder cy l i nd e r 0= new Cyl inder ( 0 . 25 f , 2 f , c r eaApar i enc ia0 ( ) ) ;
67 Cyl inder cy l i nd e r 1= new Cyl inder ( 0 . 25 f , 2 f , c r eaApar i enc ia1 ( ) ) ;
68 Cyl inder cy l i nd e r 2= new Cyl inder ( . 2 5 f , 6 f , c r eaApar i enc ia2 ( ) ) ;
69 Box box3= new Box ( 3 . 0 f , 1 . 5 f , 0 . 2 5 f , c r eaApar i enc ia3 ( ) ) ;
70 Box box4= new Box ( 3 . 0 f , 0 . 2 5 f , 1 . 0 f , c r eaApar i enc ia4 ( ) ) ;
71 Box box5= new Box (0 . 25 f , 1 . 0 f , 1 . 0 f , c r eaApar i enc ia5 ( ) ) ;
72 Box box6= new Box (0 . 25 f , 1 . 0 f , 1 . 0 f , c r eaApar i enc ia6 ( ) ) ;
73 Sphere sphere7= new Sphere ( . 2 5 f , c r eaApar i enc ia7 ( ) ) ;
74 Sphere sphere8= new Sphere ( . 2 5 f , c r eaApar i enc ia8 ( ) ) ;
75
76 TransformGroup tg0=new TransformGroup ( t rans formac ion0 ( ) ) ;
77 tg0 . addChild ( cy l i nd e r 0 ) ;
78 TransformGroup tg1=new TransformGroup ( t rans formac ion1 ( ) ) ;
79 tg1 . addChild ( tg0 ) ;
80 TransformGroup tg2=new TransformGroup ( t rans formac ion2 ( ) ) ;
81 tg2 . addChild ( tg1 ) ;
82 TransformGroup tg3=new TransformGroup ( t rans formac ion3 ( ) ) ;
83 tg3 . addChild ( cy l i nd e r 1 ) ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.2. Codigos para renderizar la figura: Sofa 139
84 TransformGroup tg4=new TransformGroup ( t rans formac ion4 ( ) ) ;
85 tg4 . addChild ( tg3 ) ;
86 TransformGroup tg5=new TransformGroup ( t rans formac ion5 ( ) ) ;
87 tg5 . addChild ( tg4 ) ;
88 TransformGroup tg6=new TransformGroup ( t rans formac ion6 ( ) ) ;
89 tg6 . addChild ( cy l i nd e r 2 ) ;
90 TransformGroup tg7=new TransformGroup ( t rans formac ion7 ( ) ) ;
91 tg7 . addChild ( tg6 ) ;
92 TransformGroup tg8=new TransformGroup ( t rans formac ion8 ( ) ) ;
93 tg8 . addChild ( tg7 ) ;
94 TransformGroup tg9=new TransformGroup ( t rans formac ion9 ( ) ) ;
95 tg9 . addChild ( box3 ) ;
96 TransformGroup tg10=new TransformGroup ( trans formac ion10 ( ) ) ;
97 tg10 . addChild ( tg9 ) ;
98 TransformGroup tg11=new TransformGroup ( trans formac ion11 ( ) ) ;
99 tg11 . addChild ( box4 ) ;
100 TransformGroup tg12=new TransformGroup ( trans formac ion12 ( ) ) ;
101 tg12 . addChild ( tg11 ) ;
102 TransformGroup tg13=new TransformGroup ( trans formac ion13 ( ) ) ;
103 tg13 . addChild ( box5 ) ;
104 TransformGroup tg14=new TransformGroup ( trans formac ion14 ( ) ) ;
105 tg14 . addChild ( tg13 ) ;
106 TransformGroup tg15=new TransformGroup ( trans formac ion15 ( ) ) ;
107 tg15 . addChild ( box6 ) ;
108 TransformGroup tg16=new TransformGroup ( trans formac ion16 ( ) ) ;
109 tg16 . addChild ( tg15 ) ;
110 TransformGroup tg17=new TransformGroup ( trans formac ion17 ( ) ) ;
111 tg17 . addChild ( sphere7 ) ;
112 TransformGroup tg18=new TransformGroup ( trans formac ion18 ( ) ) ;
113 tg18 . addChild ( tg17 ) ;
114 TransformGroup tg19=new TransformGroup ( trans formac ion19 ( ) ) ;
115 tg19 . addChild ( tg18 ) ;
116 TransformGroup tg20=new TransformGroup ( trans formac ion20 ( ) ) ;
117 tg20 . addChild ( sphere8 ) ;
118 TransformGroup tg21=new TransformGroup ( trans formac ion21 ( ) ) ;
119 tg21 . addChild ( tg20 ) ;
120 TransformGroup tg22=new TransformGroup ( trans formac ion22 ( ) ) ;
121 tg22 . addChild ( tg21 ) ;
122 r a i z . addChild ( tg2 ) ;
123 r a i z . addChild ( tg5 ) ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
140 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
124 r a i z . addChild ( tg8 ) ;
125 r a i z . addChild ( tg10 ) ;
126 r a i z . addChild ( tg12 ) ;
127 r a i z . addChild ( tg14 ) ;
128 r a i z . addChild ( tg16 ) ;
129 r a i z . addChild ( tg19 ) ;
130 r a i z . addChild ( tg22 ) ;
131
132 r a i z . compi le ( ) ;
133 return r a i z ;
134 }
135
136 public Appearance c reaApar i enc ia0 ( ) {
137 Appearance app=new Appearance ( ) ;
138 PolygonAttr ibutes po lyAtt r ib = new PolygonAttr ibutes ( ) ;
139 po lyAtt r ib . s e tCul lFace ( PolygonAttr ibutes .CULL NONE) ;
140 app . s e tPo lygonAtt r ibute s ( po lyAtt r ib ) ;
141 TexCoordGeneration texCoord = new TexCoordGeneration ( TexCoordGeneration
.OBJECT LINEAR, TexCoordGeneration .TEXTURE COORDINATE 3) ;
142 app . setTexCoordGeneration ( texCoord ) ;
143 St r ing nomArch=” p i e l 2 . jpg ” ;
144 TextureLoader l oade r=new TextureLoader (nomArch , this ) ;
145 ImageComponent2D image=loade r . getImage ( ) ;
146 i f ( image==null )
147 System . out . p r i n t l n ( ”Error a l cargar l a textura ” ) ;
148 Texture2D texture=new Texture2D ( Texture .BASE LEVEL, Texture .RGBA, image .
getWidth ( ) , image . getHeight ( ) ) ;
149 t ex tu re . setImage (0 , image ) ;
150 app . setTexture ( t ex tu re ) ;
151 return app ;
152 }
153 public Appearance c reaApar i enc ia1 ( ) {
154 Appearance app=new Appearance ( ) ;
155 PolygonAttr ibutes po lyAtt r ib = new PolygonAttr ibutes ( ) ;
156 po lyAtt r ib . s e tCul lFace ( PolygonAttr ibutes .CULL NONE) ;
157 app . s e tPo lygonAtt r ibute s ( po lyAtt r ib ) ;
158 TexCoordGeneration texCoord = new TexCoordGeneration ( TexCoordGeneration
.OBJECT LINEAR, TexCoordGeneration .TEXTURE COORDINATE 3) ;
159 app . setTexCoordGeneration ( texCoord ) ;
160 St r ing nomArch=” p i e l 2 . jpg ” ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.2. Codigos para renderizar la figura: Sofa 141
161 TextureLoader l oade r=new TextureLoader (nomArch , this ) ;
162 ImageComponent2D image=loade r . getImage ( ) ;
163 i f ( image==null )
164 System . out . p r i n t l n ( ”Error a l cargar l a textura ” ) ;
165 Texture2D texture=new Texture2D ( Texture .BASE LEVEL, Texture .RGBA, image .
getWidth ( ) , image . getHeight ( ) ) ;
166 t ex tu re . setImage (0 , image ) ;
167 app . setTexture ( t ex tu re ) ;
168 return app ;
169 }
170 public Appearance c reaApar i enc ia2 ( ) {
171 Appearance app=new Appearance ( ) ;
172 PolygonAttr ibutes po lyAtt r ib = new PolygonAttr ibutes ( ) ;
173 po lyAtt r ib . s e tCul lFace ( PolygonAttr ibutes .CULL NONE) ;
174 app . s e tPo lygonAtt r ibute s ( po lyAtt r ib ) ;
175 TexCoordGeneration texCoord = new TexCoordGeneration ( TexCoordGeneration
.OBJECT LINEAR, TexCoordGeneration .TEXTURE COORDINATE 3) ;
176 app . setTexCoordGeneration ( texCoord ) ;
177 St r ing nomArch=” p i e l 2 . jpg ” ;
178 TextureLoader l oade r=new TextureLoader (nomArch , this ) ;
179 ImageComponent2D image=loade r . getImage ( ) ;
180 i f ( image==null )
181 System . out . p r i n t l n ( ”Error a l cargar l a textura ” ) ;
182 Texture2D texture=new Texture2D ( Texture .BASE LEVEL, Texture .RGBA, image .
getWidth ( ) , image . getHeight ( ) ) ;
183 t ex tu re . setImage (0 , image ) ;
184 app . setTexture ( t ex tu re ) ;
185 return app ;
186 }
187 public Appearance c reaApar i enc ia3 ( ) {
188 Appearance app=new Appearance ( ) ;
189 PolygonAttr ibutes po lyAtt r ib = new PolygonAttr ibutes ( ) ;
190 po lyAtt r ib . s e tCul lFace ( PolygonAttr ibutes .CULL NONE) ;
191 app . s e tPo lygonAtt r ibute s ( po lyAtt r ib ) ;
192 TexCoordGeneration texCoord = new TexCoordGeneration ( TexCoordGeneration
.OBJECT LINEAR, TexCoordGeneration .TEXTURE COORDINATE 3) ;
193 app . setTexCoordGeneration ( texCoord ) ;
194 St r ing nomArch=” p i e l 2 . jpg ” ;
195 TextureLoader l oade r=new TextureLoader (nomArch , this ) ;
196 ImageComponent2D image=loade r . getImage ( ) ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
142 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
197 i f ( image==null )
198 System . out . p r i n t l n ( ”Error a l cargar l a textura ” ) ;
199 Texture2D texture=new Texture2D ( Texture .BASE LEVEL, Texture .RGBA, image .
getWidth ( ) , image . getHeight ( ) ) ;
200 t ex tu re . setImage (0 , image ) ;
201 app . setTexture ( t ex tu re ) ;
202 return app ;
203 }
204 public Appearance c reaApar i enc ia4 ( ) {
205 Appearance app=new Appearance ( ) ;
206 PolygonAttr ibutes po lyAtt r ib = new PolygonAttr ibutes ( ) ;
207 po lyAtt r ib . s e tCul lFace ( PolygonAttr ibutes .CULL NONE) ;
208 app . s e tPo lygonAtt r ibute s ( po lyAtt r ib ) ;
209 TexCoordGeneration texCoord = new TexCoordGeneration ( TexCoordGeneration
.OBJECT LINEAR, TexCoordGeneration .TEXTURE COORDINATE 3) ;
210 app . setTexCoordGeneration ( texCoord ) ;
211 St r ing nomArch=” p i e l 2 . jpg ” ;
212 TextureLoader l oade r=new TextureLoader (nomArch , this ) ;
213 ImageComponent2D image=loade r . getImage ( ) ;
214 i f ( image==null )
215 System . out . p r i n t l n ( ”Error a l cargar l a textura ” ) ;
216 Texture2D texture=new Texture2D ( Texture .BASE LEVEL, Texture .RGBA, image .
getWidth ( ) , image . getHeight ( ) ) ;
217 t ex tu re . setImage (0 , image ) ;
218 app . setTexture ( t ex tu re ) ;
219 return app ;
220 }
221 public Appearance c reaApar i enc ia5 ( ) {
222 Appearance app=new Appearance ( ) ;
223 PolygonAttr ibutes po lyAtt r ib = new PolygonAttr ibutes ( ) ;
224 po lyAtt r ib . s e tCul lFace ( PolygonAttr ibutes .CULL NONE) ;
225 app . s e tPo lygonAtt r ibute s ( po lyAtt r ib ) ;
226 TexCoordGeneration texCoord = new TexCoordGeneration ( TexCoordGeneration
.OBJECT LINEAR, TexCoordGeneration .TEXTURE COORDINATE 3) ;
227 app . setTexCoordGeneration ( texCoord ) ;
228 St r ing nomArch=” p i e l 2 . jpg ” ;
229 TextureLoader l oade r=new TextureLoader (nomArch , this ) ;
230 ImageComponent2D image=loade r . getImage ( ) ;
231 i f ( image==null )
232 System . out . p r i n t l n ( ”Error a l cargar l a textura ” ) ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.2. Codigos para renderizar la figura: Sofa 143
233 Texture2D texture=new Texture2D ( Texture .BASE LEVEL, Texture .RGBA, image .
getWidth ( ) , image . getHeight ( ) ) ;
234 t ex tu re . setImage (0 , image ) ;
235 app . setTexture ( t ex tu re ) ;
236 return app ;
237 }
238 public Appearance c reaApar i enc ia6 ( ) {
239 Appearance app=new Appearance ( ) ;
240 PolygonAttr ibutes po lyAtt r ib = new PolygonAttr ibutes ( ) ;
241 po lyAtt r ib . s e tCul lFace ( PolygonAttr ibutes .CULL NONE) ;
242 app . s e tPo lygonAtt r ibute s ( po lyAtt r ib ) ;
243 TexCoordGeneration texCoord = new TexCoordGeneration ( TexCoordGeneration
.OBJECT LINEAR, TexCoordGeneration .TEXTURE COORDINATE 3) ;
244 app . setTexCoordGeneration ( texCoord ) ;
245 St r ing nomArch=” p i e l 2 . jpg ” ;
246 TextureLoader l oade r=new TextureLoader (nomArch , this ) ;
247 ImageComponent2D image=loade r . getImage ( ) ;
248 i f ( image==null )
249 System . out . p r i n t l n ( ”Error a l cargar l a textura ” ) ;
250 Texture2D texture=new Texture2D ( Texture .BASE LEVEL, Texture .RGBA, image .
getWidth ( ) , image . getHeight ( ) ) ;
251 t ex tu re . setImage (0 , image ) ;
252 app . setTexture ( t ex tu re ) ;
253 return app ;
254 }
255 public Appearance c reaApar i enc ia7 ( ) {
256 Appearance app=new Appearance ( ) ;
257 PolygonAttr ibutes po lyAtt r ib = new PolygonAttr ibutes ( ) ;
258 po lyAtt r ib . s e tCul lFace ( PolygonAttr ibutes .CULL NONE) ;
259 app . s e tPo lygonAtt r ibute s ( po lyAtt r ib ) ;
260 TexCoordGeneration texCoord = new TexCoordGeneration ( TexCoordGeneration
.OBJECT LINEAR, TexCoordGeneration .TEXTURE COORDINATE 3) ;
261 app . setTexCoordGeneration ( texCoord ) ;
262 St r ing nomArch=” p i e l 2 . jpg ” ;
263 TextureLoader l oade r=new TextureLoader (nomArch , this ) ;
264 ImageComponent2D image=loade r . getImage ( ) ;
265 i f ( image==null )
266 System . out . p r i n t l n ( ”Error a l cargar l a textura ” ) ;
267 Texture2D texture=new Texture2D ( Texture .BASE LEVEL, Texture .RGBA, image .
getWidth ( ) , image . getHeight ( ) ) ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
144 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
268 t ex tu re . setImage (0 , image ) ;
269 app . setTexture ( t ex tu re ) ;
270 return app ;
271 }
272 public Appearance c reaApar i enc ia8 ( ) {
273 Appearance app=new Appearance ( ) ;
274 PolygonAttr ibutes po lyAtt r ib = new PolygonAttr ibutes ( ) ;
275 po lyAtt r ib . s e tCul lFace ( PolygonAttr ibutes .CULL NONE) ;
276 app . s e tPo lygonAtt r ibute s ( po lyAtt r ib ) ;
277 TexCoordGeneration texCoord = new TexCoordGeneration ( TexCoordGeneration
.OBJECT LINEAR, TexCoordGeneration .TEXTURE COORDINATE 3) ;
278 app . setTexCoordGeneration ( texCoord ) ;
279 St r ing nomArch=” p i e l 2 . jpg ” ;
280 TextureLoader l oade r=new TextureLoader (nomArch , this ) ;
281 ImageComponent2D image=loade r . getImage ( ) ;
282 i f ( image==null )
283 System . out . p r i n t l n ( ”Error a l cargar l a textura ” ) ;
284 Texture2D texture=new Texture2D ( Texture .BASE LEVEL, Texture .RGBA, image .
getWidth ( ) , image . getHeight ( ) ) ;
285 t ex tu re . setImage (0 , image ) ;
286 app . setTexture ( t ex tu re ) ;
287 return app ;
288 }
289
290 public Transform3D trans formac ion0 ( ) {
291 Transform3D t0=new Transform3D ( ) ;
292 t0 . rotX (1 . 5 71 ) ;
293 return t0 ;
294 }
295 public Transform3D trans formac ion1 ( ) {
296 Transform3D t0=new Transform3D ( ) ;
297 Vector3d v=new Vector3d (3 , 1 , 0 ) ;
298 t0 . s e t ( v ) ;
299 return t0 ;
300 }
301 public Transform3D trans formac ion2 ( ) {
302 Transform3D t0=new Transform3D ( ) ;
303 Vector3d v=new Vector3d ( 0 . 3 , 0 . 3 , 0 . 3 ) ;
304 t0 . s e t S c a l e ( v ) ;
305 return t0 ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.2. Codigos para renderizar la figura: Sofa 145
306 }
307 public Transform3D trans formac ion3 ( ) {
308 Transform3D t0=new Transform3D ( ) ;
309 t0 . rotX (1 . 5 71 ) ;
310 return t0 ;
311 }
312 public Transform3D trans formac ion4 ( ) {
313 Transform3D t0=new Transform3D ( ) ;
314 Vector3d v=new Vector3d (−3 ,1 ,0) ;
315 t0 . s e t ( v ) ;
316 return t0 ;
317 }
318 public Transform3D trans formac ion5 ( ) {
319 Transform3D t0=new Transform3D ( ) ;
320 Vector3d v=new Vector3d ( 0 . 3 , 0 . 3 , 0 . 3 ) ;
321 t0 . s e t S c a l e ( v ) ;
322 return t0 ;
323 }
324 public Transform3D trans formac ion6 ( ) {
325 Transform3D t0=new Transform3D ( ) ;
326 t0 . rotZ ( 1 . 5 71 ) ;
327 return t0 ;
328 }
329 public Transform3D trans formac ion7 ( ) {
330 Transform3D t0=new Transform3D ( ) ;
331 Vector3d v=new Vector3d (0 ,2 .0 ,−1) ;
332 t0 . s e t ( v ) ;
333 return t0 ;
334 }
335 public Transform3D trans formac ion8 ( ) {
336 Transform3D t0=new Transform3D ( ) ;
337 Vector3d v=new Vector3d ( 0 . 3 , 0 . 3 , 0 . 3 ) ;
338 t0 . s e t S c a l e ( v ) ;
339 return t0 ;
340 }
341 public Transform3D trans formac ion9 ( ) {
342 Transform3D t0=new Transform3D ( ) ;
343 Vector3d v=new Vector3d (0 ,0 .5 ,−1) ;
344 t0 . s e t ( v ) ;
345 return t0 ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
146 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
346 }
347 public Transform3D trans formac ion10 ( ) {
348 Transform3D t0=new Transform3D ( ) ;
349 Vector3d v=new Vector3d ( 0 . 3 , 0 . 3 , 0 . 3 ) ;
350 t0 . s e t S c a l e ( v ) ;
351 return t0 ;
352 }
353 public Transform3D trans formac ion11 ( ) {
354 Transform3D t0=new Transform3D ( ) ;
355 Vector3d v=new Vector3d ( 0 . 0 , 0 . 5 , 0 . 0 ) ;
356 t0 . s e t ( v ) ;
357 return t0 ;
358 }
359 public Transform3D trans formac ion12 ( ) {
360 Transform3D t0=new Transform3D ( ) ;
361 Vector3d v=new Vector3d ( 0 . 3 , 0 . 3 , 0 . 3 ) ;
362 t0 . s e t S c a l e ( v ) ;
363 return t0 ;
364 }
365 public Transform3D trans formac ion13 ( ) {
366 Transform3D t0=new Transform3D ( ) ;
367 Vector3d v=new Vector3d (3 , 0 , 0 ) ;
368 t0 . s e t ( v ) ;
369 return t0 ;
370 }
371 public Transform3D trans formac ion14 ( ) {
372 Transform3D t0=new Transform3D ( ) ;
373 Vector3d v=new Vector3d ( 0 . 3 , 0 . 3 , 0 . 3 ) ;
374 t0 . s e t S c a l e ( v ) ;
375 return t0 ;
376 }
377 public Transform3D trans formac ion15 ( ) {
378 Transform3D t0=new Transform3D ( ) ;
379 Vector3d v=new Vector3d (−3 ,0 ,0) ;
380 t0 . s e t ( v ) ;
381 return t0 ;
382 }
383 public Transform3D trans formac ion16 ( ) {
384 Transform3D t0=new Transform3D ( ) ;
385 Vector3d v=new Vector3d ( 0 . 3 , 0 . 3 , 0 . 3 ) ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.2. Codigos para renderizar la figura: Sofa 147
386 t0 . s e t S c a l e ( v ) ;
387 return t0 ;
388 }
389 public Transform3D trans formac ion17 ( ) {
390 Transform3D t0=new Transform3D ( ) ;
391 Vector3d v=new Vector3d ( 1 , 1 , 0 . 5 ) ;
392 t0 . s e t S c a l e ( v ) ;
393 return t0 ;
394 }
395 public Transform3D trans formac ion18 ( ) {
396 Transform3D t0=new Transform3D ( ) ;
397 Vector3d v=new Vector3d (−3 ,1 ,1) ;
398 t0 . s e t ( v ) ;
399 return t0 ;
400 }
401 public Transform3D trans formac ion19 ( ) {
402 Transform3D t0=new Transform3D ( ) ;
403 Vector3d v=new Vector3d ( 0 . 3 , 0 . 3 , 0 . 3 ) ;
404 t0 . s e t S c a l e ( v ) ;
405 return t0 ;
406 }
407 public Transform3D trans formac ion20 ( ) {
408 Transform3D t0=new Transform3D ( ) ;
409 Vector3d v=new Vector3d ( 1 , 1 , 0 . 5 ) ;
410 t0 . s e t S c a l e ( v ) ;
411 return t0 ;
412 }
413 public Transform3D trans formac ion21 ( ) {
414 Transform3D t0=new Transform3D ( ) ;
415 Vector3d v=new Vector3d (3 , 1 , 1 ) ;
416 t0 . s e t ( v ) ;
417 return t0 ;
418 }
419 public Transform3D trans formac ion22 ( ) {
420 Transform3D t0=new Transform3D ( ) ;
421 Vector3d v=new Vector3d ( 0 . 3 , 0 . 3 , 0 . 3 ) ;
422 t0 . s e t S c a l e ( v ) ;
423 return t0 ;
424 }
425
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
148 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
426 }
B.3. Codigos para renderizar la figura: Monitor de
PC
En este tercer ejemplo se muestra el codigo de entrada en VRML y el codigo de
salida en Java 3D, para representar un monitor de computadora, el cual esta formado
por varias figuras regulares con traslaciones, rotaciones y escalamiento. La renderizacion
en Java 3D tiene mejor presentacion y esta se resalta en la pantalla del monitor.
B.3.1. Codigo de entrada al Traductor VRML a Java 3D. Ar-
chivo: MonitorPC.wrl
1 #VRML V2.0 u t f 8
2 Transform {
3 s c a l e 0 . 2 0 .2 0 .2
4 ch i l d r en [
5 Transform{
6 s c a l e 1 1 .25
7 ch i l d r en [
8 Transform{
9 r o t a t i on 1 0 0 −0.087
10 ch i l d r en [
11 Shape{
12 geometry Sphere{
13 rad iu s 2
14 }
15 appearance Appearance{
16 mate r i a l Material{
17 d i f f u s eCo l o r . 3 . 2 1
18 }
19 }
20 }
21 ]
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.3. Codigos para renderizar la figura: Monitor de PC 149
22 }
23 ]
24 }
25 ]
26 }
27 Transform {
28 s c a l e 0 . 2 0 .2 0 .2
29 ch i l d r en [
30 Transform{
31 t r a n s l a t i o n 1 .707 0 0
32 ch i l d r en [
33 Shape{
34 geometry Box{
35 s i z e 0 .586 4 1
36 }
37 appearance Appearance{
38 mate r i a l Material{
39 d i f f u s eCo l o r 0 . 8 0 .8 0 .8
40 }
41 }
42 }
43 ]
44 }
45 ]
46 }
47 Transform {
48 s c a l e 0 . 2 0 .2 0 .2
49 ch i l d r en [
50 Transform{
51 t r a n s l a t i o n −1.707 0 0
52 ch i l d r en [
53 Shape{
54 geometry Box{
55 s i z e .586 4 1
56 }
57 appearance Appearance{
58 mate r i a l Material{
59 d i f f u s eCo l o r . 8 . 8 . 8
60 }
61 }
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
150 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
62 }
63 ]
64 }
65 ]
66 }
67 Transform {
68 s c a l e 0 . 2 0 .2 0 .2
69 ch i l d r en [
70 Transform{
71 t r a n s l a t i o n 0 1 .707 0
72 ch i l d r en [
73 Shape{
74 geometry Box{
75 s i z e 4 0 .586 1
76 }
77 appearance Appearance{
78 mate r i a l Material{
79 d i f f u s eCo l o r 0 . 8 0 .8 0 .8
80 }
81 }
82 }
83 ]
84 }
85 ]
86 }
87 Transform {
88 s c a l e 0 . 2 0 .2 0 .2
89 ch i l d r en [
90 Transform{
91 t r a n s l a t i o n 0 −1.707 0
92 ch i l d r en [
93 Shape {
94 geometry Box{
95 s i z e 4 0 .586 1
96 }
97 appearance Appearance{
98 mate r i a l Material{
99 d i f f u s eCo l o r 0 . 8 0 .8 0 .8
100 }
101 }
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.3. Codigos para renderizar la figura: Monitor de PC 151
102 }
103 ]
104 }
105 ]
106 }
107 Transform {
108 s c a l e 0 . 2 0 .2 0 .2
109 ch i l d r en [
110 Transform{
111 t r a n s l a t i o n 0 −0.17 −1.914
112 ch i l d r en [
113 Shape{
114 geometry Box{
115 s i z e 2 .828 2 .828 2 .828
116 }
117 appearance Appearance{
118 mate r i a l Material{
119 d i f f u s eCo l o r 0 . 8 0 .8 0 .8
120 }
121 }
122 }
123 ]
124 }
125 ]
126 }
127 Transform {
128 r o t a t i on 1 0 0 0 .087
129 ch i l d r en [
130 Transform{
131 s c a l e 0 . 2 0 .2 0 .2
132 ch i l d r en [
133 Transform{
134 t r a n s l a t i o n 0 −1.17 −1.914
135 ch i l d r en [
136 Shape{
137 geometry Cone{
138 bottomRadius 1 .5 he ight 2
139 }
140 appearance Appearance{
141 mate r i a l Material{
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
152 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
142 d i f f u s eCo l o r 0 . 8 0 .8 0 .8
143 }
144 }
145 }
146 ]
147 }
148 ]
149 }
150 ]
151 }
152 Transform {
153 s c a l e 0 . 2 0 .2 0 .2
154 ch i l d r en [
155 Transform{
156 t r a n s l a t i o n 0 −2.375 −1.914
157 ch i l d r en [
158 Shape{
159 geometry Box{
160 s i z e 3 .25 3
161 }
162 appearance Appearance{
163 mate r i a l Material{
164 d i f f u s eCo l o r 0 . 8 0 .8 0 .8
165 }
166 }
167 }
168 ]
169 }
170 ]
171 }
B.3.2. Codigo de salida del Traductor VRML a Java 3D. Ar-
chivo: MonitorPC.java
1 import javax . swing . JFrame ;
2 import java . awt . BorderLayout ;
3 import java . awt . Frame ;
4 import java . awt . event .WindowEvent ;
5 import java . awt . event . WindowListener ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.3. Codigos para renderizar la figura: Monitor de PC 153
6 import java . awt . GraphicsConf igurat ion ;
7 import com . sun . j3d . u t i l s . image . TextureLoader ;
8 import com . sun . j3d . u t i l s . un ive r s e . S impleUniverse ;
9 import com . sun . j3d . u t i l s . geometry . ∗ ;
10 import javax . media . j3d . ∗ ;
11 import javax . vecmath . Co lor3 f ;
12 import javax . vecmath . Vector3d ;
13 import com . sun . j3d . u t i l s . behav ior s . vp . ∗ ;
14 import javax . vecmath . Point3d ;
15 import javax . vecmath . Po int3 f ;
16 import javax . vecmath . Co lor3 f ;
17 import javax . vecmath . ∗ ;
18
19 public class MonitorPC extends JFrame {
20 public MonitorPC ( ) {
21 setLayout (new BorderLayout ( ) ) ;
22 GraphicsConf igurat ion con f i g = SimpleUniverse . g e tPr e f e r r edCon f i gu ra t i on
( ) ;
23 Canvas3D canvas = new Canvas3D( con f i g ) ;
24 add ( ”Center ” , canvas ) ;
25 BranchGroup escena = createSceneGraph ( ) ;
26 SimpleUniverse simpleU = new SimpleUniverse ( canvas ) ;
27 simpleU . getViewingPlatform ( ) . setNominalViewingTransform ( ) ;
28 simpleU . addBranchGraph ( escena ) ;
29 // l a s t r e s l i n e a s s i g u i e n t e s h a b i l i t a n l a navigac ion de l a escena
usando e l raton .
30 OrbitBehavior ob = new OrbitBehavior ( canvas ) ;
31 ob . setSchedul ingBounds (new BoundingSphere (new Point3d ( 0 . 0 , 0 . 0 , 0 . 0 ) ,
Double .MAXVALUE) ) ;
32 simpleU . getViewingPlatform ( ) . setViewPlatformBehavior ( ob ) ;
33 }
34
35
36 public stat ic void main ( St r ing args [ ] ) {
37 MonitorPC frame = new MonitorPC ( ) ;
38 frame . s e tDe fau l tC lo seOperat ion ( JFrame .EXIT ON CLOSE) ;
39 frame . s e t S i z e (300 , 300) ;
40 frame . s e tV i s i b l e ( true ) ;
41 }
42
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
154 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
43 public BranchGroup createSceneGraph ( ) {
44 BranchGroup r a i z = new BranchGroup ( ) ;
45 BoundingSphere bounds = new BoundingSphere (new Point3d ( ) , Double .
MAXVALUE) ;
46 Di r e c t i ona lL i gh t l 1 =
47 new Di r e c t i ona lL i gh t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,
48 new Vector3 f (1 f , 0 . 0 f , −0.4 f ) ) ;
49 l 1 . s e t In f luenc ingBounds ( bounds ) ;
50 r a i z . addChild ( l 1 ) ;
51 Di r e c t i ona lL i gh t l 2 =
52 new Di r e c t i ona lL i gh t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,
53 new Vector3 f (−1 f , 0 . 0 f , −0.4 f ) ) ;
54 l 2 . s e t In f luenc ingBounds ( bounds ) ;
55 r a i z . addChild ( l 2 ) ;
56 Di r e c t i ona lL i gh t l 3 =
57 new Di r e c t i ona lL i gh t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,
58 new Vector3 f (0 f , 1 . 0 f , −0.4 f ) ) ;
59 l 3 . s e t In f luenc ingBounds ( bounds ) ;
60 r a i z . addChild ( l 3 ) ;
61 Di r e c t i ona lL i gh t l 4 =
62 new Di r e c t i ona lL i gh t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,
63 new Vector3 f (0 f , −1.0 f , −0.4 f ) ) ;
64 l 4 . s e t In f luenc ingBounds ( bounds ) ;
65 r a i z . addChild ( l 4 ) ;
66 Sphere sphere0= new Sphere (2 f , c r eaApar i enc ia0 ( ) ) ;
67 Box box1= new Box (0 . 293 f , 2 . 0 f , 0 . 5 f , c r eaApar i enc ia1 ( ) ) ;
68 Box box2= new Box (0 . 293 f , 2 . 0 f , 0 . 5 f , c r eaApar i enc ia2 ( ) ) ;
69 Box box3= new Box ( 2 . 0 f , 0 . 2 9 3 f , 0 . 5 f , c r eaApar i enc ia3 ( ) ) ;
70 Box box4= new Box ( 2 . 0 f , 0 . 2 9 3 f , 0 . 5 f , c r eaApar i enc ia4 ( ) ) ;
71 Box box5= new Box (1 . 414 f , 1 . 4 1 4 f , 1 . 4 1 4 f , c r eaApar i enc ia5 ( ) ) ;
72 Cone cone6= new Cone ( 1 . 5 f , 2 f , c r eaApar i enc ia6 ( ) ) ;
73 Box box7= new Box ( 1 . 5 f , 0 . 1 2 5 f , 1 . 5 f , c r eaApar i enc ia7 ( ) ) ;
74
75 TransformGroup tg0=new TransformGroup ( t rans formac ion0 ( ) ) ;
76 tg0 . addChild ( sphere0 ) ;
77 TransformGroup tg1=new TransformGroup ( t rans formac ion1 ( ) ) ;
78 tg1 . addChild ( tg0 ) ;
79 TransformGroup tg2=new TransformGroup ( t rans formac ion2 ( ) ) ;
80 tg2 . addChild ( tg1 ) ;
81 TransformGroup tg3=new TransformGroup ( t rans formac ion3 ( ) ) ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.3. Codigos para renderizar la figura: Monitor de PC 155
82 tg3 . addChild ( box1 ) ;
83 TransformGroup tg4=new TransformGroup ( t rans formac ion4 ( ) ) ;
84 tg4 . addChild ( tg3 ) ;
85 TransformGroup tg5=new TransformGroup ( t rans formac ion5 ( ) ) ;
86 tg5 . addChild ( box2 ) ;
87 TransformGroup tg6=new TransformGroup ( t rans formac ion6 ( ) ) ;
88 tg6 . addChild ( tg5 ) ;
89 TransformGroup tg7=new TransformGroup ( t rans formac ion7 ( ) ) ;
90 tg7 . addChild ( box3 ) ;
91 TransformGroup tg8=new TransformGroup ( t rans formac ion8 ( ) ) ;
92 tg8 . addChild ( tg7 ) ;
93 TransformGroup tg9=new TransformGroup ( t rans formac ion9 ( ) ) ;
94 tg9 . addChild ( box4 ) ;
95 TransformGroup tg10=new TransformGroup ( trans formac ion10 ( ) ) ;
96 tg10 . addChild ( tg9 ) ;
97 TransformGroup tg11=new TransformGroup ( trans formac ion11 ( ) ) ;
98 tg11 . addChild ( box5 ) ;
99 TransformGroup tg12=new TransformGroup ( trans formac ion12 ( ) ) ;
100 tg12 . addChild ( tg11 ) ;
101 TransformGroup tg13=new TransformGroup ( trans formac ion13 ( ) ) ;
102 tg13 . addChild ( cone6 ) ;
103 TransformGroup tg14=new TransformGroup ( trans formac ion14 ( ) ) ;
104 tg14 . addChild ( tg13 ) ;
105 TransformGroup tg16=new TransformGroup ( trans formac ion16 ( ) ) ;
106 tg16 . addChild ( box7 ) ;
107 TransformGroup tg17=new TransformGroup ( trans formac ion17 ( ) ) ;
108 tg17 . addChild ( tg16 ) ;
109 r a i z . addChild ( tg2 ) ;
110 r a i z . addChild ( tg4 ) ;
111 r a i z . addChild ( tg6 ) ;
112 r a i z . addChild ( tg8 ) ;
113 r a i z . addChild ( tg10 ) ;
114 r a i z . addChild ( tg12 ) ;
115 r a i z . addChild ( tg14 ) ;
116 r a i z . addChild ( tg17 ) ;
117
118 r a i z . compi le ( ) ;
119 return r a i z ;
120 }
121
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
156 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
122 public Appearance c reaApar i enc ia0 ( ) {
123 Appearance app=new Appearance ( ) ;
124 Color3 f c o l o r=new Color3 f ( . 3 f , . 2 f , 1 f ) ;
125 Mater ia l mate r i a l=new Mater ia l ( ) ;
126 mate r i a l . s e tD i f f u s eCo l o r ( c o l o r ) ;
127 mate r i a l . s e tSpecu la rCo lo r ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ) ;
128 mate r i a l . s e t Sh i n i n e s s ( 30 . 0 f ) ;
129 app . s e tMat e r i a l ( mate r i a l ) ;
130 return app ;
131 }
132 public Appearance c reaApar i enc ia1 ( ) {
133 Appearance app=new Appearance ( ) ;
134 Color3 f c o l o r=new Color3 f ( 0 . 8 f , 0 . 8 f , 0 . 8 f ) ;
135 Mater ia l mate r i a l=new Mater ia l ( ) ;
136 mate r i a l . s e tD i f f u s eCo l o r ( c o l o r ) ;
137 mate r i a l . s e tSpecu la rCo lo r ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ) ;
138 mate r i a l . s e t Sh i n i n e s s ( 30 . 0 f ) ;
139 app . s e tMat e r i a l ( mate r i a l ) ;
140 return app ;
141 }
142 public Appearance c reaApar i enc ia2 ( ) {
143 Appearance app=new Appearance ( ) ;
144 Color3 f c o l o r=new Color3 f ( . 8 f , . 8 f , . 8 f ) ;
145 Mater ia l mate r i a l=new Mater ia l ( ) ;
146 mate r i a l . s e tD i f f u s eCo l o r ( c o l o r ) ;
147 mate r i a l . s e tSpecu la rCo lo r ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ) ;
148 mate r i a l . s e t Sh i n i n e s s ( 30 . 0 f ) ;
149 app . s e tMat e r i a l ( mate r i a l ) ;
150 return app ;
151 }
152 public Appearance c reaApar i enc ia3 ( ) {
153 Appearance app=new Appearance ( ) ;
154 Color3 f c o l o r=new Color3 f ( 0 . 8 f , 0 . 8 f , 0 . 8 f ) ;
155 Mater ia l mate r i a l=new Mater ia l ( ) ;
156 mate r i a l . s e tD i f f u s eCo l o r ( c o l o r ) ;
157 mate r i a l . s e tSpecu la rCo lo r ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ) ;
158 mate r i a l . s e t Sh i n i n e s s ( 30 . 0 f ) ;
159 app . s e tMat e r i a l ( mate r i a l ) ;
160 return app ;
161 }
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.3. Codigos para renderizar la figura: Monitor de PC 157
162 public Appearance c reaApar i enc ia4 ( ) {
163 Appearance app=new Appearance ( ) ;
164 Color3 f c o l o r=new Color3 f ( 0 . 8 f , 0 . 8 f , 0 . 8 f ) ;
165 Mater ia l mate r i a l=new Mater ia l ( ) ;
166 mate r i a l . s e tD i f f u s eCo l o r ( c o l o r ) ;
167 mate r i a l . s e tSpecu la rCo lo r ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ) ;
168 mate r i a l . s e t Sh i n i n e s s ( 30 . 0 f ) ;
169 app . s e tMat e r i a l ( mate r i a l ) ;
170 return app ;
171 }
172 public Appearance c reaApar i enc ia5 ( ) {
173 Appearance app=new Appearance ( ) ;
174 Color3 f c o l o r=new Color3 f ( 0 . 8 f , 0 . 8 f , 0 . 8 f ) ;
175 Mater ia l mate r i a l=new Mater ia l ( ) ;
176 mate r i a l . s e tD i f f u s eCo l o r ( c o l o r ) ;
177 mate r i a l . s e tSpecu la rCo lo r ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ) ;
178 mate r i a l . s e t Sh i n i n e s s ( 30 . 0 f ) ;
179 app . s e tMat e r i a l ( mate r i a l ) ;
180 return app ;
181 }
182 public Appearance c reaApar i enc ia6 ( ) {
183 Appearance app=new Appearance ( ) ;
184 Color3 f c o l o r=new Color3 f ( 0 . 8 f , 0 . 8 f , 0 . 8 f ) ;
185 Mater ia l mate r i a l=new Mater ia l ( ) ;
186 mate r i a l . s e tD i f f u s eCo l o r ( c o l o r ) ;
187 mate r i a l . s e tSpecu la rCo lo r ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ) ;
188 mate r i a l . s e t Sh i n i n e s s ( 30 . 0 f ) ;
189 app . s e tMat e r i a l ( mate r i a l ) ;
190 return app ;
191 }
192 public Appearance c reaApar i enc ia7 ( ) {
193 Appearance app=new Appearance ( ) ;
194 Color3 f c o l o r=new Color3 f ( 0 . 8 f , 0 . 8 f , 0 . 8 f ) ;
195 Mater ia l mate r i a l=new Mater ia l ( ) ;
196 mate r i a l . s e tD i f f u s eCo l o r ( c o l o r ) ;
197 mate r i a l . s e tSpecu la rCo lo r ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ) ;
198 mate r i a l . s e t Sh i n i n e s s ( 30 . 0 f ) ;
199 app . s e tMat e r i a l ( mate r i a l ) ;
200 return app ;
201 }
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
158 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
202
203 public Transform3D trans formac ion0 ( ) {
204 Transform3D t0=new Transform3D ( ) ;
205 t0 . rotX (−0.087) ;
206 return t0 ;
207 }
208 public Transform3D trans formac ion1 ( ) {
209 Transform3D t0=new Transform3D ( ) ;
210 Vector3d v=new Vector3d ( 1 , 1 , . 2 5 ) ;
211 t0 . s e t S c a l e ( v ) ;
212 return t0 ;
213 }
214 public Transform3D trans formac ion2 ( ) {
215 Transform3D t0=new Transform3D ( ) ;
216 Vector3d v=new Vector3d ( 0 . 2 , 0 . 2 , 0 . 2 ) ;
217 t0 . s e t S c a l e ( v ) ;
218 return t0 ;
219 }
220 public Transform3D trans formac ion3 ( ) {
221 Transform3D t0=new Transform3D ( ) ;
222 Vector3d v=new Vector3d (1 . 7 07 , 0 , 0 ) ;
223 t0 . s e t ( v ) ;
224 return t0 ;
225 }
226 public Transform3D trans formac ion4 ( ) {
227 Transform3D t0=new Transform3D ( ) ;
228 Vector3d v=new Vector3d ( 0 . 2 , 0 . 2 , 0 . 2 ) ;
229 t0 . s e t S c a l e ( v ) ;
230 return t0 ;
231 }
232 public Transform3D trans formac ion5 ( ) {
233 Transform3D t0=new Transform3D ( ) ;
234 Vector3d v=new Vector3d (−1.707 ,0 ,0) ;
235 t0 . s e t ( v ) ;
236 return t0 ;
237 }
238 public Transform3D trans formac ion6 ( ) {
239 Transform3D t0=new Transform3D ( ) ;
240 Vector3d v=new Vector3d ( 0 . 2 , 0 . 2 , 0 . 2 ) ;
241 t0 . s e t S c a l e ( v ) ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.3. Codigos para renderizar la figura: Monitor de PC 159
242 return t0 ;
243 }
244 public Transform3D trans formac ion7 ( ) {
245 Transform3D t0=new Transform3D ( ) ;
246 Vector3d v=new Vector3d (0 , 1 . 7 07 , 0 ) ;
247 t0 . s e t ( v ) ;
248 return t0 ;
249 }
250 public Transform3D trans formac ion8 ( ) {
251 Transform3D t0=new Transform3D ( ) ;
252 Vector3d v=new Vector3d ( 0 . 2 , 0 . 2 , 0 . 2 ) ;
253 t0 . s e t S c a l e ( v ) ;
254 return t0 ;
255 }
256 public Transform3D trans formac ion9 ( ) {
257 Transform3D t0=new Transform3D ( ) ;
258 Vector3d v=new Vector3d (0 ,−1.707 ,0) ;
259 t0 . s e t ( v ) ;
260 return t0 ;
261 }
262 public Transform3D trans formac ion10 ( ) {
263 Transform3D t0=new Transform3D ( ) ;
264 Vector3d v=new Vector3d ( 0 . 2 , 0 . 2 , 0 . 2 ) ;
265 t0 . s e t S c a l e ( v ) ;
266 return t0 ;
267 }
268 public Transform3D trans formac ion11 ( ) {
269 Transform3D t0=new Transform3D ( ) ;
270 Vector3d v=new Vector3d (0 ,−0.17 ,−1.914) ;
271 t0 . s e t ( v ) ;
272 return t0 ;
273 }
274 public Transform3D trans formac ion12 ( ) {
275 Transform3D t0=new Transform3D ( ) ;
276 Vector3d v=new Vector3d ( 0 . 2 , 0 . 2 , 0 . 2 ) ;
277 t0 . s e t S c a l e ( v ) ;
278 return t0 ;
279 }
280 public Transform3D trans formac ion13 ( ) {
281 Transform3D t0=new Transform3D ( ) ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
160 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
282 Vector3d v=new Vector3d (0 ,−1.17 ,−1.914) ;
283 t0 . s e t ( v ) ;
284 return t0 ;
285 }
286 public Transform3D trans formac ion14 ( ) {
287 Transform3D t0=new Transform3D ( ) ;
288 Vector3d v=new Vector3d ( 0 . 2 , 0 . 2 , 0 . 2 ) ;
289 t0 . s e t S c a l e ( v ) ;
290 return t0 ;
291 }
292 public Transform3D trans formac ion15 ( ) {
293 Transform3D t0=new Transform3D ( ) ;
294 t0 . rotX (0 . 0 87 ) ;
295 return t0 ;
296 }
297 public Transform3D trans formac ion16 ( ) {
298 Transform3D t0=new Transform3D ( ) ;
299 Vector3d v=new Vector3d (0 ,−2.375 ,−1.914) ;
300 t0 . s e t ( v ) ;
301 return t0 ;
302 }
303 public Transform3D trans formac ion17 ( ) {
304 Transform3D t0=new Transform3D ( ) ;
305 Vector3d v=new Vector3d ( 0 . 2 , 0 . 2 , 0 . 2 ) ;
306 t0 . s e t S c a l e ( v ) ;
307 return t0 ;
308 }
309
310 }
B.4. Codigos para renderizar la figura: Florero con
traslacion y textura
En este ejemplo se muestra el codigo de entrada en VRML y el codigo de salida en
Java 3D, para representar un florero con traslacion y que ademas contiene textura. Esta
figura esta formada por muchas areas para darle forma al florero. Se uso el IndexeFaceSet
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.4. Codigos para renderizar la figura: Florero con traslacion y textura 161
debido a la irregularidad del objeto y se uso una textura. Como se puede observar los
colores son mas vivos y nıtidos en la renderizacion en Java 3D. La desventaja es el tiempo
que tarda en aparecer la imagen en Java 3D, debido a la cantidad de procesamiento que
consume.
B.4.1. Codigo de entrada al Traductor VRML a Java 3D. Ar-
chivo: FloreroTrasladado1.wrl
1 #VRML V2.0 u t f 8
2 Transform {
3 t r a n s l a t i o n 0 .0 −1.0 −4.0
4 ch i l d r en [
5 Shape {
6 geometry IndexedFaceSet {
7 coord Coordinate {
8 point [
9 0 .32 2 0 ,
10 0 .1 2 0 . 3 ,
11 −0.26 2 0 . 19 ,
12 −0.26 2 −0.19 ,
13 0 .1 2 −0.3 ,
14 0 .3 1 .95 0 ,
15 0 .09 1 .95 0 . 29 ,
16 −0.24 1 .95 0 . 18 ,
17 −0.24 1 .95 −0.18 ,
18 0 .09 1 .95 −0.29 ,
19 0 .42 1 .6 0 ,
20 0 .13 1 .6 0 . 4 ,
21 −0.34 1 .6 0 . 25 ,
22 −0.34 1 .6 −0.25 ,
23 0 .13 1 .6 −0.4 ,
24 0 .6 1 .5 0 ,
25 0 .19 1 .5 0 . 57 ,
26 −0.48 1 .5 0 . 35 ,
27 −0.49 1 .5 −0.35 ,
28 0 .18 1 .5 −0.57 ,
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
162 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
29 0 .7 1 .2 0 ,
30 0 .22 1 .2 0 . 67 ,
31 −0.57 1 .2 0 . 41 ,
32 −0.57 1 .2 −0.41 ,
33 0 .21 1 .2 −0.67 ,
34 0 .4 0 0 ,
35 0 .12 0 0 . 38 ,
36 −0.32 0 0 . 24 ,
37 −0.32 0 −0.23 ,
38 0 .12 0 −0.38
39 ]
40 }
41 coordIndex [
42 0 ,1 ,6 ,5 ,−1 ,
43 1 ,2 ,7 ,6 ,−1 ,
44 2 ,3 ,8 ,7 ,−1 ,
45 3 ,4 ,9 ,8 ,−1 ,
46 4 ,0 ,5 ,9 ,−1 ,
47 5 ,6 ,11 ,10 ,−1 ,
48 6 ,7 ,12 ,11 ,−1 ,
49 7 ,8 ,13 ,12 ,−1 ,
50 8 ,9 ,14 ,13 ,−1 ,
51 9 ,5 ,10 ,14 ,−1 ,
52 10 ,11 ,16 ,15 ,−1 ,
53 11 ,12 ,17 ,16 ,−1 ,
54 12 ,13 ,18 ,17 ,−1 ,
55 13 ,14 ,19 ,18 ,−1 ,
56 14 ,10 ,15 ,19 ,−1 ,
57 15 ,16 ,21 ,20 ,−1 ,
58 16 ,17 ,22 ,21 ,−1 ,
59 17 ,18 ,23 ,22 ,−1 ,
60 18 ,19 ,24 ,23 ,−1 ,
61 19 ,15 ,20 ,24 ,−1 ,
62 20 ,21 ,26 ,25 ,−1 ,
63 21 ,22 ,27 ,26 ,−1 ,
64 22 ,23 ,28 ,27 ,−1 ,
65 23 ,24 ,29 ,28 ,−1 ,
66 24 ,20 ,25 ,29 ,−1 ,
67 25 ,26 ,27 ,28 ,−1
68 ]
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.4. Codigos para renderizar la figura: Florero con traslacion y textura 163
69 }
70 appearance Appearance {
71 t ex tu re ImageTexture {
72 u r l ” l a d r i l l o 1 . jpg ”
73 }
74 }
75 }
76 ]
77 }
B.4.2. Codigo de salida del Traductor VRML a Java 3D. Ar-
chivo: FloreroTrasladado1.java
1 import javax . swing . JFrame ;
2 import java . awt . BorderLayout ;
3 import java . awt . Frame ;
4 import java . awt . event .WindowEvent ;
5 import java . awt . event . WindowListener ;
6 import java . awt . GraphicsConf igurat ion ;
7 import com . sun . j3d . u t i l s . image . TextureLoader ;
8 import com . sun . j3d . u t i l s . un ive r s e . S impleUniverse ;
9 import com . sun . j3d . u t i l s . geometry . ∗ ;
10 import javax . media . j3d . ∗ ;
11 import javax . vecmath . Co lor3 f ;
12 import javax . vecmath . Vector3d ;
13 import com . sun . j3d . u t i l s . behav ior s . vp . ∗ ;
14 import javax . vecmath . Point3d ;
15 import javax . vecmath . Po int3 f ;
16 import javax . vecmath . Co lor3 f ;
17 import javax . vecmath . ∗ ;
18
19 public class FloreroTras ladado1 extends JFrame {
20 public FloreroTras ladado1 ( ) {
21 setLayout (new BorderLayout ( ) ) ;
22 GraphicsConf igurat ion c on f i g = SimpleUniverse . g e tPr e f e r r edCon f i gu ra t i on
( ) ;
23 Canvas3D canvas = new Canvas3D( con f i g ) ;
24 add ( ”Center ” , canvas ) ;
25 BranchGroup escena = createSceneGraph ( ) ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
164 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
26 SimpleUniverse simpleU = new SimpleUniverse ( canvas ) ;
27 simpleU . getViewingPlatform ( ) . setNominalViewingTransform ( ) ;
28 simpleU . addBranchGraph ( escena ) ;
29 // l a s t r e s l i n e a s s i g u i e n t e s h a b i l i t a n l a navigac ion de l a escena
usando e l raton .
30 OrbitBehavior ob = new OrbitBehavior ( canvas ) ;
31 ob . setSchedul ingBounds (new BoundingSphere (new Point3d ( 0 . 0 , 0 . 0 , 0 . 0 ) ,
Double .MAXVALUE) ) ;
32 simpleU . getViewingPlatform ( ) . setViewPlatformBehavior ( ob ) ;
33 }
34
35
36 public stat ic void main ( St r ing args [ ] ) {
37 FloreroTras ladado1 frame = new FloreroTras ladado1 ( ) ;
38 frame . s e tDe fau l tC lo seOperat ion ( JFrame .EXIT ON CLOSE) ;
39 frame . s e t S i z e (300 , 300) ;
40 frame . s e tV i s i b l e ( true ) ;
41 }
42
43 public BranchGroup createSceneGraph ( ) {
44 BranchGroup r a i z = new BranchGroup ( ) ;
45 BoundingSphere bounds = new BoundingSphere (new Point3d ( ) , Double .
MAXVALUE) ;
46 Di r e c t i ona lL i gh t l 1 =
47 new Di r e c t i ona lL i gh t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,
48 new Vector3 f (1 f , 0 . 0 f , −0.4 f ) ) ;
49 l 1 . s e t In f luenc ingBounds ( bounds ) ;
50 r a i z . addChild ( l 1 ) ;
51 Di r e c t i ona lL i gh t l 2 =
52 new Di r e c t i ona lL i gh t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,
53 new Vector3 f (−1 f , 0 . 0 f , −0.4 f ) ) ;
54 l 2 . s e t In f luenc ingBounds ( bounds ) ;
55 r a i z . addChild ( l 2 ) ;
56 Di r e c t i ona lL i gh t l 3 =
57 new Di r e c t i ona lL i gh t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,
58 new Vector3 f (0 f , 1 . 0 f , −0.4 f ) ) ;
59 l 3 . s e t In f luenc ingBounds ( bounds ) ;
60 r a i z . addChild ( l 3 ) ;
61 Di r e c t i ona lL i gh t l 4 =
62 new Di r e c t i ona lL i gh t ( new Color3 f ( 1 . 0 f , 1 . 0 f , 1 . 0 f ) ,
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.4. Codigos para renderizar la figura: Florero con traslacion y textura 165
63 new Vector3 f (0 f , −1.0 f , −0.4 f ) ) ;
64 l 4 . s e t In f luenc ingBounds ( bounds ) ;
65 r a i z . addChild ( l 4 ) ;
66
67 QuadArray indexed f a c e s e t 0=new QuadArray (4 , QuadArray .COORDINATES) ;
68 i ndexed f a c e s e t 0 . s e tCoord inate (0 , new Point3 f ( 0 . 32 f , 2 f , 0 f ) ) ;
69 i ndexed f a c e s e t 0 . s e tCoord inate (1 , new Point3 f ( 0 . 1 f , 2 f , 0 . 3 f ) ) ;
70 i ndexed f a c e s e t 0 . s e tCoord inate (2 , new Point3 f ( 0 . 09 f , 1 . 9 5 f , 0 . 2 9 f ) ) ;
71 i ndexed f a c e s e t 0 . s e tCoord inate (3 , new Point3 f ( 0 . 3 f , 1 . 9 5 f , 0 f ) ) ;
72
73 QuadArray indexed f a c e s e t 1=new QuadArray (4 , QuadArray .COORDINATES) ;
74 i ndexed f a c e s e t 1 . s e tCoord inate (0 , new Point3 f ( 0 . 1 f , 2 f , 0 . 3 f ) ) ;
75 i ndexed f a c e s e t 1 . s e tCoord inate (1 , new Point3 f (−0.26 f , 2 f , 0 . 1 9 f ) ) ;
76 i ndexed f a c e s e t 1 . s e tCoord inate (2 , new Point3 f (−0.24 f , 1 . 9 5 f , 0 . 1 8 f ) ) ;
77 i ndexed f a c e s e t 1 . s e tCoord inate (3 , new Point3 f ( 0 . 09 f , 1 . 9 5 f , 0 . 2 9 f ) ) ;
78
79 QuadArray indexed f a c e s e t 2=new QuadArray (4 , QuadArray .COORDINATES) ;
80 i ndexed f a c e s e t 2 . s e tCoord inate (0 , new Point3 f (−0.26 f , 2 f , 0 . 1 9 f ) ) ;
81 i ndexed f a c e s e t 2 . s e tCoord inate (1 , new Point3 f (−0.26 f , 2 f ,−0.19 f ) ) ;
82 i ndexed f a c e s e t 2 . s e tCoord inate (2 , new Point3 f (−0.24 f , 1 . 9 5 f ,−0.18 f ) ) ;
83 i ndexed f a c e s e t 2 . s e tCoord inate (3 , new Point3 f (−0.24 f , 1 . 9 5 f , 0 . 1 8 f ) ) ;
84
85 QuadArray indexed f a c e s e t 3=new QuadArray (4 , QuadArray .COORDINATES) ;
86 i ndexed f a c e s e t 3 . s e tCoord inate (0 , new Point3 f (−0.26 f , 2 f ,−0.19 f ) ) ;
87 i ndexed f a c e s e t 3 . s e tCoord inate (1 , new Point3 f ( 0 . 1 f , 2 f ,−0.3 f ) ) ;
88 i ndexed f a c e s e t 3 . s e tCoord inate (2 , new Point3 f ( 0 . 09 f , 1 . 9 5 f ,−0.29 f ) ) ;
89 i ndexed f a c e s e t 3 . s e tCoord inate (3 , new Point3 f (−0.24 f , 1 . 9 5 f ,−0.18 f ) ) ;
90
91 QuadArray indexed f a c e s e t 4=new QuadArray (4 , QuadArray .COORDINATES) ;
92 i ndexed f a c e s e t 4 . s e tCoord inate (0 , new Point3 f ( 0 . 1 f , 2 f ,−0.3 f ) ) ;
93 i ndexed f a c e s e t 4 . s e tCoord inate (1 , new Point3 f ( 0 . 32 f , 2 f , 0 f ) ) ;
94 i ndexed f a c e s e t 4 . s e tCoord inate (2 , new Point3 f ( 0 . 3 f , 1 . 9 5 f , 0 f ) ) ;
95 i ndexed f a c e s e t 4 . s e tCoord inate (3 , new Point3 f ( 0 . 09 f , 1 . 9 5 f ,−0.29 f ) ) ;
96
97 QuadArray indexed f a c e s e t 5=new QuadArray (4 , QuadArray .COORDINATES) ;
98 i ndexed f a c e s e t 5 . s e tCoord inate (0 , new Point3 f ( 0 . 3 f , 1 . 9 5 f , 0 f ) ) ;
99 i ndexed f a c e s e t 5 . s e tCoord inate (1 , new Point3 f ( 0 . 09 f , 1 . 9 5 f , 0 . 2 9 f ) ) ;
100 i ndexed f a c e s e t 5 . s e tCoord inate (2 , new Point3 f ( 0 . 13 f , 1 . 6 f , 0 . 4 f ) ) ;
101 i ndexed f a c e s e t 5 . s e tCoord inate (3 , new Point3 f ( 0 . 42 f , 1 . 6 f , 0 f ) ) ;
102
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
166 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
103 QuadArray indexed f a c e s e t 6=new QuadArray (4 , QuadArray .COORDINATES) ;
104 i ndexed f a c e s e t 6 . s e tCoord inate (0 , new Point3 f ( 0 . 09 f , 1 . 9 5 f , 0 . 2 9 f ) ) ;
105 i ndexed f a c e s e t 6 . s e tCoord inate (1 , new Point3 f (−0.24 f , 1 . 9 5 f , 0 . 1 8 f ) ) ;
106 i ndexed f a c e s e t 6 . s e tCoord inate (2 , new Point3 f (−0.34 f , 1 . 6 f , 0 . 2 5 f ) ) ;
107 i ndexed f a c e s e t 6 . s e tCoord inate (3 , new Point3 f ( 0 . 13 f , 1 . 6 f , 0 . 4 f ) ) ;
108
109 QuadArray indexed f a c e s e t 7=new QuadArray (4 , QuadArray .COORDINATES) ;
110 i ndexed f a c e s e t 7 . s e tCoord inate (0 , new Point3 f (−0.24 f , 1 . 9 5 f , 0 . 1 8 f ) ) ;
111 i ndexed f a c e s e t 7 . s e tCoord inate (1 , new Point3 f (−0.24 f , 1 . 9 5 f ,−0.18 f ) ) ;
112 i ndexed f a c e s e t 7 . s e tCoord inate (2 , new Point3 f (−0.34 f , 1 . 6 f ,−0.25 f ) ) ;
113 i ndexed f a c e s e t 7 . s e tCoord inate (3 , new Point3 f (−0.34 f , 1 . 6 f , 0 . 2 5 f ) ) ;
114
115 QuadArray indexed f a c e s e t 8=new QuadArray (4 , QuadArray .COORDINATES) ;
116 i ndexed f a c e s e t 8 . s e tCoord inate (0 , new Point3 f (−0.24 f , 1 . 9 5 f ,−0.18 f ) ) ;
117 i ndexed f a c e s e t 8 . s e tCoord inate (1 , new Point3 f ( 0 . 09 f , 1 . 9 5 f ,−0.29 f ) ) ;
118 i ndexed f a c e s e t 8 . s e tCoord inate (2 , new Point3 f ( 0 . 13 f , 1 . 6 f ,−0.4 f ) ) ;
119 i ndexed f a c e s e t 8 . s e tCoord inate (3 , new Point3 f (−0.34 f , 1 . 6 f ,−0.25 f ) ) ;
120
121 QuadArray indexed f a c e s e t 9=new QuadArray (4 , QuadArray .COORDINATES) ;
122 i ndexed f a c e s e t 9 . s e tCoord inate (0 , new Point3 f ( 0 . 09 f , 1 . 9 5 f ,−0.29 f ) ) ;
123 i ndexed f a c e s e t 9 . s e tCoord inate (1 , new Point3 f ( 0 . 3 f , 1 . 9 5 f , 0 f ) ) ;
124 i ndexed f a c e s e t 9 . s e tCoord inate (2 , new Point3 f ( 0 . 42 f , 1 . 6 f , 0 f ) ) ;
125 i ndexed f a c e s e t 9 . s e tCoord inate (3 , new Point3 f ( 0 . 13 f , 1 . 6 f ,−0.4 f ) ) ;
126
127 QuadArray indexed fa c e s e t10=new QuadArray (4 , QuadArray .COORDINATES) ;
128 i ndexed fa c e s e t10 . se tCoord inate (0 , new Point3 f ( 0 . 42 f , 1 . 6 f , 0 f ) ) ;
129 i ndexed fa c e s e t10 . se tCoord inate (1 , new Point3 f ( 0 . 13 f , 1 . 6 f , 0 . 4 f ) ) ;
130 i ndexed fa c e s e t10 . se tCoord inate (2 , new Point3 f ( 0 . 19 f , 1 . 5 f , 0 . 5 7 f ) ) ;
131 i ndexed fa c e s e t10 . se tCoord inate (3 , new Point3 f ( 0 . 6 f , 1 . 5 f , 0 f ) ) ;
132
133 QuadArray indexed fa c e s e t11=new QuadArray (4 , QuadArray .COORDINATES) ;
134 i ndexed fa c e s e t11 . se tCoord inate (0 , new Point3 f ( 0 . 13 f , 1 . 6 f , 0 . 4 f ) ) ;
135 i ndexed fa c e s e t11 . se tCoord inate (1 , new Point3 f (−0.34 f , 1 . 6 f , 0 . 2 5 f ) ) ;
136 i ndexed fa c e s e t11 . se tCoord inate (2 , new Point3 f (−0.48 f , 1 . 5 f , 0 . 3 5 f ) ) ;
137 i ndexed fa c e s e t11 . se tCoord inate (3 , new Point3 f ( 0 . 19 f , 1 . 5 f , 0 . 5 7 f ) ) ;
138
139 QuadArray indexed fa c e s e t12=new QuadArray (4 , QuadArray .COORDINATES) ;
140 i ndexed fa c e s e t12 . se tCoord inate (0 , new Point3 f (−0.34 f , 1 . 6 f , 0 . 2 5 f ) ) ;
141 i ndexed fa c e s e t12 . se tCoord inate (1 , new Point3 f (−0.34 f , 1 . 6 f ,−0.25 f ) ) ;
142 i ndexed fa c e s e t12 . se tCoord inate (2 , new Point3 f (−0.49 f , 1 . 5 f ,−0.35 f ) ) ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.4. Codigos para renderizar la figura: Florero con traslacion y textura 167
143 i ndexed fa c e s e t12 . se tCoord inate (3 , new Point3 f (−0.48 f , 1 . 5 f , 0 . 3 5 f ) ) ;
144
145 QuadArray indexed fa c e s e t13=new QuadArray (4 , QuadArray .COORDINATES) ;
146 i ndexed fa c e s e t13 . se tCoord inate (0 , new Point3 f (−0.34 f , 1 . 6 f ,−0.25 f ) ) ;
147 i ndexed fa c e s e t13 . se tCoord inate (1 , new Point3 f ( 0 . 13 f , 1 . 6 f ,−0.4 f ) ) ;
148 i ndexed fa c e s e t13 . se tCoord inate (2 , new Point3 f ( 0 . 18 f , 1 . 5 f ,−0.57 f ) ) ;
149 i ndexed fa c e s e t13 . se tCoord inate (3 , new Point3 f (−0.49 f , 1 . 5 f ,−0.35 f ) ) ;
150
151 QuadArray indexed fa c e s e t14=new QuadArray (4 , QuadArray .COORDINATES) ;
152 i ndexed fa c e s e t14 . se tCoord inate (0 , new Point3 f ( 0 . 13 f , 1 . 6 f ,−0.4 f ) ) ;
153 i ndexed fa c e s e t14 . se tCoord inate (1 , new Point3 f ( 0 . 42 f , 1 . 6 f , 0 f ) ) ;
154 i ndexed fa c e s e t14 . se tCoord inate (2 , new Point3 f ( 0 . 6 f , 1 . 5 f , 0 f ) ) ;
155 i ndexed fa c e s e t14 . se tCoord inate (3 , new Point3 f ( 0 . 18 f , 1 . 5 f ,−0.57 f ) ) ;
156
157 QuadArray indexed fa c e s e t15=new QuadArray (4 , QuadArray .COORDINATES) ;
158 i ndexed fa c e s e t15 . se tCoord inate (0 , new Point3 f ( 0 . 6 f , 1 . 5 f , 0 f ) ) ;
159 i ndexed fa c e s e t15 . se tCoord inate (1 , new Point3 f ( 0 . 19 f , 1 . 5 f , 0 . 5 7 f ) ) ;
160 i ndexed fa c e s e t15 . se tCoord inate (2 , new Point3 f ( 0 . 22 f , 1 . 2 f , 0 . 6 7 f ) ) ;
161 i ndexed fa c e s e t15 . se tCoord inate (3 , new Point3 f ( 0 . 7 f , 1 . 2 f , 0 f ) ) ;
162
163 QuadArray indexed fa c e s e t16=new QuadArray (4 , QuadArray .COORDINATES) ;
164 i ndexed fa c e s e t16 . se tCoord inate (0 , new Point3 f ( 0 . 19 f , 1 . 5 f , 0 . 5 7 f ) ) ;
165 i ndexed fa c e s e t16 . se tCoord inate (1 , new Point3 f (−0.48 f , 1 . 5 f , 0 . 3 5 f ) ) ;
166 i ndexed fa c e s e t16 . se tCoord inate (2 , new Point3 f (−0.57 f , 1 . 2 f , 0 . 4 1 f ) ) ;
167 i ndexed fa c e s e t16 . se tCoord inate (3 , new Point3 f ( 0 . 22 f , 1 . 2 f , 0 . 6 7 f ) ) ;
168
169 QuadArray indexed fa c e s e t17=new QuadArray (4 , QuadArray .COORDINATES) ;
170 i ndexed fa c e s e t17 . se tCoord inate (0 , new Point3 f (−0.48 f , 1 . 5 f , 0 . 3 5 f ) ) ;
171 i ndexed fa c e s e t17 . se tCoord inate (1 , new Point3 f (−0.49 f , 1 . 5 f ,−0.35 f ) ) ;
172 i ndexed fa c e s e t17 . se tCoord inate (2 , new Point3 f (−0.57 f , 1 . 2 f ,−0.41 f ) ) ;
173 i ndexed fa c e s e t17 . se tCoord inate (3 , new Point3 f (−0.57 f , 1 . 2 f , 0 . 4 1 f ) ) ;
174
175 QuadArray indexed fa c e s e t18=new QuadArray (4 , QuadArray .COORDINATES) ;
176 i ndexed fa c e s e t18 . se tCoord inate (0 , new Point3 f (−0.49 f , 1 . 5 f ,−0.35 f ) ) ;
177 i ndexed fa c e s e t18 . se tCoord inate (1 , new Point3 f ( 0 . 18 f , 1 . 5 f ,−0.57 f ) ) ;
178 i ndexed fa c e s e t18 . se tCoord inate (2 , new Point3 f ( 0 . 21 f , 1 . 2 f ,−0.67 f ) ) ;
179 i ndexed fa c e s e t18 . se tCoord inate (3 , new Point3 f (−0.57 f , 1 . 2 f ,−0.41 f ) ) ;
180
181 QuadArray indexed fa c e s e t19=new QuadArray (4 , QuadArray .COORDINATES) ;
182 i ndexed fa c e s e t19 . se tCoord inate (0 , new Point3 f ( 0 . 18 f , 1 . 5 f ,−0.57 f ) ) ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
168 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
183 i ndexed fa c e s e t19 . se tCoord inate (1 , new Point3 f ( 0 . 6 f , 1 . 5 f , 0 f ) ) ;
184 i ndexed fa c e s e t19 . se tCoord inate (2 , new Point3 f ( 0 . 7 f , 1 . 2 f , 0 f ) ) ;
185 i ndexed fa c e s e t19 . se tCoord inate (3 , new Point3 f ( 0 . 21 f , 1 . 2 f ,−0.67 f ) ) ;
186
187 QuadArray indexed fa c e s e t20=new QuadArray (4 , QuadArray .COORDINATES) ;
188 i ndexed fa c e s e t20 . se tCoord inate (0 , new Point3 f ( 0 . 7 f , 1 . 2 f , 0 f ) ) ;
189 i ndexed fa c e s e t20 . se tCoord inate (1 , new Point3 f ( 0 . 22 f , 1 . 2 f , 0 . 6 7 f ) ) ;
190 i ndexed fa c e s e t20 . se tCoord inate (2 , new Point3 f ( 0 . 12 f , 0 f , 0 . 3 8 f ) ) ;
191 i ndexed fa c e s e t20 . se tCoord inate (3 , new Point3 f ( 0 . 4 f , 0 f , 0 f ) ) ;
192
193 QuadArray indexed fa c e s e t21=new QuadArray (4 , QuadArray .COORDINATES) ;
194 i ndexed fa c e s e t21 . se tCoord inate (0 , new Point3 f ( 0 . 22 f , 1 . 2 f , 0 . 6 7 f ) ) ;
195 i ndexed fa c e s e t21 . se tCoord inate (1 , new Point3 f (−0.57 f , 1 . 2 f , 0 . 4 1 f ) ) ;
196 i ndexed fa c e s e t21 . se tCoord inate (2 , new Point3 f (−0.32 f , 0 f , 0 . 2 4 f ) ) ;
197 i ndexed fa c e s e t21 . se tCoord inate (3 , new Point3 f ( 0 . 12 f , 0 f , 0 . 3 8 f ) ) ;
198
199 QuadArray indexed fa c e s e t22=new QuadArray (4 , QuadArray .COORDINATES) ;
200 i ndexed fa c e s e t22 . se tCoord inate (0 , new Point3 f (−0.57 f , 1 . 2 f , 0 . 4 1 f ) ) ;
201 i ndexed fa c e s e t22 . se tCoord inate (1 , new Point3 f (−0.57 f , 1 . 2 f ,−0.41 f ) ) ;
202 i ndexed fa c e s e t22 . se tCoord inate (2 , new Point3 f (−0.32 f , 0 f ,−0.23 f ) ) ;
203 i ndexed fa c e s e t22 . se tCoord inate (3 , new Point3 f (−0.32 f , 0 f , 0 . 2 4 f ) ) ;
204
205 QuadArray indexed fa c e s e t23=new QuadArray (4 , QuadArray .COORDINATES) ;
206 i ndexed fa c e s e t23 . se tCoord inate (0 , new Point3 f (−0.57 f , 1 . 2 f ,−0.41 f ) ) ;
207 i ndexed fa c e s e t23 . se tCoord inate (1 , new Point3 f ( 0 . 21 f , 1 . 2 f ,−0.67 f ) ) ;
208 i ndexed fa c e s e t23 . se tCoord inate (2 , new Point3 f ( 0 . 12 f , 0 f ,−0.38 f ) ) ;
209 i ndexed fa c e s e t23 . se tCoord inate (3 , new Point3 f (−0.32 f , 0 f ,−0.23 f ) ) ;
210
211 QuadArray indexed fa c e s e t24=new QuadArray (4 , QuadArray .COORDINATES) ;
212 i ndexed fa c e s e t24 . se tCoord inate (0 , new Point3 f ( 0 . 21 f , 1 . 2 f ,−0.67 f ) ) ;
213 i ndexed fa c e s e t24 . se tCoord inate (1 , new Point3 f ( 0 . 7 f , 1 . 2 f , 0 f ) ) ;
214 i ndexed fa c e s e t24 . se tCoord inate (2 , new Point3 f ( 0 . 4 f , 0 f , 0 f ) ) ;
215 i ndexed fa c e s e t24 . se tCoord inate (3 , new Point3 f ( 0 . 12 f , 0 f ,−0.38 f ) ) ;
216
217 QuadArray indexed fa c e s e t25=new QuadArray (4 , QuadArray .COORDINATES) ;
218 i ndexed fa c e s e t25 . se tCoord inate (0 , new Point3 f ( 0 . 4 f , 0 f , 0 f ) ) ;
219 i ndexed fa c e s e t25 . se tCoord inate (1 , new Point3 f ( 0 . 12 f , 0 f , 0 . 3 8 f ) ) ;
220 i ndexed fa c e s e t25 . se tCoord inate (2 , new Point3 f (−0.32 f , 0 f , 0 . 2 4 f ) ) ;
221 i ndexed fa c e s e t25 . se tCoord inate (3 , new Point3 f (−0.32 f , 0 f ,−0.23 f ) ) ;
222
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
B.4. Codigos para renderizar la figura: Florero con traslacion y textura 169
223 TransformGroup tg0=new TransformGroup ( t rans formac ion0 ( ) ) ;
224 tg0 . addChild (new Shape3D( indexed face s e t0 , c reaApar i enc ia0 ( ) ) ) ;
225 tg0 . addChild (new Shape3D( indexed face s e t1 , c reaApar i enc ia0 ( ) ) ) ;
226 tg0 . addChild (new Shape3D( indexed face s e t2 , c reaApar i enc ia0 ( ) ) ) ;
227 tg0 . addChild (new Shape3D( indexed face s e t3 , c reaApar i enc ia0 ( ) ) ) ;
228 tg0 . addChild (new Shape3D( indexed face s e t4 , c reaApar i enc ia0 ( ) ) ) ;
229 tg0 . addChild (new Shape3D( indexed face s e t5 , c reaApar i enc ia0 ( ) ) ) ;
230 tg0 . addChild (new Shape3D( indexed face s e t6 , c reaApar i enc ia0 ( ) ) ) ;
231 tg0 . addChild (new Shape3D( indexed face s e t7 , c reaApar i enc ia0 ( ) ) ) ;
232 tg0 . addChild (new Shape3D( indexed face s e t8 , c reaApar i enc ia0 ( ) ) ) ;
233 tg0 . addChild (new Shape3D( indexed face s e t9 , c reaApar i enc ia0 ( ) ) ) ;
234 tg0 . addChild (new Shape3D( indexed face se t10 , c r eaApar i enc ia0 ( ) ) ) ;
235 tg0 . addChild (new Shape3D( indexed face se t11 , c r eaApar i enc ia0 ( ) ) ) ;
236 tg0 . addChild (new Shape3D( indexed face se t12 , c r eaApar i enc ia0 ( ) ) ) ;
237 tg0 . addChild (new Shape3D( indexed face se t13 , c r eaApar i enc ia0 ( ) ) ) ;
238 tg0 . addChild (new Shape3D( indexed face se t14 , c r eaApar i enc ia0 ( ) ) ) ;
239 tg0 . addChild (new Shape3D( indexed face se t15 , c r eaApar i enc ia0 ( ) ) ) ;
240 tg0 . addChild (new Shape3D( indexed face se t16 , c r eaApar i enc ia0 ( ) ) ) ;
241 tg0 . addChild (new Shape3D( indexed face se t17 , c r eaApar i enc ia0 ( ) ) ) ;
242 tg0 . addChild (new Shape3D( indexed face se t18 , c r eaApar i enc ia0 ( ) ) ) ;
243 tg0 . addChild (new Shape3D( indexed face se t19 , c r eaApar i enc ia0 ( ) ) ) ;
244 tg0 . addChild (new Shape3D( indexed face se t20 , c r eaApar i enc ia0 ( ) ) ) ;
245 tg0 . addChild (new Shape3D( indexed face se t21 , c r eaApar i enc ia0 ( ) ) ) ;
246 tg0 . addChild (new Shape3D( indexed face se t22 , c r eaApar i enc ia0 ( ) ) ) ;
247 tg0 . addChild (new Shape3D( indexed face se t23 , c r eaApar i enc ia0 ( ) ) ) ;
248 tg0 . addChild (new Shape3D( indexed face se t24 , c r eaApar i enc ia0 ( ) ) ) ;
249 tg0 . addChild (new Shape3D( indexed face se t25 , c r eaApar i enc ia0 ( ) ) ) ;
250 r a i z . addChild ( tg0 ) ;
251
252 r a i z . compi le ( ) ;
253 return r a i z ;
254 }
255
256 public Appearance c reaApar i enc ia0 ( ) {
257 Appearance app=new Appearance ( ) ;
258 PolygonAttr ibutes po lyAtt r ib = new PolygonAttr ibutes ( ) ;
259 po lyAtt r ib . s e tCul lFace ( PolygonAttr ibutes .CULL NONE) ;
260 app . s e tPo lygonAtt r ibute s ( po lyAtt r ib ) ;
261 TexCoordGeneration texCoord = new TexCoordGeneration ( TexCoordGeneration
.OBJECT LINEAR, TexCoordGeneration .TEXTURE COORDINATE 3) ;
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
170 Apendice B. Codigos en VRML y en Java 3D de figuras complejas
262 app . setTexCoordGeneration ( texCoord ) ;
263 St r ing nomArch=” l a d r i l l o 1 . jpg ” ;
264 TextureLoader l oade r=new TextureLoader (nomArch , this ) ;
265 ImageComponent2D image=loade r . getImage ( ) ;
266 i f ( image==null )
267 System . out . p r i n t l n ( ”Error a l cargar l a textura ” ) ;
268 Texture2D texture=new Texture2D ( Texture .BASE LEVEL, Texture .RGBA, image .
getWidth ( ) , image . getHeight ( ) ) ;
269 t ex tu re . setImage (0 , image ) ;
270 app . setTexture ( t ex tu re ) ;
271 return app ;
272 }
273
274 public Transform3D trans formac ion0 ( ) {
275 Transform3D t0=new Transform3D ( ) ;
276 Vector3d v=new Vector3d (0 .0 ,−1.0 ,−4.0) ;
277 t0 . s e t ( v ) ;
278 return t0 ;
279 }
280
281 }
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
Apendice C
Renderizaciones en VRML y de
salida generados por el Traductor
VRML a Java 3D
En esta seccion se muestran las renderizaciones de los cuatro ejemplos de gran comple-
jidad que se usaron para probar el correcto funcionamiento de la herramienta Traductor
VRML a Java 3D. En los cuatro casos se presentan las renderizaciones para VRML
ası como para Java 3D.
Las renderizaciones corresponden a: silla de madera, sofa, monitor de PC y la de un
florero.
Los codigos completos de estos cuatro ejemplos estan en el apendice anterior, tanto
para VRML como para Java 3D, estos ultimos fueron generados por la herramienta
Traductor de VRML a Java 3D.
171
172Apendice C. Renderizaciones en VRML y de salida generados por el Traductor VRML
a Java 3D
C.1. Renderizaciones para la figura: Silla de Madera
La figura C.1 muestra la imagen del archivo VRML usando el navegador con el
plug-in Cortona para el codigo SillaMadera01.wrl.
Figura C.1: Salida usando el navegador con el plug-in Cortona del archivo SillaMadera01.wrl
La figura C.2 muestra la imagen del archivo de salida SillaMadera1.java en Java 3D
generado por la herramienta Traductor VRML a Java 3D.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
C.1. Renderizaciones para la figura: Silla de Madera 173
Figura C.2: Salida usando la herramienta Traductor VRML a Java 3D del archivo SillaMade-ra1.java
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
174Apendice C. Renderizaciones en VRML y de salida generados por el Traductor VRML
a Java 3D
C.2. Renderizaciones para la figura: Sofa
La figura C.3 muestra la imagen del archivo VRML usando el navegador con el
plug-in Cortona para el codigo Sofa1.wrl.
Figura C.3: Salida usando el navegador con el plug-in Cortona del archivo Sofa1.wrl
La figura C.4 muestra la imagen del archivo de salida Sofa1.java en Java 3D generado
por la herramienta Traductor VRML a Java 3D.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
C.2. Renderizaciones para la figura: Sofa 175
Figura C.4: Salida usando la herramienta Traductor VRML a Java 3D del archivo Sofa1.java
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
176Apendice C. Renderizaciones en VRML y de salida generados por el Traductor VRML
a Java 3D
C.3. Renderizaciones para la figura: Monitor de PC
La figura C.5 muestra la imagen del archivo VRML usando el navegador con el
plug-in Cortona para el codigo MonitorPC.wrl.
Figura C.5: Salida usando el navegador con el plug-in Cortona del archivo MonitorPC.wrl
La figura C.6 muestra la imagen del archivo de salida MonitorPC.java en Java 3D
generado ´por la herramienta Traductor VRML a Java 3D.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
C.3. Renderizaciones para la figura: Monitor de PC 177
Figura C.6: Salida usando la herramienta Traductor VRML a Java 3D del archivo Moni-torPC.java
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
178Apendice C. Renderizaciones en VRML y de salida generados por el Traductor VRML
a Java 3D
C.4. Renderizaciones para la figura: Florero con tras-
lacion
La figura C.7 muestra la imagen del archivo VRML usando el navegador con el
plug-in Cortona para el codigo FloreroTrasladado1.wrl.
Figura C.7: Salida usando el navegador con el plug-in Cortona del archivo FloreroTraslada-do1.wrl
La figura C.8 muestra la imagen del archivo de salida FloreroTrasladado1.java en
Java 3D generado ´por la herramienta Traductor VRML a Java 3D.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
C.4. Renderizaciones para la figura: Florero con traslacion 179
Figura C.8: Salida usando la herramienta Traductor VRML a Java 3D del archivo Florero-Trasladado1.java
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
180Apendice C. Renderizaciones en VRML y de salida generados por el Traductor VRML
a Java 3D
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
Apendice D
Especificaciones de la herramienta
Traductor de VRML a Java 3D
Para el funcionamiento optimo de la herramienta Traductor de VRML a Java 3D se
recomienda contar con los siguientes requerimientos de hardware y software.
D.1. Requerimientos de hardware
Procesador intel pentium a 400 Mz como mınimo. Se recomienda a 1 GHz para
mejorar el rendimiento del renderizado en Java 3D.
Disco duro de 500 MB de espacio disponible.
Memoria RAM de 2 GB.
Monitor de alta resolucion de 1024 x 768 a 32 bits.
181
182 Apendice D. Especificaciones de la herramienta Traductor de VRML a Java 3D
D.2. Requerimientos de software
Plug-in Cortona 3D.
Sistema operativo Windows 7, Unix, Linux o Mac OS.
Compilador de Java 2.
Interfaz de Programas de Aplicacion para Java 3D.
Entorno de desarrollo netBeans.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
Apendice E
Instalacion del software requerido
para trabajar con el Traductor
VRML a Java 3D
E.1. El plug-in Cortona 3D
Cortona 3D es un visor que trabaja como un plug-in de VRML para los navegadores
web Internet Explorer, Netscape Browser, Mozilla, Firefox, et. La version actual es la
6.0 y puede bajarse desde:
http://www.cortona3d.com/Products/Cortona-3D-Viewer.aspx y tiene las siguientes ca-
racterısticas:
Soporta Unicode.
Soporta Firefox 3.0 y Google Chrome.
Soporta Phong lighting.
Rendimiento mejorado: new DirectX renderer.
183
184Apendice E. Instalacion del software requerido para trabajar con el Traductor VRML a
Java 3D
Procedimiento de instalacion mejorado.
Nuevas extensiones para VRML.
Soporte completo para VRML 97.
Instalacion automatica para Internet Explorer.
Suporte de aceleladores modernos via DirectX y OpenGL.
Renderizado advanced: mipmapping, phong lighting, reflection mapping y enhan-
ced anti-aliasing.
Soporte para Macromedia Flash.
Poderosa API basada en el ActiveX Automation technology.
Interface de usuario personalizable.
E.1.1. Instalacion del plug-in Cortona 3D
Los requerimientos basicos para instalar este plug-in son los siguientes:
Sistema Operativo: Microsoft R© Windows R© ME/2000/XP.
Navegador: Internet Explorer 6.0 o posterior, Netscape R© Browser 8.0 o posterior,
Mozilla Firefox 1.5 o posterior, Opera 8.5 o posterior.
Procesador: Pentium R© II 300 MHz o posterior.
Memoria RAM: mınimo de 64 MB.
Espacio en disco duro: 6 MB.
Monitor: 1024x768 modo: true color
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
E.1. El plug-in Cortona 3D 185
Tarjeta grafica compatible con DirectX 9 compatible.
En la figura E.1 se muestra el sitio de descarga del plugin, se da click en Install
Cortona y se muestra la pantalla E.2 donde se da click en Ejecutar e inicia la instalacion
del Plug-in, posteriormente como se observa en las figura E.3 se da click en siguiente y
se selecciona la opcion I accept the terms . . . y se da clcik en siguiente. Posteriormente
se selecciona Direct X render como se observa en la figura E.4 y se da click en Install
y como ultimo paso se da click en Finish como se observa en la figura E.5 y el plug-in
queda instalado.
Figura E.1: Sitio de descarga de cortona
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
186Apendice E. Instalacion del software requerido para trabajar con el Traductor VRML a
Java 3D
Figura E.2: Inicio de la instalacion del plug-in Cortona
Figura E.3: Pasos en la instalacion (1)
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
E.1. El plug-in Cortona 3D 187
Figura E.4: Pasos en la instalacion (2)
Figura E.5: Pasos en la instalacion (3)
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
188Apendice E. Instalacion del software requerido para trabajar con el Traductor VRML a
Java 3D
E.2. Instalacion del compilador para Java 3D
La instalacion de Java 3D requiere de la instalacion previa del compilador de Java,
por lo que se accede a la pagina:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
La version de Java que se descarga es la Standard Edition como se observa en la figura
E.6, ahı podemos dar click en el boton Download JDK. Ese boton envıa a otra pagina
mostrada en la figura E.7, donde se elige la distribucion de Java a instalar de acuerdo al
sistema operativo que se tenga. Una vez seleccionada dicha opcion se muestra la pantalla
de la figura E.8, donde podemos seleccionar la opcion Ejecutar, y es ahı donde inicia
la instalacion como se observa en la figura E.9 y se da click en Siguiente, en Aceptar y
nuevamente Siguiente como se muestra en la figura E.10y en la pantalla posterior se da
click en siguiente como se muestra en la E.11 y finaliza con la pantalla de la figura E.12.
Figura E.6: Sitio de Descarga del compilador de Java
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
E.2. Instalacion del compilador para Java 3D 189
Figura E.7: Sitio de Descarga del compilador de Java(2)
Figura E.8: Sitio de Descarga del compilador de Java(3)
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
190Apendice E. Instalacion del software requerido para trabajar con el Traductor VRML a
Java 3D
Figura E.9: Instalacion del compilador de Java(1)
Figura E.10: Instalacion del compilador de Java(2)
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
E.2. Instalacion del compilador para Java 3D 191
Figura E.11: Instalacion del compilador de Java(3)
Figura E.12: Instalacion del compilador de Java(4)
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
192Apendice E. Instalacion del software requerido para trabajar con el Traductor VRML a
Java 3D
E.2.1. Instalacion de la API para Java 3D
Una vez instalado el compilador de Java se procede con la instalacion de Java3D. La
API de Java3D se descarga del sitio:
http://www.oracle.com/technetwork/java/javase/tech/index-jsp-138252.html
el cual se observa en la figura E.13, donde se selecciona Download Java3D 1.5.1
Software, este elace redirige hacia otra pagina donde se selecciona el sistema operativo
donde se instalara y se acepta la licencia como se muestra en la figura E.14 y finalmente
se procede a descargar la API de Java3D como se observa en la figura E.15 y da click
en el boton de Ejecutar para inicial la instalacion (figura E.16)
Figura E.13: Sitio de Descarga de la API Java3D
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
E.2. Instalacion del compilador para Java 3D 193
Figura E.14: Sitio de Descarga de la API Java3D(2)
Figura E.15: Sitio de Descarga de la API Java3D(3)
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
194Apendice E. Instalacion del software requerido para trabajar con el Traductor VRML a
Java 3D
Figura E.16: Sitio de Descarga de la API Java3D (4)
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
Apendice F
Glosario de Terminos
ancestor - Un nodo el cual es un antecedente de otro nodo en la jerarquıa de trans-
formacion.
avatar - Representacion abstracta de un usuario en un mundo VRML. Las dimen-
siones fısicas del avatar se usan para detectar colisiones y el seguimiento en el terreno.
child - Una instancia de un nodo children.
children node - Uno de un conjunto de nodos tipo, instancias de las cuales puede
coleccionarse en un grupo para compartir propiedades especıficas dependiente del tipo
del nodo grouping . Vease los nodos Grouping y children, y la lista de nodos children
permitidos.
descendant - Un nodo el cual desciende de otro nodo en la jerarquıa de transfor-
macion. Un nodo children.
195
196 Apendice F. Glosario de Terminos
display device - Dispositivo grafico en el cual se puede renderizar mundos VRML.
event - Un mensaje enviado desde un nodo a otro definido por una route. Estımulo
externos de senales de eventos, cambian los valores de campo, e interaccionan entre no-
dos. Un evento consiste de un timestamp y de un valor de campo.
event cascade - Una secuencia de eventos iniciados por un script o evento sensor y
propagado desde un nodo a otro nodo a lo largo de una o mas rutas. Todos los eventos
en un evento cascada se consideran que ocurren simultaneamente.
eventIn - Un receptor logico conectado a un nodo, el cual recibe eventos.
eventOut - Una terminal de salida logica conectada a un nodo desde el cual se
envıan los eventos. El eventOut tambien almacena los eventos enviados mas reciente-
mente.
field - Una propiedad o atributo de un nodo. Cada tipo de nodo tiene un conjunto
fijo de campos. Los campos pueden contener varias clases de datos y uno o mas valores.
Cada campo tiene un valor por omision.
field name - Es el identificador de un campo. Los nombres de campo son unicos
dentro del alcance del nodo.
frame - Una renderizacion individual de un mundo en un dispositivo display o un
paso de tiempo individual en una simulacion.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
197
geometric property node - Un nodo que define las propiedades de un nodo geo-
metry especıfico. Un nodo de tipo Color, Coordinate, Normal, or TextureCoordinate.
geometry node - Un nodo conteniendo descripciones matematicas de las tres di-
mensiones (3D) puntos, lineas, superficies, cadenas de texto y solidos. Un nodo de tipo
Box, Cone, Cylinder, ElevationGrid, Extrusion, IndexedFaceSet, IndexedLineSet, Poin-
tSet, Sphere, o Text. Ver Shapes y geometry.
grouping node - Uno de un conjunto de nodos tipo el cual incluye una lista de
nodos referidos a sus nodos hijos . Estos nodos children nodes son colectados juntos pa-
ra compartirpropiedades especıficas dependiente del tipo de nodo grouping. Cada nodo
grouping define un espacio coordenado para sus hijos relacionados a su porpio espacio
coordenado. Los children pueden ellos mismos ser instancias de nodos grouping, forman-
do ası una jerarquıa de transformacion.
image - Un arreglo de dos dimensiones (2D) de valores de pixeles. Los valores de los
pixeles pueden tener de uno a cuatro componentes.
in-lining - Mecanismo mediante el cual un archivo VRML es jerarquicamente in-
cluido en otro.
instance - Referencia a un nodo previamente definido y nombrado. Los Nodos son
nombrados por medio de la sintaxis DEF y referenciado por la sintaxis USE. Las ins-
tancias de los nodos pueden usarse en cualquier contexto en el cual el nodo que definen
puede ser usado.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
198 Apendice F. Glosario de Terminos
loop - Una secuencia de eventos las cuales resultarıan en un eventOut especıfico
enviando mas que un eventocon el mismo timestamp.
message - Una cadena de datos enviada entre nodos hasta la ocurrencia de un evento.
node - El componente fundamental de un scene graph en ISO/IEC 14772. Los nodos
son abstracciones de varios objetos y conceptos real-world. Ejemplos incluyen spheres,
lights, y descripciones de material. Los nodos contienen campos y eventos. Los mesajes
pueden enviarse entre nodos a lo largo de routes.
node type - Una caracterıstica de cada nodo que describe, en general, su semantica
particular . Por ejemplo, Box, Group, Sound, y SpotLight son nodos tipo.
object space - El sistema de coordenada en el cual un objeto esta definido.
panorama - Una texture de fondo que es colocada atras de toda geometry en la
escena y enfrente del piso y cielo.
parent - Un nodo el cual es una instancia de un nodo grouping.
polyline - Una secuencia de segmentos de lıneas rectas donde el punto final del pri-
mer segmento coincide con el punto de inicio del segundo segmento, el punto final del
segundo segmento coincide con el punto final del tercer segmento, y ası sucesivamente. .
route - La conexion entre un nodo que genera un evento y un nodo que recibe el
evento.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
199
route graph - El conjunto de conexiones entre eventOuts y eventIns formedos por
sentencias ROUTE o invocaciones a metodos addRoute.
scene graph - Una coleccion ordenada de nodos grouping y otros nodos. Nodos
Grouping, (tales como nodos: LOD, Switch, y Transform ) pueden tener nodos children.
sensor node - Un nodo que habilita al usuario a interactuar con el mundo en la
jerarquıa del grafo de escena. los nodos Sensor responden a la interaccion del usuario
con objectos geometricos en el mundo, el movimiento del usuario a traves del mundo o
el paso del tiempo.
separator character - Un caracter UTF-8 usado para separar entidades sintacticas
en un archivo VRML. Especıficamente las comas, los espacios,los tabs, las linefeeds, y los
carriage-returns son caracteres separadores que aparecen fuera de los campos de cadena.
sibling - Un nodo el cual comparte un padre con otros nodos.
special group node - Un nodo grouping que exhibe un comportamiento especial.
Ejemplos de tales comportamientos especiales incluye la seleccion de uno de muchas no-
dos children para ser renderizados basados en valor del parametro de cambio dinamico y
los nodos children cargados dinamicamnete desde un archivo externo. Un nodo del tipo
Inline, LOD (nivel de detalle), o Switch.
texture -Una imagen usada en un mapeo de textura para crear efectos de apariencia
visual cuando se aplica a nodos geometry.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
200 Apendice F. Glosario de Terminos
texture coordinates - El conjunto de coordenadas de dos dimensiones usedos por
algunos nodos geometry basados en vertices (ejemplo: IndexedFaceSet y ElevationGrid)
y especificados en el nodo TextureCoordinate para mapear texturas a los vertices de esos
nodos. El rango de coordenadas de texturas de 0 a 1 a trves de cada eje de la imagen
de textura.
texture map - Una textura mas los parametros generales necesarios para mapear
la textura a la geometrıa.
time - Un valor que se incrementa monotonicamente generado por un nodo. Time
(0.0) inicia en 00:00:00 GMT January 1, 1970.
timestamp - La parte de un mensaje que describe el tiempo en que ocurre un evento
y que causo que el mensaje se enviara.
transformation hierarchy - El subconjunto del grafo de escena que consiste de
nodos que tienen un sistema de coordenadas bien definido. La jerarquıa de transforma-
cion excluye nodos que no son descendientes del nodo raız del grafo de escena y nodos
SFNode o campos de Scripts de MFNode.
user - Una persona o agente quien usa e interactua con archivos VRML por medio
de un navegador.
viewer - Una localidad, direccion, y angulo de vista en un mundo virtual que deter-
mina la porcion del mundo virtual presentado por el navegador al usuario.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D
201
virtual world - Ver world.
world - Una coleccion de uno o mas archivos VRML y de otros contenidos multi-
media que cuando son interpretados por un navegador VRML, presenta una experiencia
interactiva al usuario consistente con la intencon del autor.
world coordinate space - El sistema de coordenadas en el cual cada mundo VRML
world es definedo. El espacio del mundo coordenado es un sistema cartesiano ortogonal
de mano derecha. Las unidades de longitud son metros.
XY plane - El plano perpendicular al eje Z que pasa a traves del punto Z = 0.0.
YZ plane - El plano perpendicular al eje X que pasa a traves del punto X = 0.0.
ZX plane - El plano perpendicular al eje Y que pasa a traves del punto Y = 0.0.
Mejoras en el Diseno, e Implementacion de un Traductor de VRML a Java 3D