basico de vrlm

  • Upload
    helcal

  • View
    857

  • Download
    3

Embed Size (px)

Citation preview

Tabla Bsica de Tipos de Datos:SFBool, MFBool SFFloat, MFFloat TRUE o FALSE. Verdadero o Falso. Un valor con punto flotante. Es un nmero con coma o punto decimal. Ejemplo: 1.05 SFColor, MFColor Un color triple. Definido por RGB, con valores decimales entre 0 y 1. Ejemplo: 0.5 0.5 0.5 (gris) SFInt32, MFInt32 SFString, MFString SFVec3f, MFVec3f Un valor entero. El rango va desde: 2.147.483.647 hasta -2.147.483.648 Una cadena de caracteres. "Hola" debe ir entre comillas. Un vector tridimensional, con tres valores por cada punto ubicado en cada coordenada: x, y, z. Estos valores pueden expresarse en decimales. Ejemplo: 1 3 2.20 Separados por espacios. Un vector de dos dimensiones: x, y Por ejemplo: 12 15.2 Aqu un nodo se define como el contenido de un campo. De esta manera los nodos pueden anidarse, ubicndose uno dentro de otro. Esto permite mayor flexibilidad al lenguaje.

SFVec2f, MFVec2f SFNode, MFNode

Con estos conceptos bsicos podemos comenzar a trabajar. Abrimos el editor de texto que poseemos o mejor si es el Programmer's File Editor y escribimos el encabezado : #VRML V2.0 utf8 Vemos que si grabamos este archivo como .wrl y lo corremos en el navegador, no veremos nada. Ya que este encabezado como vimos en la entrega anterior slo legitima el archivo .wrl para que sea reconocido por el navegador. Para agregar un objeto hacemos us o del nodo Shape y conectamos el campo apariencia (appearance) con la forma del objeto (geometry). Los campos apariencia y geometra definen las caractersticas visibles y la forma de un objeto. Volviendo a las formas, VRML tiene 4 formas construidas por defecto: Esfera, Caja ,Cono y Cilindro.

Campos de las figuras:Esfera: Shape { radius } } Caja: Box { size #SFVec3f por defecto 2.0 2.0 2.0 } Cono: Cone { bottomRadius #SFFloat por defect o 1.0 height #SFFloat por defecto 2.0 side #SFBool por defecto TRUE top #SFBool por defecto TRUE } Cilindro: Cylinder { bottom #SFBool por defecto TRUE height #SFFloat por defecto 2.0 radius #SFFloat por defecto 1.0 side #SFBool por defecto TRUE top #SFBool por defecto TRUE }

Ejercicio N 1:

#VRML V2.0 utf8 #Este es nuestro primer ejercicio #Muestra una esfera Shape { #define el nodo figura geometry #define el campo geometra Sphere { #define el nodo esfera radius 1.0 #define por defecto 1 } #cierra Esfera } #cierra Figura y el archivo

Color y Texturas

Apariencia y Materiales:Muchos de Ustedes se preguntarn bueno pero y esto es realidad virtual. Unas figuras blancas? Y el Color y la Textura y el Sonido y la Interactividad ? Bueno, Bueno, despacio ya vamos llegando. Hoy comenzaremos a trabajar el tema de los colores. Cada vez que vemos un objeto en el mundo virtual, est compuesto por dos tipos de informacin : su geometra (geometry) que habla de la forma del objeto: cbica, esfrica... mientras que material(material) cubre la informacin de las cualidades de la superficie de esa forma: color, brillo... Juntas definen el objeto visible.

Nodo Appearance:Vimos en la entrega anterior las cuatro formas preconstruidas que tiene el lenguaje VRML. El nodo Shape tiene otro campo adems del geometry que define su apariencia y se llama appearance, que define las cualidades de la superficie(aqu appearance es campo de Shape) pero Appearance como nodo tiene a su vez tres campos. Nosotros ya mencionamos en la tabla con los distintos tipos de datos, que haba nodos que a su vez funcionaban como campos de otros, lo que permita anidar y esto flexibizaba y aumentaba la potencia del VRML. Appearance { # como nodo con maysculas tiene tres campos material #SFNode texture #SFNode textureTransform #SFNode }

Ahora nos centraremos en el campo material. En realidad el campo material convoca al Nodo material y este define la "pintura" que aplicamos a las formas. Este nodo Material especifica las cualidades de la superficie del objeto: color y luz. Material { #como nodo contiene seis campos ambientIntensity #SFColor (rango de 0 a 1) diffuseColor #SFColor emissiveColor #SFColor shininess # SFFloat (rango de 0 a 1) specularColor # SFColor transparency # SFFloat (rango de 0 a 1) } Vamos a detenernos en cada uno de estos campos para poder diferenciarlos y aplicarlos correctamente. Luego con unos ejercicios se va a ver ms claro, esta doble personalidad o doble uso de material como campo y Material como Nodo. Estos campos que determinan el color y el brillo del objeto pueden incluirse u omitirse. El campo utilizado para establecer el color bsico de una figura se denomina diffuseColor (difumar Color). Este campo debe especificar tres con nmeros entre 0 y 1, que corresponden a la intensidad de rojo, verde y azul, que forman el color requerido. Tomamos como ejemplo la creacin de un Sol, como queremos un Sol color amarillo, segn la teora del color (que vale tambin para el VRML) el amarillo se forma con rojo y verde. Como queremos un Sol muy brillante, vamos a saturar el color mediante el valor uno (el valor cero ser lo opuesto a la saturacin ya que proporciona el color negro).

Ejercicio N 4:#VRML V2.0 utf8 Shape { appearance Appearance { material Material { diffuseColor 1 1 0 } } geometry Sphere { radius 10 }

} Hay otros campos que podemos agregar a este Sol amarillo brillante. Si usamos el campo emissiveColor ( color de emisin) en lugar de diffuseColor, estamos definiendo la cantidad de color emitida desde la superficie del objeto y el sol irradiar luminosidad de inmediato. En realidad emissiveColor toma los mismos valores de rojo, verde y azul que diffuseColor pero su efecto es distinto como podemos ver en el siguiente ejemplo.

Ejercicio N 5:#VRML V2.0 utf8 Shape { appearance Appearance { material Material { diffuseColor 0 0 0 emissiveColor 1 1 0 } } geometry Sphere { radius 10 } } Otros posibles campos son: shininess (brillantez), transparency (transparencia), ambientColor (Color ambiental) y specularColor (color especular o reflejos). Experimenta con los diversos componentes para observar los posibles resultados. El nodo Material te permite generar un amplio rango de efectos pues cualquiera de los campos puede utilizarse en combinacin con otros o de manera individual.

Shininess y SpecularColor:Los campos shininess (brillo de una zona) y specularColor (reflejos) estn intimamente relacionados con los efectos que produce el reflejo de la luz sobre una superficie y su rebote hacia nosotros. El siguiente ejercicio muestra una esfera roja con reflejos azules, lo que le d un efecto anaranjado:

Ejercicio N 7:#VRML V2.0 utf8 Shape {

appearance Appearance { material Material { diffuseColor 0.35 0.35 0.35#gris oscuro specularColor 1 1 1 # reflejos claros shininess 1 #brillo } } geometry Box { size 10 0.1 10 }#debemos movernos para verla mejor } Si no queremos estos efectos de luces sobre un objeto dejamos el specularColor y el emissiveColor por defecto y su valor ser 0 0 0 . O sea no necesitamos definirlos si no los usamos.

Transparencia:El valor 1.0 es completamente transparente, por lo tanto el valor 0 es opaco. Entre estos dos valores nosotros elegimos que grado de transparencia le otorgamos al objeto. Para verlo nada mejor que un ejemplo:

Ejercicio N 8:#VRML V2.0 utf8 Shape { appearance Appearance { material Material { diffuseColor 1 0 1 transparency 0.9 #Aqu est el valor de la transparencia. } } geometry Sphere { radius 10 } }

Posicin y Coordenadas

Determinar un Sitio:Cualquier proceso grfico en 3D debe iniciarse en un lugar. Todo en el mundo tiene una posicin , es decir el sitio donde el objeto se encuentra. Estas posiciones son muy importantes porque definen relaciones, asociaciones y posibilidades. Esta posicin la determinamos a travs de tres dimensiones llamadas : anchura, altura y profundidad. En el mundo de las computadoras esto se representa como el conjunto de lneas que forma la esquina imaginaria de un cubo, cuya interseccin sera la posicin: 0 0 0.

Giros, Vueltas y Rodados:Adems de la posicin los objetos tienen una orientacin como mbito independiente. La orientacin se representa tambin por medio de tres valores, porque los objetos pueden girar para cambiar su orientacin. Estos tres tipos de orientacin son el movimiento giratorio (giro), el movimiento en ciclos (vueltas) y el movimiento circular (rodado).

A menudo combinamos las variables x, y, z de la posicin de un objeto con el giro, la vuelta y el rodado de la orientacin para crear un conjunto llamado los seis grados de libertad. Esto significa que en el mundo de esta tercera dimensin computarizada necesitamos seis valores diferentes para especificar la posicin y la orientacin de un objeto.

Nodo Transform:Los objetos en el mundo VRML se dibujan desde una posicin inicial, un punto central, un origen. Este punto en el espacio es el valor cero de las coordenadas x, y, z. Por defecto los objetos se ubican en este origen 0 0 0. Qu ocurre si yo creo dos figuras en un mismo mundo sin darles coordenadas especficas? Por defecto se ubicaran en el 0 0 0. Esto se ver as:

Ejercicio N 9:#VRML V2.0 utf8 Shape { appearance Appearance { material Material { diffuseColor 1 0 0 } } geometry Sphere {radius 1.2} }

Shape { appearance Appearance { material Material {

diffuseColor 0 0 1 } } geometry Cylinder {} } Este origen es comn a todos los objetos por eso se superponen. Entonces nosotros debemos crear un sistema de coordenadas locales con distintos orgenes que vamos a anidar una dentro de otra ( en una relacin padre - hijo) y para esto usamos el Nodo Transform (Transformar). Este Nodo es el que permite ubicar los objetos en distintas posiciones en el mundo virtual, creando un sistema de coordenadas propias. Sus campos son: Transform { center #SFVec3f children [] # MFNode Anida Mltiples Nodos. rotation # SFRotation scale # SFVec3f scaleOrientation #SFRotation translation # SFVec3f bboxCenter #SFVec3f bboxSize # SFVec3f } Aqu vemos por primera vez un tipo de dato MFNode : el campo children, este es el corazn del Nodo Transform ya que contiene una lista de Nodos ( todos objetos) que sern afectados por el nodo Transform. El Nodo Transform (Transformacin) modifica la posicin, orientacin, el tamao y el centrado de todos los nodos posteriores dentro del mismo grupo o anidado. Para cambiar la posicin de los nodos subsecuentes el nodo Transform una el campo translation (tr aslacin) que proporciona los valores x, y, z. Si el valor de translation es 0 0 0 no cambia su posicin. Si es 1 2 13 los nodos subsecuentes se desplazarn una unidad sobre el eje de la x, dos unidades sobre el eje de la y y trece unidades sobre el eje de la z. Por acuerdo cada unidad equivale a un metro en el VRML. Ahora s podemos corregir el ejercicio N 9.

Ejercicio N 10:#VRML V2.0 utf8 Shape { appearance Appearance {

material Material { diffuseColor 1 0 0 } } geometry Sphere {radius 1.2} } Transform { #abrimos el nodo children [ #con su campo children Shape { #ahora si la forma appearance Appearance { material Material { diffuseColor 0 0 1 } } geometry Cylinder {} } ] #cierra el campo children translation 3 0 0 #mueve 3 metros a la derecha }

Volviendo al ejercicio del Sol, ahora podramos agregarle un planeta tierra a su izquierda o derecha o en la posicin que ms nos guste: Tabla de ejemplos de valores para el uso del campo translation:

-3 0 0 0 0 -3 0 -3 0 030 003

Mueve a la izquierda Mueve hacia atrs Mueve hacia abajo Mueve hacia arriba Mueve hacia adelante

300

Mueve a la derecha

Ejercicio N 11:#VRML V2.0 utf8 Shape { appearance Appearance { material Material { diffuseColor 1 1 0 } } geometry Sphere {radius 3} } Transform { #abrimos el nodo children [ #con su campo children Shape { #ahora si la forma appearance Appearance { material Material { diffuseColor 0 0 1 } } geometry Sphere {} } ] #cierra el campo children translation 30 0 0 #mueve 30 metros a la derecha }

Texturas

Campo texture del Nodo Appearance:Hasta ahora para definir un objeto lo hacamos con el Nodo Shape y el Nodo Appearance. Dentro del Nodo Appearance, con el campo material definamos el color. Vamos a ponerle ms vida a estas figuras virtuales a travs del campo texture, con el que se define la textura de los objetos. Cabe preguntarse a qu llamamos textura. La textura es el envoltorio que le damos a un objeto con una imagen existente, usando el campo ImageTexture o con una pelcula, usando el campo MovieTexture. Tambin podramos hacerlo con una imagen creada por nosotros mismo pixel a pixel, usando el campo pixel Texture, pero en este curso bsico nos manejamos con imgenes ya hechas.

Textura con ImageTexture:Tenemos como figura un cubo, tomemos una imagen como textura para envolver e cubo. Voy l a usar como ejemplo una foto de la Isla El Hierro de las Canarias, donde tengo unos ciberamigos fantsticos que son : Jos y sus alumnos.

Ejercicio N 12:#VRML V2.0 utf8 #Ejemplo de una caja con textura. Shape { appearance Appearance { texture ImageTexture { url ["vrml_6.jpg"]

} } geometry Box { size 1.5 2.2 0.8 } } Al correr el ejercicio en el navegador vemos que las imgenes se reproducen en todas las caras de la figura. Tambin vemos un elemento nuevo el nodo Image Texture tiene el valor url [ "vrml_6.jpg" ], esto supone que la imagen est en el mismo directorio que el mundo virtual. Si no fuera as, debemos colocar entre comillas la ruta o camino completo donde ubicar el archivo de la imagen. Con otra imagen en este caso un planisferio, vamos a simular, al envolver una esfera, que creamos el planeta tierra.

Ejercicio N 13:#VRML V2.0 utf8 #Ejemplo de un cilindro con textura. Shape { appearance Appearance { texture ImageTexture { url ["vrml_7.jpg"] } } geometry Sphere { } }

Ms de una imagen en un mismo Objeto:

Imaginemos un cilindro que en la superficie lateral despliegue una imagen y en los fondos o caras superior e inferior, muestre otra imagen o textura distinta, semejando una lata de gaseosa. Para lograr esto el cdigo es el siguiente:

Ejercicio N 14:

#VRML V2.0 utf8 #Ejemplo de un cilindro con textura. Shape { appearance Appearance { texture ImageTexture { url ["vrml_8.gif"] } } geometry Cylinder { height 2.0 radius 0.6 top FALSE bottom FALSE

} } Shape { appearance Appearance { texture ImageTexture { url ["vrml_9.jpg"] } } geometry Cylinder { height 2.0 radius 0.6 side FALSE } } Como vemos envolvemos al cilindro con la primera imagen, la textura "naranju" pero anulamos la superficie superior e inferior con la sentencia top FALSE y bottom FALSE (debe estar en maysculas). Luego definimos otro cilindro donde cargamos la textura "fondo" pero anulamos la textura de la superficie lateral con side FALSE.

Formatos de las Imgenes:Los formatos de imagen que soporta el VRML 2.0 para el uso de texturas son : .jpg .gif .png.

Textura con MovieTexture:En lugar de usar una imagen podemos usar un video, en formato MPEG, haciendo uso del Nodo MovieTexture, en lugar de ImageTexture, como podemos ver en el siguiente ejemplo:

Ejercicio N 15:#VRML V2.0 utf8

Shape { appearance Appearance {

texture MovieTexture { loop FALSE speed 1 url [ "Andrew.mpeg" ] } } geometry Box {} } En este ejercicio el valor del campo speed controla la velocidad, 1 es velocidad normal, 2 velocidad doble... Y el valor del campo loopindica si queremos que se repita en un bucle ininterrumpido o no. En este caso le indicamos con FALSE que se ejecute una sola vez.

Texto

El Nodo Text:En los mundos virtuales a veces necesitamos utilizar textos como informacin, carteles, comentarios... Para esto existe un Nodo especfico llamado Text, que va incrustado dentro del Nodo Shape. En lugar de insertar una geometra insertamos un texto. Los textos son siempre planos, pero se puede determinar el tipo de fuente, su estilo, color y tamao.

Estructura del Nodo Text:

Text { string ... fontStyle... }

Valores del Nodo Text:

string [] fontStyle length [] maxExtent

MFString SFNode MFFloat SFFloat

Valores del Nodo FontStyle:

family [] horizontal justify [] language leftToRight size spacing style topToBottom

MFString SFBool MFString SFString SFString SFFloat SFFloat SFString SFBool

El Nodo text tiene dos campos importantes que vamos a usar en nuestros ejercicios: string ( cadena o fila) cuyo valor es el texto que se quiere mostrar y fontstyle cuyo valor es un sub Nodo llamado Fontstyle.

Valor del campo string:string [ "Esta es la primera lnea de texto", "esta es la segunda lnea", "esta es la tercera lnea", "etc" ]

El texto debe ir entre comillas, separada cada lnea por una coma y encerrado todo entre corchetes.

Nodo FontStyle:FontStyle { family "SERIF" style "BOLD" size 1 spacing 1 } En este Nodo los campos ms usados son : family que determina el tipo de letra que puede ser "SERIF", "SANS" o "TYPE WRITER" Deben ir con maysculas. style : "BOLD" (negrita), "ITALIC" (cursiva), "BOTH" (negrita y cursiva) o "NONE" (ni negrita ni cursiva). spacing: separacin entre lneas y size: determina el tamao de la fuente pero en unidades VRML es decir 1 equivale a 1 metro. Tambin se puede justificar el texto a la izquierda: "BEGIN" (izquierda), "MIDDLE" (centrado) o "END" (derecha).

Vamos a hacer un ejercicio que despliegue el texto :"Bienvenido a la Programacin con VRML 2". Y otro que muestre el logo de VRML en una esfera y a un costado el texto,

Ejercicio N 16:

#VRML V2.0 utf8 Shape { appearance Appearance { material Material { diffuseColor 1 0 1 } } geometry Text { string [ "BIENVENIDO", "a la", "Programacion con VRML 2."] }

}

Ejercicio N 17:

#VRML V2.0 utf8

Shape { appearance Appearance { texture ImageTexture { url [ "ban.gif" ] } } geometry Sphere { radius 60

}} Transform { children [ Shape { appearance Appearance { material Material { diffuseColor 0 1 0 } } geometry Text { string ["Programando con VRML 2."] fontStyle FontStyle {

family ["Comic Sans MS", "SANS"] size 18 justify ["CENTER"] } } } ] translation 90 -10 30 }

El Nodo Transform

Rotacin:Como vimos cuando usamos el Nodo Transform, todos los objetos son creados por defecto en el centro del escenario de realidad virtual. Y vimos que para modificar esto con el Nodo Transform usamos las coordenadas x, y, z, para determinarle al objeto una nuev posicin. a Este nuevo sistema de coordenadas puede tambin sufrir transformaciones como ser trasladado a un punto determinado, ser girado un determinado ngulo y puede tener una escala o sea un tamao relativo. Transform { translation ... rotation... scale... children [] } Como sabemos el campo children a grupa a los objetos afectados a los cambios.

Traslacin (Translation):Nosotros veamos que si le dbamos un valor x de 20, y de 0, z de 0, entonces la figura se traslada sobre la coordenada x 20 metros a la derecha. Si el valor es negativo se traslada 20 metros a la izquierda. Y esto evitaba que se nos superpongan las figuras. Ahora veremos otra variacin que es el campo rotation. translation 20 0 0

Rotacin o Rotation:rotation 1 0 0 1.57 Aqu vemos cuatro valores, los tres primeros se corresponden a las tres coordenadas y pueden tener el valor 0 1 y representan la rotacin alrededor de cada eje en el orden x, y, z. Es decir: o o o Rotacin sobre el eje X = 1 0 0 Rotacin sobre el eje Y = 0 1 0 Rotacin sobre el eje Z = 0 0 1

La cuarta cifra representa el ngulo girado, pero expresado en radianes. Para calcular la correspondencia entre grados y radianes, hay que tener en cuenta que 180 equivalen al nmero pi en radianes, es decir 3.14 radianes. Por tanto, 90 sera la mitad de 3.14 o sea 1.57 radianes. Para facilitarles las cosas les incluyo un Script que permite hacer el clculo en forma automtica, que nos facilit nuestro profesor Sandy Ressler, un genio en VRML. La siguiente figura ilustra un giro de 90 alrededor del eje x lo que hace que el trompo se vea desde arriba.

Ejercicio N 18:#VRML V2.0 utf8 Transform { children [ Shape { appearance Appearance { material Material { diffuseColor 1 0 0 } }

geometry Cone {} } Shape { appearance Appearance { material Material { diffuseColor 0 0 1 } } geometry Cylinder { radius 0.1 height 5 } } Shape { appearance Appearance { material Material { diffuseColor 1 0 0 } } geometry Sphere {radius 0.8 } } ] rotation 1 0 0 1.57 # 90 }

Variacin de la Scala:Tansform { Scale ...

Children [] } Los valores del campo escala o scale representan las variaciones de las dimensiones del objeto con respecto a los ejes x, y, z. En el siguiente ejemplo vemos la figura anterior pero ahora deformada ya que se volvi terriblemente longilnea.

Ejercicio N 19:#VRML V2.0 utf8 Transform { scale 0.5 4 0.5 children [ Shape { appearance Appearance { material Material { diffuseColor 1 0 0 } } geometry Cone {} } Shape { appearance Appearance { material Material { diffuseColor 0 0 1 } } geometry Cylinder { radius 0.1 height 5

} } Shape { appearance Appearance { material Material { diffuseColor 1 0 0 } } geometry Sphere {radius 0.8 } } ] }

Background

Background o Fondo:Por defecto en los escenarios de realidad virtual el fondo es 0 0 0 o sea negro profundo y ese es el valor del campo skyColor . Pero nosotros podemos cambiar este fondo usando el Nodo Background. Como sabemos el campo children a grupa a los objetos afecta dos a los cambios.

Valores de los campos del Nodo Background:groundAngle [] groundColor [] backUrl [] bottomUrl [] frontUrl [] leftUrl [] rightUrl [] MFFloat MFColor MFString MFString MFString MFString MFString

topUrl [] skyAngle [] skyColor []

MFString MFFloat MFColor

Decamos que por defecto el valor de skyColor es [ 0 0 0 ] pero esto poda modificarse. Por ejemplo: Background { SkyColor [ 0.7 1 1 ] # sera un azul claro } Se pueden definir mltiples valores en el campo skyColor, para crear anillos concntricos de color, pero debe incluirse el valor ngulo (angle) de visibilidad asociado con estos colores. El valor skyAngle debe ser dado en radianes (radians), expresando el ngulo hacia abajo desde el polo norte, desde donde se inician los colores. Si creamos un Background de dos colores, necesitamos 2 valores para los colores y un tercer valor para el campo skyAngle que indica el ngulo donde cambiar desde el primer al segundo color. Background { skyColor [ 0.7 1 1 , 0.5 0.9 0.9 ] # dos colores skyAngle [ 0.785] # cambia a los 45 }

Vamos a crear en el siguiente ejercicio un cielo de varios colores:

Ejercicio N 20:

#VRML V2.0 utf8 Background { skyColor [.1 0.1 0.45 #azul 0.1 0.35 0.1 #verde

0.50 0.50 0.1 #amarillo 0.80 0.25 0.05 #naranja 0.50 0 0 ] #rojo #cinco colores # a 45 grados, 60, 90, 75 y 80 skyAngle [ 0.785, 1.04, 1.30, 1.40 ] }

Wallpaper:Para algunas Aplicaciones, se necesita de fondo una imagen. Ms que una imagen un entorno virtual, que mantenga la ilusin de un paisaje, el espacio etc. Este fondo fotogrfico es conocido como un panorama. El campo Backgound con sus seis campos crea las seis caras de un panorama, al que debemos imaginar, como un cubo gigantesco que envuelve al mundo virtual y uno se encuentra en su interior. Nada mejor que un ejemplo para poder comprobarlo.

Ejercicio N 21:#VRML V2.0 utf8 Background { skyColor [ 0.1 0.1 0.45 0.1 0.35 0.1 0.35 0.35 0.1 0.35 0.25 0.05 0.35 0 0 ] skyAngle [ 0.785, 1.04, 1.30, 1.40 ] groundColor [ 0.20 0.20 0, 0.12 0.12 0, 0.05 0.05 0 ] groundAngle [ 1.30, 1.40 ]

backUrl [ " back.jpg" ] bottomUrl ["bottom.jpg" ] frontUrl ["front.jpg" ] leftUrl [ "left.jpg" ] rightUrl [ "right.jpg" ] topUrl [" top.jpg" ] }

Navegacin y Animacin

El Nodo Anchor :No debemos olvidarnos que el VRML como lenguaje para la creacin de escenarios virtuales, se despliega en un navegador, instrumento clave para navegar por la Web, entonces es importante que veamos cmo podemos linkear, o vincular nuestro mundo virtual con otros documentos de la Web. Esta vinculacin la vamos a hacer con el Nodo Anchor que tcnicamente quiere decir ancla o anclar, y nos permite conectar documentos entre s, a travs de computadoras, a travs de redes, cruzando mares y continentes. El Anchor crea una unidad, un mosaico a partir de una infinidad de partes.

El Nodo Anchor y sus campos :children [] description parameter [] url [] bboxCenter bboxSize MFNode MDString MFString MFString SFVec3f SFVec3f

El campo url es el documento con el cul nos vamos a vincular, en Internet Explorer al pasar el mouse sobre el objeto que tiene el link veremos la tpica manito con el ndice extendido que nos indica un vnculo posible,y con un doble-click, saltamos a ese sitio. Desaparece el mundo virtual y da lugar a la pgina Web. Veamos un ejemplo usando el Nodo text y linkeamos hacia el buscador Yahoo.

Ejercicio N 24:#VRML V2.0 utf8 DEF TEXT Transform { center 1.5 0 0 children [ Anchor { url ["http:/www.yahoo.com"]

children [ Shape { appearance Appearance { material Material { diffuseColor 1 1 0 } } geometry Text { string ["YAHOO"] fontStyle FontStyle { family ["Comic Sans MS", "SANS"] size 2.0 justify ["CENTER"] } } } ] } ] }

Teleporting y Linking:Pero no solo podemos saltar a una pgina Web, sino que tambin podemos pasar de un mundo virtual a otro sin ningn espacio intermedio. En el siguiente ejercicio al linkear en los nombres de Mirta y Rodolfo pasaremos a un mundo virtual donde estamos mi marido y yo en un mundo virtual.

Ejercicio N 28:#VRML V2.0 utf8 DEF TEXT Transform {

center 1.5 0 0 children [ Anchor { url ["RoMir.wrl"] children [ Shape { appearance Appearance { material Material { diffuseColor 1 1 0 } } geometry Text { string ["Mirta y Rodolfo"] fontStyle FontStyle { family ["Comic Sans MS", "SANS"] size 2.0 justify ["CENTER"] } } } ] } ] }

Animacin:En esta ltima entrega de este curso bsico de VRML no poda cerrar sino con lo que ms me gusta en todo Lenguaje de computacin o programacin y estas son las Animaciones.

Si bien el VRML es un lenguaje de tres dimensiones, segn Mark Pesce en realidad es de cuatro dimensiones ya que el Tiempo sera considerada la cuarta dimensin. Y este tiempo que fluye y provoca modificaciones es fundamental para las Animaciones. El paso del Tiempo se expresa en VRML a travs del Nodo TimeSensor este Nodo es una especie de reloj cuyos campos son:

cycleInterval enabled loop startTime stopTime isActive cycleTime fraction_changed time

SFTime SFBool SFBool SFTime SFTime SFTime SFTime SFFloat SFTime

El evento ms importante del Nodo TimeSensor es fraction_changed. El valor de este campo es un nmero cuyo rango va de 0 a 1, y que asociado al valor del campo cycleInterval ( intervalo de Tiempo) y al Loop( si est a TRUE) produce un bucle que repetir la accin infinitamente. El fraction_changed vuelve a 0 y el TimeSensor se resetea y comienza a contar y repetir el bucle nuevamente. Los mensajes enviados por fraction_changed son la llave para entender la animacin en VRML.

Interpolacin:Para que la computadora pueda ejecutar las animaciones o movimientos, necesita la informacin adecuada que le permita a partir de dos puntos distintos calcular el pase de un punto a otro, a esto se llama interpolacin. VRML tiene un Nodo PositionInterpolator que le permite manipular la interpolacin que combinado con el TimeSensor permite enviar a la computadora la informacin requerida para ejecutar una animacin. El Nodo tiene los siguientes campos:

key [] keyValue [] set_fraction value_changed

MFFloat MFVec3f MSFloat SFVec3f

El campo key va de 0 a 1, o sea esto marca el comienzo y fin de la animacin, por eso necesita como mnimo dos valores y el campo keyvalue contiene la lista de los valores de las traslaciones. Si nosostros queremos que el objeto se desplace 2 metros hacia arriba entonces los valores del campo keyvalue deben ser 0 0 0 para el primero y 0 2 0 para el segundo. Un ejemplo aclarar el uso de estos Nodos combinados con la fraction_changed. Vamos a ver mover una esfera verde en el mundo virtual.

Ejercicio N 25:#VRML V2.0 utf8 #Primera animacin DEF PEPA Transform{ children [ Shape{ appearance Appearance { material Material{ diffuseColor 0 1 0 } } geometry Sphere {} } ] } DEF TIMER TimeSensor { loop TRUE cycleInterval 10 startTime 1 #comienzo automtico stopTime 0 #comienzo automtico }

#mueve la esfera 10 metros para arriba DEF SPHERE_MOVE PositionInterpolator { key [ 0, 1 ] keyValue [ 0 0 0, 0 10 0] } #Primero la ruta del timer en la positioninterpolator ROUTE TIMER.fraction_changed TO SPHERE_MOVE.set_fraction #luego el interpolator en el transform ROUTE SPHERE_MOVE.value_changed TO PEPA.set_translation Aqu tambin usamos el DEF para crear nuestro nuestros propios procedimientos. Como esta esfera se nos escapa del mundo virtual en el siguiente ejercicio la mantendremos dentro de la pantalla.

Ejercicio N 26:#VRML V2.0 utf8 #Segunda animacin DEF PEPA Transform{ children [ Shape{ appearance Appearance { material Material{ diffuseColor 0 1 0 } } geometry Sphere {} } ]

}DEF TIMER TimeSensor {

loop TRUE cycleInterval 10 startTime 1 #comienzo automtico stopTime 0 #comienzo automtico } #mueve la esfera 10 metros para arriba DEF SPHERE_MOVE PositionInterpolator { key [ 0, 0.5, 1 ] keyValue [ 0 0 0, 0 5 0, 0 0 0 ] } #Primero la ruta del timer en la positioninterpolator ROUTE TIMER.fraction_changed TO SPHERE_MOVE.set_fraction #luego el interpolator en el transform ROUTE SPHERE_MOVE.value_changed TO PEPA.set_translation

Ahora vamos a ver otra vez a nuestro planeta tierra pero girando sobre su propio eje:

Ejercicio N 27:#VRML V2.0 utf8 #tercera animacin DEF PEPA Transform{ children [ Shape{ appearance Appearance { texture ImageTexture { url [ "worldmap.jpg"] } }

geometry Sphere {} } ] } DEF TIMER TimeSensor { loop TRUE cycleInterval 60 startTime 1 #comienzo automtico stopTime 0 #comienzo automtico } #la esfera rota sobre s misma DEF SPHERE_ROTATE OrientationInterpolator { key [ 0, 0.5, 1 ] keyValue [ 0 1 0 0, 0 1 0 3.14, 0 1 0 6.28 ] } #Primero la ruta del timer en laPpositionInterpolator ROUTE TIMER.fraction_changed TO SPHERE_ROTATE.set_fraction #luego el interpolator en el transform ROUTE SPHERE_ROTATE.value_changed TO PEPA.set_rotation

Para aquellos que les interese les seguir enviando algunos ejercicios ms complejos para que al tener acceso al cdigo puedan hacerlos y tomarlos como referencia para crear sus propios mundos virtuales. Muchas Gracias a todos aquellos que me acompaaron. Hasta siempre.

Sonido y otros Efectos

Nodo Sound y sus campos:

direction intensity location maxBack maxFront minBack minFront priority source spatialize

SFVec3f SFFloat SFFloat SFFloat SFFloat SFFloat SFFloat SFFloat SFNode SFBool

La direccin del sonido por defecto es el valor 0 0 1, la intensidad 0 del campo intensity es el control de volumen para el s onido de origen, y tiene un rango que va de 0(silencio) a 1.0(mximo). En el campo source son permitidos solo dos Nodos : MovieTexture o sea una pelcula MPEG y el AudioClip.

description Loop pitch startTime stopTime url

SFString SFBool SFFloat SFTime SFTime SFString

El nico tipo de archivo soportado en el visualizador es el .wav, aunque hay algunos buscadores que soportan Midi.

Ejercicio N 22:#VRML V2.0 utf8 Background { backUrl [ "cuarto.jpg" ] bottomUrl ["brick.jpg" ] frontUrl ["cuarto.jpg" ]

leftUrl [ "cuarto.jpg" ] rightUrl [ "cuarto.jpg" ] topUrl ["brick.jpg" ] } Sound { source AudioClip { loop TRUE startTime 1 stopTime 0 url [ "kitaro.wav" ] }

DEF y USE:

Para algunas Aplicaciones puede que usemos varias veces la misma figura, o sea tengamos que repetir figuras, o rutinas de Nodos con sus valores de campos igulaes. Para evitar repetir cdigo Usamos el Nodo DEF y USE, o sea defina y luego use. El siguiente ejemplo los ilustra con varias esferas que se repiten:

Ejercicio N 23:#VRML V2.0 utf8 DEF esfera Transform { children[ Shape { appearance Appearance { material Material { diffuseColor 1 0 0 } } geometry Sphere {} }

] } Transform { translation 0 3 0 children [ USE esfera Transform { translation 0 3 0 children [ USE esfera ] } ] }

Sonido y otros Efectos

Nodo Sound y sus campos:direction intensity location maxBack maxFront minBack minFront priority source spatialize SFVec3f SFFloat SFFloat SFFloat SFFloat SFFloat SFFloat SFFloat SFNode SFBool

La direccin del sonido por defecto es el valor 0 0 1, la intensidad 0 del campo intensity es el control de volumen para el s onido de origen, y tiene un rango que va de 0(silencio) a 1.0(mximo). En el campo source son permitidos solo dos Nodos : MovieTexture o sea una pelcula MPEG y el AudioClip.description Loop pitch startTime stopTime url SFString SFBool SFFloat SFTime SFTime SFString

El nico tipo de archivo soportado en el visualizador es el .wav, aunque hay algunos buscadores que soportan Midi.

Ejercicio N 22:#VRML V2.0 utf8 Background { backUrl [ "cuarto.jpg" ] bottomUrl ["brick.jpg" ] frontUrl ["cuarto.jpg" ] leftUrl [ "cuarto.jpg" ] rightUrl [ "cuarto.jpg" ] topUrl ["brick.jpg" ] } Sound { source AudioClip { loop TRUE startTime 1 stopTime 0 url [ "kitaro.wav" ] }

DEF y USE:

Para algunas Aplicaciones puede que usemos varias veces la misma figura, o sea tengamos que repetir figuras, o rutinas de Nodos con sus valores de campos igulaes. Para evitar repetir cdigo Usamos el Nodo DEF y USE, o sea defina y luego use. El siguiente ejemplo los ilustra con varias esferas que se repiten:

Ejercicio N 23:#VRML V2.0 utf8 DEF esfera Transform { children[ Shape { appearance Appearance { material Material { diffuseColor 1 0 0 } } geometry Sphere {} } ] } Transform { translation 0 3 0 children [ USE esfera Transform { translation 0 3 0 children [ USE esfera ]

} ] }