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 14


-------------------------------------------------------------------------
5.12- NODOS DE CAMARA- CONSIDERACIONES
Nodos: OrthographicCamera, PerspectiveCamera
-------------------------------------------------------------------------

--> Nodo PERSPECTIVE CAMERA

Este nodo simula la forma en  que  vemos  el  mundo  real  utilizando  el
principio de perspectiva que hace que los objetos mas cercanos  aparezcan
de mayor tamano que los que se encuentran mas lejanos.

PUNTOS DE VISTA

A los efectos del presente curso, un PUNTO DE VISTA es  aquella  posicion
exacta desde la que se contempla un mumdo VRML y que ha sido definida  en
el grafo de ESCENA de dicho mundo. Hasta ahora nos hemos  apoyado  en  la
opcion de defecto provista por el VRML 1.0. Opcion  que  generalmente  se
define como "Vista de Entrada". La vista de entrada es la posicion  desde
la cual contemplamos al mundo cuando  este  es  visualizado  graficamente
por el browser si no se ha definido previamente un  punto  de  vista. Sin
embargo es posible, y a menudo deseable, incorporar otros puntos de vista
que auxilien al visitante de un mundo virtual en la compleja tarea (y  el
subsecuente consumo de tiempo de recorrer y visualizar un mundo virtual).
Para ello nos referiremos al presente nodo.

Para visualizar un mundo  virtual  que  dependa  solo  de  su  opcion  de
defecto, desde una dterminada posicion es necesario  navegar  manualmente
hasta alcanzar la  misma.  Esto  significa  un  procedimiento  que  puede
resultar lento y complejo. Lo que  nos  permite  la  insercion  del  nodo
PERSPECTIVE CAMARA es la posibilidad de "saltar"  a  un  punto  de  vista
predeterminado y convenientemente dispuesto sin tener que apoyarnos en un
engorroso procedimiento manual.

Para resolver esta situacion, el VRML utiliza los  denominados  nodos  de
camara OrthographicCamera  y  PerspectiveCamera  que  en  cierto  sentido
podrian considerarse nodos de propiedad dado que 1) aparentan transformar
las formas que intervienen en una escena y 2) algunos de  sus  parametros
se comportan como un lente de efectos especiales creando  la  ilusion  de
distorsion de la imagen aun despues que el participante ha  navegado  mas
alla de la posicion adoptada para la camara.

En la practica, de los dos nodos mencionados, solo  el  nodo  PERSPECTIVE
CAMARA   es   comunmente  soportado  por  los  visualizadores  (browsers)
disponibles para el VRML 1.0.

La sintaxis general del PerspectiveCamera es la siguiente:

    #VRML V1.0 ascii

    Separator {
        PerspectiveCamera {
            position        0 0 1
            orientation     0 0 1  0
            focalDistance   5
            heightAngle     0.785398
        }
    }

PROPIEDADES

El nodo PerspectiveCamera posee tres  campos  basicos  Los  primeros  dos
resultan obvios: La POSCION y la ORIENTACION de la  camara.  La  posicion
esta representada por un conjunto de tres coordenadas,  mientras  que  la
orientacion se  logra  a  traves  de  un  angulo  vertical  expresado  en
radianes. El tercer campo  es  aquel  correspon diente a DISTANCIA  FOCAL
("focalDistance"), y el cual  esta  representado  por  la  distancia  que
existe entre la camara, siguiendo la  directriz  del  punto  de  enfoque,
hasta   encontrar  el  denominado  "punto  focal"   empleado  por  muchos
browsers para proveer un  punto con  respecto  al  cual la  camara  puede
rotar.

Mediante este nodo podemos especificar nuevas ubicaciones para la  camara
que pueden ser interpretadas por ciertos browsers. Si utilizamos una sola
posicion estaremos especificando  unicamente  el  punto  en  el  cual  el
participante inicia su recorrido.Por ejemplo, imaginemos que posicionamos
la camara en el sitio (0, 30, 240) y  mirando  en  la  direccion  -z  (Es
decir, mirando hacia la pantalla del computador) con una distancia  focal
de 5 y un angulo de altura equivalente a .785 radianes.  En ese  caso  el
programa que utilizaremos como  ejemplo  para  describir  un  determinado
mundo virtual sera, refiriendonos a  aplicaciones  anteriormente  vistas:

#VRML V1.0 ascii

Separator {

        PerspectiveCamera {
                position        0 30 240
                orientation     0 0 -1 0
                focalDistance   5
                heightAngle     .785
        } #PerspectiveCamera

        Info {
                string "Este es un mundo chevere!!"
        } #Info

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

        MaterialBinding {
                value   DEFAULT
        } #MaterialBinding

        FontStyle {
                size    15
                family  TYPEWRITER
                style   NONE
        } #FontStyle

        AsciiText {
                string  "Este es un mundo chevere!"
                spacing 1
                justification CENTER
                width 0
        } #AsciiText

        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

        DEF FaceDiamond Separator {

                DEF DiamondCoords Coordinate3 {
                        point [
                        0 75 25,
                        12.5 62.5 12.5,
                        12.5 62.5 37.5,
                        -12.5 62.5 37.5,
                        -12.5 62.5 12.5,
                        0 50 25,
                        ]
                } #DiamondCoords Coordinate3

                USE DiamondCoords

                IndexedFaceSet {
                        coordIndex [
                                0, 1, 2, -1,
                                0, 1, 4, -1,
                                0, 4, 3, -1,
                                0, 3, 2, -1,
                                5, 1, 2, -1,
                                5, 1, 4, -1,
                                5, 4, 3, -1,
                                5, 3, 2, -1,
                                ]

                } #IndexedFaceSet

        } #FaceDiamond Separator

        DEF LineDiamond Separator {

                Translation {
                        translation 0 75 0
                } #Translation
                USE DiamondCoords

                IndexedLineSet {
                        coordIndex [
                          0, 1, -1,
                          0, 2, -1,
                          0, 3, -1,
                          0, 4, -1,
                          4, 1, -1,
                          1, 2, -1,
                          2, 3, -1,
                          3, 4, -1,
                          5, 1, -1,
                          5, 2, -1,
                          5, 3, -1,
                          5, 4, -1
                        ]

                } #IndexedLineSet
        } #DiamondLine Separator
} #Separator

Aquellos participantes del curso que deseen profundizar en el uso de esta
opcion deberan exlorar el empleo conjunto  de  los  nodos  SWITCH  y  LOD
(Level of Detail) no contemplados en el presente  curso  introductorio  y
que permitiran la concatenacion de primitivas para producir el efecto  de
diferentas niveles de detalle para una determinada escena.

                                                                ...sigue


Siguiente entrega.
Indice del CURSO VRML.