Event Utilities INF 1366 Computação Gráfica Interativa X3D Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br http://www.tecgraf.puc-rio.br/~abraposo/inf1366 Há muitos tipos de nós que podem gerar muitos tipos de eventos ROUTE pode ser usado para conectar diretamente 2 eventos do mesmo tipo Ex. não se pode conectar um SFFloat de um nó a um inteiro de outro nó; timestamp não pode se conectar direto com booleano, etc. Event utility nodes facilitam a conversão Event Utility Nodes Sequencer Nodes BooleanFilter BooleanToggle BooleanSequencer IntegerSequencer BooleanTrigger IntegerTrigger TimeTrigger Script 1
Exemplo Exemplo BooleanFilter, Toggle e Trigger BooleanFilter Normalmente usado para negar um valor booleano recebido (sem alternar) BooleanToggle Ao receber o set_boolean, alterna entre True e False BooleanTrigger Conecta eventos de tempo a booleanos (gera um true sempre que receber um evento de tempo IntegerTrigger Outros Triggers Converte eventos booleanos de entrada em um valor inteiro Ver 11_IntegerTrigger TimeTrigger Convert eventos booleanos de entrada em em eventos SFTime (timestamp) Exemplos: 11_IntegerSequencer, 11_BooleanFilter, 11_BooleanToggle e 11_BooleanTrigger 2
ScriptNode ScriptNode Permite embutir programas em X3D ECMAScript (JavaScript) Java Define conjunto de campos que serão usados para enviar e receber eventos Quando recebe um evento, chama um método correspondente a esse evento no programa para tratar o evento e, possivelmente, gerar um evento de saída. URL vs CDATA ScriptNode com CDATA url Indica arquivo externo onde está o script (.js ou.class ou.jar) No caso de script embutido no xml (.x3d), é melhor usar o bloco CDATA do XML, que não fica sujeito às interpretações do XML (por exemplo, < e > ). 3
Outros campos do Script directoutput Indica se Script pode acessar e alterar outros nós da cena sem usar o ROUTE Serve de alerta para o browser no que diz respeito à renderização mustevaluate Se falso, indica ao browser que ele pode esperar para mandar eventos para o Script até que outputs sejam necessários. Métodos do Script initialize( ) Chamado automaticamente quando o Script é carregado Usado para setup do código e de conexões remotas, inicialização de variáveis, etc shutdown( ) Chamado automaticamente quando a cena é fechada ou quando o nó Script é retirado da cena (ou substituído por um outro) Métodos do Script prepareevents( ) Opcional Chamado uma vez antes de executar qualquer ROUTE na cena Usos: ler buffers da rede, checar listeners externos, etc eventsprocessed( ) Opcional Chamado depois que o nó Script recebe todos os eventos de input Pode representar ganho de eficiência, se um output precisa ser calculado a partir de vários inputs (ao invés de chamar uma funcao específica para cada input event recebido). Modelo de execução A cada quadro gerado (i.e., pixels desenhados), o browser pára para a passagem de eventos e atualizações de estado. 4
Ciclo de eventos 1. Atualizar posição de câmera 2. Avaliar input dos sensores e de outros geradores de eventos, colocando esses eventos pilha para envio 3. Rotear eventos para seus destinos, atualizando os campos do nós 4. Se novos eventos forem gerados e roteados nos passos 2 e 3, voltar ao passo 2, até que não haja mais eventos pendentes Ciclo de renderização do quadro 5. O próximo quadro é gerado (desenhado, pixel a pixel) e buferizado até que esteja completo 6. Sistemas com double buffer fazem o swap do buffer recém criado com o anterior 7. Atualiza clock do browser 8. Retorna ao ciclo de eventos (passo 1) Para evitar loops infinitos no ciclo de eventos Ciclo do Script Node Só permite uma passagem por um ROUTE a cada quadro Evita ciclos no roteamento de eventos 5
Classe Browser Classe Browser Disponível em Java e ECMAScript Provê uma série de funções úteis Exemplos de Script Event Passing, directoutpu e SAI Mais exemplos http://www.web3d.org/x3d/content/example s/basic/ http://www.web3d.org/community/models/ 6
SAI Scene Access Interface Interface de programação usada para fazer comunicação entre X3D e Java SAI exemplos e tutoriais http://www.sal.ipg.pt/user/estg/martins/x3 d.htm http://www.xj3d.org/tutorials/general_sai. html http://www.web3d.org/x3d/specifications/ ISO-IEC-19775- X3DAbstractSpecification/ 7