7
1 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 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

11 X3D 3 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/11_X3D_3.pdf · Exemplos: 11_IntegerSequencer, 11_BooleanFilter, 11_BooleanToggle e 11_BooleanTrigger Alberto

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 11 X3D 3 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/11_X3D_3.pdf · Exemplos: 11_IntegerSequencer, 11_BooleanFilter, 11_BooleanToggle e 11_BooleanTrigger Alberto

1

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

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

Page 2: 11 X3D 3 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/11_X3D_3.pdf · Exemplos: 11_IntegerSequencer, 11_BooleanFilter, 11_BooleanToggle e 11_BooleanTrigger Alberto

2

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)

Page 3: 11 X3D 3 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/11_X3D_3.pdf · Exemplos: 11_IntegerSequencer, 11_BooleanFilter, 11_BooleanToggle e 11_BooleanTrigger Alberto

3

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

Page 4: 11 X3D 3 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/11_X3D_3.pdf · Exemplos: 11_IntegerSequencer, 11_BooleanFilter, 11_BooleanToggle e 11_BooleanTrigger Alberto

4

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.

Page 5: 11 X3D 3 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/11_X3D_3.pdf · Exemplos: 11_IntegerSequencer, 11_BooleanFilter, 11_BooleanToggle e 11_BooleanTrigger Alberto

5

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

Page 6: 11 X3D 3 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/11_X3D_3.pdf · Exemplos: 11_IntegerSequencer, 11_BooleanFilter, 11_BooleanToggle e 11_BooleanTrigger Alberto

6

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/example

s/Basic/

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

Page 7: 11 X3D 3 - PUC-Riowebserver2.tecgraf.puc-rio.br/~abraposo/INF1366/2007/11_X3D_3.pdf · Exemplos: 11_IntegerSequencer, 11_BooleanFilter, 11_BooleanToggle e 11_BooleanTrigger Alberto

7

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/x3

d.htm

• http://www.xj3d.org/tutorials/general_sai.

html

• http://www.web3d.org/x3d/specifications/

ISO-IEC-19775-

X3DAbstractSpecification/