Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo
Alberto Raposo – PUC-Rio Event Utilities 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
Alberto Raposo – PUC-Rio Event Utility Nodes BooleanFilter BooleanToggle BooleanSequencer IntegerSequencer BooleanTrigger IntegerTrigger TimeTrigger Script
Alberto Raposo – PUC-Rio Sequencer Nodes
Alberto Raposo – PUC-Rio Exemplo
Alberto Raposo – PUC-Rio Exemplo
Alberto Raposo – PUC-Rio 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 Exemplos: 11_IntegerSequencer, 11_BooleanFilter, 11_BooleanToggle e 11_BooleanTrigger
Alberto Raposo – PUC-Rio Outros Triggers IntegerTrigger –Converte eventos booleanos de entrada em um valor inteiro Ver 11_IntegerTrigger TimeTrigger –Convert eventos booleanos de entrada em em eventos SFTime (timestamp)
Alberto Raposo – PUC-Rio 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.
Alberto Raposo – PUC-Rio ScriptNode
Alberto Raposo – PUC-Rio URL vs 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, “ ” ).
Alberto Raposo – PUC-Rio ScriptNode com CDATA
Alberto Raposo – PUC-Rio 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.
Alberto Raposo – PUC-Rio 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)
Alberto Raposo – PUC-Rio 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).
Alberto Raposo – PUC-Rio 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.
Alberto Raposo – PUC-Rio 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
Alberto Raposo – PUC-Rio 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)
Alberto Raposo – PUC-Rio Para evitar loops infinitos no ciclo de eventos Só permite uma passagem por um ROUTE a cada quadro –Evita ciclos no roteamento de eventos
Alberto Raposo – PUC-Rio Ciclo do Script Node
Alberto Raposo – PUC-Rio Classe Browser Disponível em Java e ECMAScript Provê uma série de funções úteis
Alberto Raposo – PUC-Rio Classe Browser Exemplos de Script
Alberto Raposo – PUC-Rio Event Passing, directOutpu e SAI
Alberto Raposo – PUC-Rio Mais exemplos s/Basic/
Alberto Raposo – PUC-Rio SAI – Scene Access Interface Interface de programação usada para fazer comunicação entre X3D e Java
Alberto Raposo – PUC-Rio SAI – exemplos e tutoriais d.htm html ISO-IEC X3DAbstractSpecification/