Matemática e Computação
 

Mensagens
Não te abandones em lugares onde a luz da tua harmonia não esteja presente.

 

7.6.5 – Collision

Collision
{
  eventIn         MFNode   addChildren
  eventIn         MFNode   removeChildren
  exposedField MFNode   children        []
  exposedField SFBool    collide         TRUE
  field              SFVec3f  bboxCenter      0 0 0
  field              SFVec3f  bboxSize        -1 -1 -1
  field              SFNode   proxy           NULL
  eventOut      SFTime   collideTime
}

Campos 

                                     Descrição

children


objeto(s) que são verificados se colidiram ou não

collide


indica se a deteção de colisão para os objetos está ligada (TRUE) ou não (FALSE)

proxy


objeto alternativo a ser verificado em vez daqueles especificados em children

bboxCenter


centro do box imaginário que circunda os objetos em children

bboxSize


dimensões em x , y e z do  box imaginário que circunda os objetos em children

Eventos

addChildren


adiciona um objeto ao campo children. Caso já exista, a inclusão é ignorada

removeChildren


remove um objeto do campo children. Caso não exista, a exclusão é ignorada

collideTime


momento da colisão

Há uma necessidade em alguns mundos do VRML permitir que o usuário mova-se através dos objetos. Por exemplo permitir o movimento através da água, preferivelmente em andar na superfície. Para isto nós usamos o nó da colisão.

Exemplo 107:Exemplo 01 do Collision

Collision {
     collide FALSE
     children [
          Shape {
               appearance Appearance {
                    material Material {
                         diffuseColor 1 0 0
                    }
               }
               geometry Sphere {
                    radius 2
               }
          }
     ]
}

Exemplo 108:Exemplo 02 do Collision           Código (Collision02.wrl)

Exemplo 109:Exemplo 03 do Collision           Código (Collision03.wrl)

7.6.6 – ProximitySensor

ProximitySensor {
  exposedField SFVec3f    center      0 0 0
  exposedField SFVec3f    size        0 0 0
  exposedField SFBool     enabled     TRUE
  eventOut     SFBool     isActive
  eventOut     SFVec3f    position_changed
  eventOut     SFRotation orientation_changed
  eventOut     SFTime     enterTime
  eventOut     SFTime     exitTime
}

 

   Campos 

                                          Descrição

center


centro da região monitorada pelo sensor na detecção de movimentos

size


extensão, ao longo dos três eixos e do center definido, da região de monitoramento do sensor 

enable


indica se o sensor está ativado. Para desligá-lo, envie um evento set_enable FALSE para o sensor

   Eventos 


              eventOut

position_changed


atual posição do usuário. É atualizado sempre que o usuário se desloca dentro da região monitorada ou sai dela

orientation_changed


atual orientação do usuário. É atualizado sempre que o usuário se desloca dentro da região monitorada ou sai dela

enterTime


instante em que o usuário penetra na região de monitoramento

exitTime


instante em que o usuário sai na região de monitoramento

isActive


indica se o usuário entrou (TRUE) na região de monitoramento ou não (FALSE)

O nó ProximitySensor é uma maneira de fornecer a interatividade com o usuário. O sensor gera eventos quando o usuário entra, sae ou se move em uma caixa retangular definida. Este sensor não se relaciona às formas definidas dentro do mesmo grupo, isto é não detecta se uma forma dentro de um grupo está perto do usuário ou não. Este nó tem os seguintes campos:

enabled - especifica o status do sensor;
center - determina o centro da caixa retangular;
size - especifica o tamanho da caixa.

Exemplo 110:ProximitySensor 01        Código ProximitySensor01.wrl

Exemplo 111:ProximitySensor 02        Código ProximitySensor02.wrl

Exemplo 112:ProximitySensor 03        Código ProximitySensor03.wrl

7.6.7 – TouchSensor

TouchSensor
{
  exposedField SFBool  enabled TRUE
  eventOut     SFVec3f hitNormal_changed
  eventOut     SFVec3f hitPoint_changed
  eventOut     SFVec2f hitTexCoord_changed
  eventOut     SFBool  isActive
  eventOut     SFBool  isOver
  eventOut     SFTime  touchTime
}

Campos 

                                    Descrição

enable


indica se o sensor está ativado

Eventos 


      eventOut

isOver


indica se o usuário está apontando o cursor para uma geometria monitorada pelo sensor, independentemente de o botão do mouse ter ou não sido pressionado

isActive


indica se o botão está sendo pressionado 

hitPoint_changed


mais recente ponto da superfície da geometria monitorada pelo sensor que foi clicado pelo usuário

hitNormal_changed


normal no ponto indicado pelo hitPoint_changed

hitTexCoord_changed


textura associada ao ponto indicado pelo hitPoint_changed

touchTime


instante em que houve o click ( usuário "tocou" a figura)

O nó TouchSensor monitora nós de geometria que pertencem ao seu grupo.

O nó gera eventos quando o cursor aponta para uma geometria por ele monitorada.

O detetor TouchSensor é iniciado por um clique do mouse nos objetos associados no mesmo grupo. O cursor do mouse muda o aspecto quando passa ao alto de um detetor deste tipo, e pode também detectar esta passagem.

Exemplo 113:Exemplo 01 do TouchySensor 

Group{
     children [
          # Cubo que gira quando o usuário clica sobre ele
          DEF Cube Transform {
               children Shape {
                    appearance Appearance {
                         material Material { }
                    }
                    geometry Box { }
               }
          },
          
# Sensor, detecta quando o usuário clica em um objeto
          DEF Touch TouchSensor { },
          
# relógio para controlar a animação
          DEF Clock TimeSensor {
               enabled FALSE
               cycleInterval 4.0
               loop TRUE
          },
          
# Caminho da animação (movimento)
          DEF CubePath OrientationInterpolator {
               key [0.0, 0.50, 1.0]
               keyValue [
                    0.0 1.0 0.0 0.0,
                    0.0 1.0 0.0 3.14,
                    0.0 1.0 0.0 6.28
               ]
          }
     ]
}

# Rotas
ROUTE Touch.isOver TO Clock.set_enabled
ROUTE Clock.fraction_changed TO CubePath.set_fraction
ROUTE CubePath.value_changed TO Cube.set_rotation

7.6.8 – TimeSensor

TimeSensor
{
  exposedField SFTime   cycleInterval 1
  exposedField SFBool   enabled       TRUE
  exposedField SFBool   loop          FALSE
  exposedField SFTime   startTime     0
  exposedField SFTime   stopTime      0
  eventOut     SFTime   cycleTime
  eventOut     SFFloat  fraction_changed
  eventOut     SFBool   isActive
  eventOut     SFTime   time
}

   Campos 

                                                            Descrição

cycleInterval


duração em segundos de cada intervalo (deve ser maior que zero)

enabled


caso TRUE, "eventos relacionados ao tempo" são gerados de acordo com certas condições (que envolvem o instante atual e outros campos) e, caso FALSE, esses eventos não são gerados. Os eventos tipo: set_ e _changed são tratados normalmente, independentemente do valor enable ser TRUE ou FALSE 

loop

estabelece se o sensor deve repetir indefinidamente (até stopTime ) ou parar ao final de um ciclo

startTime


instante de início da geração de eventos

stopTime


instante de término da geração de eventos ( ignorado se menor que startTime)

   Eventos 


               eventOut

isActive


indica se o sensor está em funcionamento. Este evento só é enviado no instante em que o sensor começa a funcionar e quando pára 

cycleTime


instante atual, enviado a cada início de ciclo

fraction_changed


fração completada do ciclo corrente: 0 (início) até 1 (fim)

time


data/hora atual em segundos desde 00:00 GMT, 01 de janeiro de 1970.

Exemplo 114:TimeSensor 01        Código TimeSensor01.wrl

VisibilitySensor

VisibilitySensor
{
  exposedField SFVec3f center   0 0 0
  exposedField SFBool  enabled  TRUE
  exposedField SFVec3f size     0 0 0
  eventOut     SFTime  enterTime
  eventOut     SFTime  exitTime
  eventOut     SFBool  isActive
}

   Campos 

                                                  Descrição

center


centro da região retangular que ativa e desativa o sensor

size


extensão, ao longo dos três eixos x , y e z da região retangular que ativa e desativa o sensor 

enabled


indica se o sensor está ativado. Caso FALSE, eventos não são gerados e, caso TRUE, o sensor detecta alterações nas "condições de visibilidade" ( visibility status) da região monitorada e envia eventos através de isActive

   Eventos 


isActive


valor TRUE indica que parte da região monitorada está visível e, quando FALSE, a região está completamente invisível

enterTime


instante em que foi gerado um isActive TRUE

exitTime


instante em que foi gerado um isActive FALSE

O nó de VisibilitySensor é usado detectar mudanças da visibilidade em uma caixa virtual, gerando eventos quando o status da visibilidade muda. Este sensor não se relaciona às formas definidas dentro do mesmo grupo, isto é não detecta se uma forma dentro de um grupo é visível ou não. O sensor da visibilidade não detecta se a caixa foi escondida da vista devido a outras formas na cena. O sensor comporta-se como se não houcvesse outra forma .

O nó VisibilitySensor detecta quando certa parte do mundo torna-se visível ao usuário. Quando a área está visível, o sensor pode ativar um procedimento ou animação.

Exemplo 115:Exemplo 01 do VisibilitySensor 

NavigationInfo {
     type "FLY"
}
Group {
     children [
          DEF V_S VisibilitySensor {
               size 2.5 2.5 2.5
          }
          Shape {
               appearance Appearance {
                    material Material {
                         diffuseColor 0.8 0.8 0.8
                    }
                    texture ImageTexture {
                         url "psy_001.jpg"
                    }
               }
               geometry Sphere {
                    radius 2.5
               }
          }
          Sound {
               minFront 100
               maxFront 100
               minBack 100
               maxBack 100
               source DEF A_C AudioClip {
                    loop FALSE
                    url "deal.wav"
               }
          }
     ]
     ROUTE V_S.enterTime TO A_C.set_startTime
     ROUTE V_S.isActive TO A_C.set_loop
}

Exemplo 116:Exemplo 01 do VisibilitySensor 

DEF SENSOR VisibilitySensor {
     size 2 2 2
}

Sound {
     minFront 10
     minBack 10
     maxFront 50
     maxBack 50
     source DEF SOUND AudioClip {
          loop TRUE
          url "deal.wav"
     }
}

Shape {
     appearance Appearance {
          material Material {
               emissiveColor 0 1 0
          }
     }
     geometry Box {}
}

ROUTE SENSOR.enterTime TO SOUND.startTime
ROUTE SENSOR.exitTime TO SOUND.stopTime