Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e...
-
Upload
manuela-rafael -
Category
Documents
-
view
213 -
download
0
Transcript of Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e...
Alberto Raposo – PUC-Rio
INF 1366 – Computação Gráfica Interativa
X3D – Event Utilities e Scripting
Alberto B. [email protected]
http://www.tecgraf.puc-rio.br/~abraposo/INF1366
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, “<“ e “>” ).
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âmera2. 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 browser8. 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
• http://www.web3d.org/x3d/content/examples/Basic/
• http://www.web3d.org/community/models/
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
• http://www.sal.ipg.pt/user/estg/martins/x3d.htm
• http://www.xj3d.org/tutorials/general_sai.html
• http://www.web3d.org/x3d/specifications/ISO-IEC-19775-X3DAbstractSpecification/