26
Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo [email protected] http://www.tecgraf.puc-rio.br/~abraposo/INF1366

Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo [email protected] abraposo/INF1366

Embed Size (px)

Citation preview

Page 1: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

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

Page 2: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@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

Page 3: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

Alberto Raposo – PUC-Rio

Event Utility Nodes

• BooleanFilter• BooleanToggle• BooleanSequencer• IntegerSequencer• BooleanTrigger• IntegerTrigger• TimeTrigger• Script

Page 4: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

Alberto Raposo – PUC-Rio

Sequencer Nodes

Page 5: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

Alberto Raposo – PUC-Rio

Exemplo

Page 6: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

Alberto Raposo – PUC-Rio

Exemplo

Page 7: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

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

Page 8: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

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)

Page 9: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

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.

Page 10: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

Alberto Raposo – PUC-Rio

ScriptNode

Page 11: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

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 “>” ).

Page 12: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

Alberto Raposo – PUC-Rio

ScriptNode com CDATA

Page 13: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

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.

Page 14: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

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)

Page 15: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

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).

Page 16: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

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.

Page 17: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

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

Page 18: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

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)

Page 19: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

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

Page 20: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

Alberto Raposo – PUC-Rio

Ciclo do Script Node

Page 21: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

Alberto Raposo – PUC-Rio

Classe Browser

• Disponível em Java e ECMAScript• Provê uma série de funções úteis

Page 22: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

Alberto Raposo – PUC-Rio

Classe Browser

Exemplos de Script

Page 23: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

Alberto Raposo – PUC-Rio

Event Passing, directOutpu e SAI

Page 24: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

Alberto Raposo – PUC-Rio

Mais exemplos

• http://www.web3d.org/x3d/content/examples/Basic/

• http://www.web3d.org/community/models/

Page 25: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

Alberto Raposo – PUC-Rio

SAI – Scene Access Interface

• Interface de programação usada para fazer comunicação entre X3D e Java

Page 26: Alberto Raposo – PUC-Rio INF 1366 – Computação Gráfica Interativa X3D – Event Utilities e Scripting Alberto B. Raposo abraposo@tecgraf.puc-rio.br abraposo/INF1366

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/