AM533A - Computação Gráfica e Multimídia I
Utilização do VRML
Texto: Elisa Calhau de Castro e Léo Pini Magalhães
1o semestre de 1999
Aula 3
O que será visto nesta aula:
XI - Sensores
XI - Sensores
A fim de possibilitar a interação do usuário com a cena, existem nodos especiais chamados sensores (ou sensor nodes). Estes nodos, além de campos (fields), possuem, em geral, eventos (events). Basicamente, os sensores reagem a algum evento, o qual, por sua vez, indica que algo aconteceu, como por exemplo, que o valor de algum campo foi alterado, o mouse foi clicado ou simplesmente que transcorreu um certo período de tempo.
XI.2 - Nodos Sensores
XI.2.1- Anchor
Anchor {
Campos |
Descrição |
children |
objetos, na cena, que contém hiperlinks para outros arquivos (os quais foram especificados no campo url). Na maioria dos browsers, um click num dos objetos definido em children, faz com que o arquivo especificado seja carregado. |
description |
prompt que o browser pode mostrar na tela em vez de ou em adição a URL. |
parameter |
informação adicional para o browser VRML ou HTML. Esta informação corresponde a um string na forma keyword=value. |
url |
especifica a URL dos arquivos a serem carregados. Caso várias URLs sejam especificadas, estas são listadas em ordem decrescente de prioridade, sendo que o browser carrega o primeiro arquivo que ele encontrar. |
bboxCenter |
centro da área retangular hipotética que circunda os objetos especificados em children no nodo Anchor |
bboxSize |
dimensões em x, y e z da área retangular hipotética que circunda os objetos especificados em children no nodo Anchor |
Eventos |
eventIn MFNode |
addChildren |
adiciona o nodo especificado na lista de objetos em children do nodo Anchor. Caso este nodo já exista, a nova inclusão é ignorada |
removeChildren |
remove o nodo especificado da lista de objetos em children do nodo Anchor. Caso este nodo não exista, a remoção é ignorada |
Nota: URL - Uniform Resource Locator ( IETF RFC 1738 Uniform Resource Locator, Internet standards track protocol. http://ds.internic.net/rfc/rfc1738.txt). Corresponde ao endereço de acesso a um arquivo na Web.
Este nodo provê "links" para outras cenas, páginas HTML ou mesmo para arquivos de som ou imagem localizados em qualquer local na Web. Caso se especifique um arquivo VRMl, este substituirá a cena corrente.
Maiores informações em
Anchor Node no Tutorial.XI.2.2 - CylinderSensor
CylinderSensor {
Campo |
Descrição |
minAngle |
menor ângulo de rotação admissível |
maxAngle |
maior ângulo de rotação admissível |
enable |
indica se o sensor está ativado. Para desligá-lo, basta enviar-lhe um evento set_enable com o valor FALSE |
diskAngle |
determina um ângulo em relação ao eixo Y, dentro do qual o sensor se comporta como um "disco imaginário" e, fora dele, como um "cilindro imaginário". Este pode ser entendido como o ângulo do vértice de um cone inscrito no "cilindro imaginário" e com a base correspondendo com a tampo do cilindro. Logo, o comportamento do sensor depende de onde o usuário clica no objeto. |
offset |
especifica o ângulo em radianos em que a geometria associada será rotacionada a cada "arrasto". |
autoOffset |
sendo TRUE, indica que, uma vez rotacionada, a geometria mantém a nova posição, a qual passará a ser a posição inicial para a nova rotação. Caso FALSE, antes da nova rotação, a geometria é trazida novamente à sua posição original |
Eventos |
eventOut |
isActive |
enviado quando o usuário começa a arrastar a geometria |
trackPoint_changed |
ponto de contato do cursor com o "cilindro imaginário" |
rotation_changed |
orientação corrente do "cilindro"durante o arrasto |
O nodo CylinderSensor é capaz de interpretar quando o usuário "arrasta" um objeto 2D, através do mouse, como uma rotação deste objeto no espaço 3D ao redor do eixo y. Esta rotação, dependendo de onde o cursor toca o objeto (em relação ao eixo y), pode se dar de duas maneiras distintas que serão abordadas adiante. "Arrastar", neste contexto, significa mover o cursor enquanto se pressiona o botão do mesmo.
Maiores informações em
CylinderSensor Node no Tutorial.
XI.2.3 - PlaneSensor
PlaneSensor {
Campo |
Descrição |
minPosition |
a translação fica restrita a pontos à direita e acima desta posição no plano xy |
maxPosition |
a translação fica restrita a pontos à esquerda e abaixo desta posição no plano xy |
enable |
indica se o sensor está ativado. Para desligá-lo, basta enviar-lhe um evento set_enable com o valor FALSE |
offset |
especifica o quanto (a distância) a geometria será trasladada cada vez que ocorrer o arrasto |
autoOffset |
sendo TRUE, indica que, uma vez tranladada, a geometria mantém a nova posição, a qual passará a ser a posição inicial para a nova translação. Caso FALSE, antes da nova translação, a geometria é trazida novamente à sua posição original |
Eventos |
eventOut |
isActive |
este evento é enviado toda vez que o usuário pressionar ou soltar o botão (imediatamente antes ou após o arrasto respectivamente) e não durante o arrasto |
trackPoint_changed |
ponto para o qual o usuário aponta o cursor, ao longo do plano xy, durante o arrasto; minPosition e maxPosition são ignorados |
translation_changed |
ponto ao longo do plano xy e dentro dos limites permitidos (minPosition e maxPosition) para o qual o cursor é apontado; caso o usuário tenha apontado o cursor para uma posição fora dos limites, um dos valores minPosition ou maxPosition é assumido conforme o caso |
Este nodo interpreta um movimento de "arrasto" como uma translação no plano xy de coordenadas do sensor sempre que o usuário clica sobre um objeto e o arrasta. Esse objeto corresponde a uma geometria definida no campo children do nodo que é pai do sensor em questão.
Maiores informações, vide
PlaneSensor no Tutorial.XI.2.4 - SphereSensor
SphereSensor {
Campos |
Descrição |
enable |
indica se o sensor está ativado. Para desligá-lo, basta enviar-lhe um evento set_enable com o valor FALSE |
offset |
especifica o quanto (a distância) a geometria será rotacionada cada vez que |
autoOffset |
sendo TRUE, indica que, uma vez rotacionada, a geometria mantém a nova posição, a qual passará a ser a posição inicial para a nova rotação. Caso FALSE, antes da nova rotação, a geometria é trazida novamente à sua |
Eventos |
eventOut |
isActive |
indica se o usuário está arrastando a geometria associada ao sensor |
trackPoint_changed |
ponto para o qual o usuário aponta o cursor, ao longo da esfera, durante o |
translation_changed |
orientação da esfera imaginária durante o arrasto |
Maiores informações, vide
SphereSensor no Tutorial.XI.2.5 - TouchSensor
TouchSensor
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) |
Maiores informações, vide
TouchSensor no Tutorial.XI.2.6 - 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 |
Maiores informações, vide
Collision no Tutorial.XI.2.7- ProximitySensor
ProximitySensor {
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) |
Maiores informações, vide
ProximitySensor no Tutorial.XI.2.8 - TimeSensor
TimeSensor
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. |
Maiores informações, vide
TimeSensor no Tutorial.XI.2.9 - VisibilitySensor
VisibilitySensor
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 |
Maiores informações, vide
VisibilitySensor no Tutorial.Exercícios:
1. Para o sensor ANCHOR :
2. Para o sensor CYLINDERSENSOR faça exemplos a partir do exemplo dado em aula.
3. Repita o exercício 2 para SPHERESENSOR.