Free Web Hosting Provider - Web Hosting - E-commerce - High Speed Internet - Free Web Page
Search the Web








CURSO VRML
por el arquitecto y profesor
Gonzalo Vélez Jahn
(ARQUITECTURA-L)



entrega 13


-------------------------------------------------------------------------
5.10- NODOS DE TRANSFORMACION. CONSIDERACIONES.
         Nodos:  Rotation, Scale, Transform, Translation.
-------------------------------------------------------------------------


--> Nodo TRANSLATION  X Y Z

  Permite desplazar en el espacio al objeto al cual se ha vinculado. Por
  ejemplo:

        Transform {
        Translation { translation 10 -15 0 }
        }

  significa que se esta describiendo una translacion del cuerpo segun 10
  unidades segun la direccion positiva del eje X y 15 unidades segun  la
  direccion negativa del  eje  Y.  No  se  indica  desplazamiento  segun
  el eje Z.

Recuerdese que siempre las transformaciones a impartir  ANTECEDEN  a  la
descripcion geometrica de los  objetos  a  ser  transformados  (rotados,
girados, cambiados de escala, etc.).

EJERCICIO- REPRESENTAR DOS ESFERAS DE COLORES

#VRML V1.0 ascii

    Separator {

        Separator { # esfera roja, en el centro de la pantalla- defecto)
            Material {
                diffuseColor    1 0 0
            }
            Sphere {}
        }
        Separator { # esfera azul transladada sobre el eje X positivo).
            Translation {
                translation 2.25 0 0
            }
            Material {
                diffuseColor    0 0 1
            }
            Sphere {}
        }
    }

- Nodo ROTATION X Y Z   ANGULO (EN RADIANES)

  Resulta importante destacar que la formula para poder  expresar  grados
  en radianes es:
                   Radianes = grados x 3.1416 / 180

  Para rotar un cuerpo se indica mediante  unos o  ceros  en las casillas
  destinadas a x, y, z cuales son los ejes con despecto  a  los cuales se
  rotara el objeto en el espacio. Se asume que  el  origen de coordenadas
  se encuentra en el centro del cuerpo. Y luego  se indica  el angulo  de
  rotacion en radianes.

EQUIVALENCIAS PARA ANGULOS NOTABLES:

   45 grados  ---->  .7854 radianes.
   90 grados  ----> 1.5708 radianes.
  180 grados  ----> 3.1416 radianes.
  270 grados  ----> 4.7124 radianes.
  360 grados  ----> 6.2832 radianes.

EJEMPLO:

        Transform {
             rotation 1 1 1 3.14
        }

Significa que el cuerpo asi tratado realizara una rotacion  alrededor  de
los ejes x, y, z segun un angulo de 3.14 radianes (180 grados).

EJERCICIO- ROTAR UN CUBO ESPACIALMENTE SEGUN EL EJEMPLO ANTERIOR

#VRML V1.0 ascii

Separator {
        Material {
                 diffuseColor 1 0 0
        } #Material

        Rotation { rotation 1 1 1 3.14 }

                 Cube{
                        width   9
                        height  9
                        depth   9
                } #Cube
} #Separator

EJERCICIOS INTEGRADORES:

Se sugiere que el participante intente resolver el mismo estos ejercicios
que reunen diferentes aspectos de los conocimientos impartidos, pudiendo
consultar como ayuda las soluciones aqui planteadas.

************************************************************************
EJERCICIO INTEGRADOR- Representar  un  cubo  coloreado  de  verde;  luego
        #1            transladarlo segun ejes  X y Z en  el  espacio  3-D
                      luego  rotarlo  180  grados  en  tres  direcciones,
                      duplicandolo de tamano y, finalmente  representarlo
                      otra vez utilizando  como  mecanismo  el  del  cubo
                      dibujado inicialmente y coloreandolo de rojo..
************************************************************************

SOLUCION:

#VRML V1.0 ascii

Separator {

        Material {
                 diffuseColor 0.30 0.36 0.21
        } #Material

        Translation { translation 0 0 20 }

            DEF Cube1 Separator{
                 Cube{
                        width   3
                        height  3
                        depth   3
                } #Cube
                } #Cube1 Separator
        Material {
                 diffuseColor 1 0 0
        } #Material
        Translation { translation 10 10 0 }
        Rotation    { rotation 1 1 1 3.14 }
        Scale       { scaleFactor 2 2 2 }
             USE Cube1
} #Separator


CONSTRUCCION DE ESPACIOS ARQUITECTONICOS

                              ( "Dame una pared y construire un mundo" )


Es  posible  construir  paredes  apoyandose  para  ello  en  el  uso  del
"primitivo" CUBO y haciendo una de  sus  dimensiones  muy  pequeñas  como
espesor de la pared.

Ejemplo de Pared:

#VRML V1.0 ascii

Separator {

        Material {
                diffuseColor 1 1 0
        } #Material

Cube {
     width  5
     height 4
     depth  0.2
} #Cierra Cube
} #Cierra Separator


************************************************************************
EJERCICIO INTEGRADOR 2-    CONSTRUIR UN AMBIENTE constituido por:
                           un piso, cuatro paredes, ventana y
                           puerta y rotar resultados para mostrar-
                           los en la pantalla del visualizador.
                           Luego, NAVEGAR manualmente entrando
                           por la puerta mediante el visualizador..
************************************************************************
#VRML V1.0 ascii

Separator {
        Material {
                diffuseColor 0.8 0.8 0.8
        } #Material

Translation { translation 0 0 20 }

Rotation { rotation 1 0 0 0.8500 }
Rotation { rotation 0 1 0 0.7854 }
Rotation { rotation 0 0 0 0.7854 }

    DEF Piso Cube {
        width     7
        height    0.2
        depth     7
    }
 Translation {
    translation 0 1.5 -3.5
  } #Translation

    DEF Pared1 Cube {
        width     7
        height    3
        depth     0.2
    }
 Translation {
    translation -3.2 -1 3.5
  } #Translation

    DEF Pared2 Cube {
        width     0.2
        height    1.3
        depth     7
}
 Translation {
    translation 3.2 1 3.5
  } #Translation

USE Pared1

 Translation {
    translation 3.5 0 -4.2
  } #Translation

    DEF Pared3 Cube {
        width     0.2
        height    3.0
        depth     5.8
}
 Translation {
    translation -6.8 1.2 .8
  } #Translation

    DEF Pared4 Cube {
        width     0.2
        height    .5
        depth     7
}
    }

Si el participante desea experimentar mas a fondo, podra:

         1) Particionar el espacio interno, subdividiendolo.
         2) Cambiar colores y texturas a paredes y piso.
         3) "Fabricar" e incorporar mobiliario.
         4) Añadir una "escala humana" (persona).

--> Nodo de ESCALA X Y Z

El nodo de Escala puede cambiar de escala (de hecho, REDIMENSIONAR) en
funcion de los ejes x (ancho), y (alto), z (profundidad).

EJEMPLO:

    #VRML V1.0 ascii

    Separator {
        Scale {
            scaleFactor 1 2 3
        }
    }

El numero indicado en el lugar de la correspondiente coordenada indica
si la escala se duplica (2) o se triplica (3).

--> El Nodo TRANSFORM
    (Center,  ScaleFactor,   ScaleOrientation,    Rotation,  Transform,
     Translation).

Como opciones de defecto, los OBJETOS en una ESCENA de VRML poseen:
      - Su UBICACION en el centro de la pantalla.
      - Su ORIENTACION segun la opcion de defecto de orientacion de la
        escena.
      - Sus dimensiones en funcion de sus coordenadas especificas o
        de sus dimensiones especificadas, en el caso de PRIMITIVAS.

Cuando quiera que resulta necesario cambiar alguna de las opciones de
defecto para un objeto determinado (lo cual ocurrira casi siempre),
deberá recurrirse a uno o mas nodos de transformacion. Las tareas de
estos nodos son:

       - Cambiar el objeto de ubicacion respecto a su CENTRO original.
       - Cambiar la orientacion de los EJES del objeto.
       - Cambiar las DIMENSIONES del objeto.

El Nodo TRANSFORM es  utilizado  para  dar  escala,  posicionar  o  rotar
integradamente  una  forma  en  una  escena.  Adicionalmente,  como  esto
simplifica la  descripcion de operaciones lo hace de gran  utilidad  para
situaciones de mayor grado de complejidad.que  Su sintaxis VRML es:

Transform {
      center              #x y z
      scaleFactor         #x y z
      scaleOrientation    #x y z
      rotation x y z      #x y z  angulo (en radianes)
      translation x y z   #x y z
          }

Aun cuando pueden listarse los campos en cualquier orden, el orden en que
se desarrollen las operaciones a efectuar sera siempre el mismo:  escala-
miento, rotacion y translacion.

Los diferentes campos pueden, sucintamente, describirse asi:

- CENTER X Y Z
  Las coordenadas de Centro son  particularmente  importantes  cuando  la
  accion a  ejecutar  concierne  a  rotacion,  puesto  que  la  misma  se
  ejecutara  en derredor de ese punto.  Es importante destacar que  estas
  coordenadas  conciernen  al centro del OBJETO y  no al del  Sistema  de
  Coordenadas, razon por la cual estas  rotaciones  se  llevaran  a  cabo
  identicamente donde quiera que se encuentre el  cuerpo  a  ser  rotado.
  Por ejemplo "center 10, 0, 10" significa que estas coordenadas reubican
  al centro del objeto, el cual, por defecto, esta inicialmente en 0,0,0.

  CENTER permite especificar el  punto  alrededor  del  cual ocurrira  la
  rotacion. Supongamos que queremos rotar un cubo  alrededor  del  eje  Y
  que pasa por su centro. Supongamos asi mismo que el centro del cubo se
  encuentra en (-45, 30, 0). Para lograr la rotacion buscada deberemos
incluir las lineas:

center -45 30 0
       y
rotation 0 1 0 2

- SCALEFACTOR  X Y Z
  Indica   cual  es  el  factor  de  escala  que  queremos  adoptar  para
  representar nuestro  "Mundo". Los factores   menores  que  "1"  reducen
  eltamano original del objeto y los  mayores  que  "1"  lo  incrementan.
  En otras palabras el  "factor  de  escala"  nos  permite  redimensionar
  objetos sin tener que recurrir, para ello, a variables algebraicoas.

        Transform {
        Scale { scaleFactor  2 1 3 }
        }
  Significa   duplicar   el  ancho  "x"  del  objeto,  y   triplicar   su
espesor "z"  sin  modificar su altura "y".

- SCALEORIENTATION  X Y Z
  Sirve para especificar la forma de rotar el sistema de ejes coordenados
  del objeto ANTES de someter a este  a  un  cambio  de  escala,  permite
  redireccionar al  cuerpo en  cualquiera, o combinaciones de,  sus  tres
  dimensiones.

************************************************************************
EJERCICIO INTEGRADOR 3-    COMPOSICION CON VOLUMENES. Hacer una
                           composicion 3-D utilizando CONO, CUBO,
                           CILINDRO Y ESFERA y asignando color.
************************************************************************
SOLUCION:

#VRML V1.0 ascii

Separator {

        Material {
                diffuseColor 1 1 0
                shininess 0.2
                transparency 0
        } #Material

        MaterialBinding {
                value   DEFAULT
        } #MaterialBinding

        DEF Cone1 Separator {

                Translation {
                        translation 0 30 0
                } #Translation

                Cone {
                        parts   ALL
                        bottomRadius    15
                        height          30
                } #Cone

        } #Cone1 Separator

        DEF Cube1 Separator {

                Transform {
                        rotation 0 1 0 .7
                } #Transform

                Translation {
                        translation -45 30 0
                } #Translation

                Cube {
                        width   30
                        height  30
                        depth   30
                } #Cube

        } #Cube1 Separator

        DEF Cylinder1 Separator {

                Translation {
                        translation 45 30 0
                } #Translation

                Cylinder {
                        parts ALL
                        radius 15
                        height 30
                } #Cylinder

        } #Cylinder1 Separator

        DEF Sphere1 Separator {

                Texture2 {
                        filename "wood4.jpg"
                }

                Translation {
                        translation 0 75 0
                } #Translation

                Sphere {
                        radius 15
                }#Sphere

        } #Sphere1 Separator

} #Separator

Observese que las opciones Center, ScalingFactor, ScaleOrientation poseen
un grado limitado de autonomia que les permite actuar  independientemente
del nodo TRANSFORM. Sin embargo, al no ser nodos como tales, no admiten
la posibilidad de subordinar otros nodos bajo el esquema padre-hijos.

                                                                ...sigue


Siguiente entrega.
Indice del CURSO VRML.