lunes, 23 de abril de 2012

PORTADA


I
INSTITUTO POLITECNICO NACIONAL

Centro de Estudios Cientificos y Tecnologicos No. 3
“Estanislao Ramirez Ruiz”

Entornos Virtuales

Tutorial

4IM4

Computación

Integrantes:

Del Valle Armas Daniel Alberto

Medina Salas Alejandro

sábado, 21 de abril de 2012

Entornos Virtuales


Entornos Virtuales

Este es un blog, donde su principal función es hablar sobre lo que hemos aprendido durante el semestre en la materia de entornos virtuales.

Es una materia que se encarga de enseñarnos como crear mundos virtuales a partir de un lenguage modelador en este caso VRML y utilizando Cortona Viewer para ver nuestros mundos en 3D.


En un mundo VRML lo que se define es simplemente un grupo de objetos. Estos objetos pueden contener geometria 3D, imagenes,colores,videos,etc. Los cuales en VRML se conocen como nodos.

viernes, 20 de abril de 2012

¿Que es VRML?


(Virtual Reality Modeling Language)

Este es un lenguaje de modelado de mundos virtuales en tres dimensiones. 
Este nos sirve para hacer mundos o maquetas virtuales sin necesidad de utilizar materiales. También nos ayuda a dar una buena presentación a alguna pagina web que hayamos creado.

Lo único que necesitamos para comenzar con VRML es:

Un editor de textos sencillo.

El Block de notas es ideal. También valdrá cualquier otro editor en modo ASCII. También podemos utilizar editores especializados como el VRML PAD.

Un visualizador VRML .

Para ver los resultados, que se instala en el navegador como cualquier otro plug-in. Posiblemente tu navegador ya esté preparado para ver los mundos en VRML, si no es así, tienes que instalarlo. En este caso utilizaremos el Cortona viewer 3D.

¿Que es Cortona?


Cortona3D es un visor 3D rápida y altamente interactiva

Un conjunto de garantías en 3D optimizados renderizadores la mejor calidad visual en ambos equipos con las últimas tarjetas de video-y los que tienen más capacidades básicas de la tarjeta de vídeo.

Cortona3D Viewer (anteriormente conocido como Cliente Cortona VRML) funciona como un plug-in VRML para los navegadores de Internet más populares .

Con Cortona3D, puede crear una amplia gama de aplicaciones 3D - a partir de la visualización de datos científicos para avanzados 3D habilitados para servicios en línea

¿Que es un nodo?


Un nodo es la estructura mínima indivisible de un fichero VRML y tiene como misión la de definir las características de un objeto o bien las relaciones entre distintos objetos.
La mayoría de los nodos pueden repetirse tantas veces como sea necesario en una escena, salvo una serie de nodos especiales como los que definen la niebla o la panorámica del mundo virtual que aparecen un sola vez.
 
 Los nodos a su vez contienen campos que describen propiedades. Todo campo tiene un tipo determinado y no se puede inicializar con valores de otro tipo. De este modo, cada tipo de nodo tiene una serie de valores predeterminados para todos sus campos, de forma que cuando lo utilicemos en una escena sólo debemos indicar aquellos campos que se quieran modificar.
 
Los campos pueden ser simples o campos que indiquen a vectores u otros nodos.  

Reglas que seguir


En VRML hay  reglas para su mejor uso las cuales son:
  • VRML es un lenguaje sensible a mayúsculas y minúsculas, lo cual ha de ser tenido en cuenta a la hora de asignar nombres.  
  • Todos los nodos han de comenzar siempre con letra mayúscula.  
  • Los campos de los nodos deben comenzar siempre con letra minúscula.  
  • Los campos de los nodos deben comenzar siempre con letra minúscula.  
  • Los números se escriben en punto flotante.  
  • Utilizar una línea distinta para cada nodo, para cada campo y para cada valor de cada campo.   
  • Indentar cada línea, según su jerarquía.   
  • Colocar cada símbolo de cierre en el nivel de indentación que le corresponda.   
  • Poner las líneas de comentario necesarias al mismo nivel que lo que se comenta.
  • Poniendo nombres propios a los nodos   

Lo mas basico

En VRML hay toda una serie de objetos predefinidos que forman el conjunto de figuras primitivas, las cuales son
  •                  BOX : Cubos
  •        SPHERE: Esferas
  •       CONE: Conos
  •       CYLINDER: Cilindros


Estas son las figuras más básicas y simples en VRML. Sin embargo son muy esenciales en la creación de mundos.

Utilización de nodos

Los cuatro nodos anteriores no se pueden utilizar directamente, ya que necesitan de otros nodos y reglas para su funcionamiento en este caso el shape(forma).

Te dare un ejemplo de código para la realización de un simple cubo en VRML

#VRML V2.0 utf8

Shape {
geometry Box { size 2.0 2.0 2.0 }
}









Colores en VRML


 El campo appearance va a permitir seleccionar el color y la textura del objeto que va a ser representado dentro del escenario virtual. Este campo toma como valor un nodo de  tipo Appearance, el cual a su vez, posee un campo denominado material que toma como valor un nodo de tipo Material.
 
      El nodo Material es el que controla las propiedades del color (selección del color, del brillo, del grado de transparencia, etc.) que se van a dar al objeto.
 
     Los colores que se le dan a los objetos son colores RGB, es decir, vienen dados por tres valores en coma flotante, cada uno de los cuales representa uno de los colores primarios (Red, Green, Blue ) [ Rojo,Verde y Azul]. El valor 0.0 representa la ausencia de color y el 1.0 la máxima intensidad. 


Un color se representa por un grupo de tres cifras. La primera cifra se refiere a la cantidad de color rojo, la segunda a la cantidad de color verde y la tercera a la cantidad de color azul.
Las cifras pueden oscilar desde 0.0 (nada de ese color) hasta 1.0 (todo de ese color), pasando por cualquier valor intermedio. Por tanto, en el ejemplo anterior se trata de un color rojo puro.
He aquí algunos ejemplos de colores:  

Color
Rojo
Verde
Azul
Rojo
1
0
0
Verde
0
1
0
Azul
0
0
1
Blanco
1
1
1
Negro
0
0
0
Amarillo
1
1
0
Violeta
1
0
1
Marrón
0.5
0.2
0



Nodo Material


Nodo Material: 

diffuseColor: 

    El campo diffuseColor representa  lo que la mayoría de los usuarios llamarían como el color del objeto.
 
emissiveColor: 

     El campo emissiveColor se utiliza para fijar el color del brillo del objeto, cuando dicho objeto necesite ser visible en la oscuridad. De esta forma se consigue un efecto en donde la figura representada parece iluminada desde el interior mediante una luz de un determinado color.
 
     La configuración por defecto de este campo es el negro, ya que la mayoría de los objetos normalmente no brillan.
 
  specularColor: 

     El campo specularColor es un parámetro avanzado que permite indicar qué color de luz refleja el objeto. Por ejemplo, una cama roja no refleja un color rojo, pero una olla rojiza  si puede reflejar su color.

ambientIntensity: 

     Este campo es otro parámetro avanzado que indica la cantidad de luz ambiental (producida por los diferentes focos de luz del escenario virtual) es reflejada por el objeto.
 
     Toma valores en coma flotante entre 0.0 y 1.0.
 
shininess: 

     El campo shininess controlan el brillo de un objeto. Toma valores en coma flotante entre 0.0 y 1.0.

transparency: 

     El campo transparency indica el nivel de transparencia del objeto. Toma valores en coma flotante entre 0.0 y 1.0, siendo el 1.0 el nivel máximo de transparencia (objeto invisible) y el 0.0 el nivel mínimo (objeto totalmente opaco). 
     El valor por defecto es el 0.0.



Shape{ 
   appearance Appearance{ 
      material Material{ 
         diffuseColor           color_RGB 
         emissiveColor        color_RGB 
         specularColor        color_RGB
         ambientIntensity   valor 
         transparency         valor 
         shininess               valor 
      } 
   } 
   geometry ... 








Nodo Text


Como en cualquier procesador de textos, se nos permitirá indicar el tipo de fuente, su estilo, su tamaño el espaciado entre caracteres, justificación de los parrafos, etc.


Tiene, por tanto, dos campos:

  • string:  precisamente el texto que se quiere poner.
  • fontStyle:  es un sub-nodo llamado FontStyle 

El campo fontStyle es opcional.

 Si se omite, el texto tendrá el estilo de fuente por defecto.

En este ejemplo, el nodo FontStyle tiene los siguientes campos:

  • family: Determina la familia de fuente.
  • style: Se puede escoger entre "BOLD" , "ITALIC" , "BOTH" , o "NONE" .
  • size: Determina el tamaño de la fuente, pero en unidades VRML.
  • spacing: Determina la separación entre líneas, también en unidades VRML.

    Text {
            string ["linea_texto 1", 
                         "linea_texto 2",
                                   .
                                   .
                                   .
                          "linea_texto N",]     
             fontStyle FontStyle {
                                                family "Nombre_Fuente",
                                                style "Estilo_Fuente",
                                                size Tamaño_Fuente
                                                spacing espaciado_entre_caracteres
                                                justify "justificación_del_texto"
                                              }
        }  

Nodo Transform


Por defecto todos los objetos (Shapes) se construyen en el centro del escenario virtual. El nodo transform nos va a permitir evitar esto, indicando la posición, orientación y tamaño de los diferentes objetos que va a crear.
 
     Cada grupo creado mediante el nodo Transform va a poseer su propio sistema de coordenadas, cuyos atributos se determinan a través de los campos traslation, rotation y scale, los cuales son optativos.  

 El campo translation permite indicar la posición del origen del nuevo sistema de coordenadas perteneciente al grupo dentro del sistema de coordenadas de nodo que lo engloba (nodo padre).


 El campo rotation nos permite girar el sistema de coordenadas del grupo alrededor de uno de los ejes del sistema de coordenadas del nodo padre. Para ello, además de indicar sobre que eje se desea realizar el giro, se ha de hacer referencia al grado de inclinación de dicho giro (en radianes).
  
 A través del campo scale podemos aumentar o reducir el tamaño de los ejes del sistema de coordenadas del grupo utilizando factores de escala que toman como referencia los ejes de coordenadas del sistema del nodo padre. De esta forma aumentamos o disminuimos el tamaño de los objetos que se crean.

Sintaxis: 
Transform{
   translation  Eje_X  Eje_Y  Eje_Z
   rotation      Eje_X  Eje_Y  Eje_Z  Ángulo
   scale          Eje_X  Eje_Y  Eje_Z
   children[...]
}


Ejemplo



Nodo Group


Existe el nodo Group que permite tratar a un conjunto de nodos como una entidad única, pero sin efectuar ninguna transformación en ellos.

Tiene un campo llamado children (en inglés, niños o hijos), cuyo valor (los puntos suspensivos) va entre corchetes [ y ], y que como veremos a continuación, es la lista de los objetos que se quieren agrupar, representados por sus nodos Shape respectivos

No es tan grave en este caso, pero imaginemos que se quiere dotar de esa misma apariencia, por ejemplo a cinco objetos distintos (como va a ser el caso del ejemplo práctico de este capítulo). 

Entonces, habría que repetir cinco veces todo el nodo Appearance en cada uno de los cinco objetos, lo cual sería bastante engorroso, además de complicar innecesariamente el código.

Hay una solución prevista para simplificar estas repeticiones, y es que se puede definir un nodo que se piensa repetir en el código, poniéndole un nombre arbitrario.

Se puede definir, para el ámbito de un documento VRML, que este tipo de cilindro tenga un nombre arbitrario, por ejemplo ColumnaRepetida

En el ejemplo anterior de la caja y el cono, lo que está repetido es el nodo Appearance. Vamos a definirlo, en la primera ocasión que se utiliza con el nombre, por ejemplo, PorDefecto y en la segunda vez utilizar sólo el comando USE

Group {
   children [
      Shape {
         appearance DEF PorDefecto Appearance {
            material Material {   }
         }
         geometry Box {
            size 2 0.5 3
         }
      },
      Shape {
         appearance USE PorDefecto
         geometry Cone {
            height 3
            bottomRadius 0.75
         }    
      }
   ]



Nodo Background


Incorpora un plano de suelo sombreado, texturas y cielo escénico. Sólo se emplea el primer nodo Background que se encuentre, debiéndose especificar en el archivo principal. 

 El campo skyColor determina el color del cielo en los distintos ángulos de la esfera que lo contiene.El primer valor de este campo determina el color del cielo en los 0.0 radianes de la esfera, es decir, el color que tiene el cielo en el lugar donde se une con el suelo.
 
     El campo skyAngle es utilizado para indicar los ángulos (en radianes) en los que un nuevo color debe aparecer. El campo skyColor debe poseer N+1 colores si en skyAngle se han definido N ángulos, ya que el ángulo 0.0 (que es el que se corresponde con el cielo del horizonte) no se incluye en este último.
 
     Los campos groundColor y groundAngle, son equivalentes a skyColor y skyAngle respectivamente, pero referidos a la esfera que representa el suelo.
 
     Si se especifica más de un color, se interpolará el color del suelo entre los colores de 0 a 90 grados en el horizonte (plano X-Z). De forma similar se interpretan los colores del cielo, de 90 a 180 grados en la vertical (plano X-Y).  

El fondo de tipo Panorama consiste en seis imágenes, cada una de las cuales ocupa una de las caras de una inmensa caja centrada en el eje de coordenadas. 

Las imágenes que ocupan cada una de las caras vendrán determinadas por los valores de los campos backUrl, bottomUrl, frontUrl, leftUrl, rightUrl, topUrl

Todos estos campos toman como valor una dirección URL de un fichero que contiene una imágen en formato jpeg, gif o png.      

Backgroud{
    groundAngle     [ ]
    groundColor     [ ]
    skyAngle          [ ]
    skyColor          [ ]
    backUrl           "dirección_URL"
    bottomURL     "dirección_URL"
    frontUrl           "dirección_URL"
    leftUrl              "dirección_URL"
    rightUrl           "dirección_URL"
    topUrl              "dirección_URL"
}