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