Interacção e Animação

Documentos relacionados
Animação. Exemplo: HelloJava3Dc

Java 3D. Laboratório de Computação Gráfica e Interfaces Jorge Barbosa

Java 3D. Java: Independência de plataforma. Adailton J. A. da Cruz Alberto B. Raposo. Bytecode Java. Código x86. Java VM. Java VM.

Utilizando Behaviors Para o Gerenciamento da Máquina de Estados em Jogos Desenvolvidos com Java 3D

4 Conceito de Herança

Programação com Objectos. Processamento de Dados I. 2. Classes, Atributos e Métodos

Palavras Reservadas da Linguagem Java

Programação por Objectos. Java

JAVA 3D. PSI5789 Síntese de Imagens Professor: Márcio Lobo Netto Aluna: Alice Shimada Bacic. 1 Java 3D API

GGI026 - Árvore rubro-negra - Remoção

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

2 Vectores de objectos

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Programação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Apontamentos de Computação Gráfica

Computação II - Java - Teste 1.2 Prof. Adriano Joaquim de Oliveira Cruz 2015/04/27

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos)

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.

. Uma instância da classe JTextField gera uma instância da classe ActionEvent quando o objecto está activo e o utilizador pressiona a tecla ENTER.

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Interfaces Event-Driven Técnica de Rubberband

Tipos de Dados Abstractos Estruturas Lineares Listas

FCUP 2010/11. Departamento de Ciência de Computadores Estruturas de Dados (CC114) 1 o Teste: 27/Abril/2011

Pilha e Fila. Pilha em C. Definir o registro que representará cada elemento da pilha.

Linguagem de Programação II Implementação

PLATAFORMA ELECTRÓNICA VORTAL

PROGRAMAÇÃO JAVA. Parte 3

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

1 - O que será impresso quando o seguinte programa escrito na linguagem JAVA for compilado e executado?

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada aos Objectos I

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

Laboratório de Programação. Aula 12 Java 5COP088. Aula 12 Exceções Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

Programação Orientada a Objetos

Computação II - Java - Prova 1 Prof. Adriano Joaquim de Oliveira Cruz /05/13. Questão: Total Pontos: Gráu:

Aula 08 Estruturas de Condição. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Boas práticas com Orientação a Objetos. Paulo Silveira

Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição

Controlo de Execução. K&R: Capitulo 3

Consideram-se todas as actividades, desde a análise inicial até ao software se tornar obsoleto

1 Da aula teórica ao Java

Programação OO em Java. Profa Andréa Schwertner Charão DLSC/CT/UFSM

Num programa em JAVA é possível definir diferentes sequências de execução independente: Threads.

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos II Prof. Fabiano Dorça. Padrão Observer (Observador)

Licenciatura em Engenharia Informática DEI/ISEP Linguagens de Programação 2006/07. Tópicos avançados

Programação Orientada por Objectos com Java. Ademar Aguiar. MRSC, Programação em Comunicações

Classes e Objetos INTRODUÇÃO À ORIENTAÇÃO A OBJETOS COM JAVA - MÓDULO II. Classes. Objetos. Um modelo para a criação de objetos

Herança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos

Módulo 03. Identificadores, Palavras Reservadas, e Tipos

COMPORTAMENTOS - Observações

Orientação a Objetos - Herança

Sincronização de Threads

Nome: Número: Primeira Parte (7 valores) Segunda Parte (3 valores)

Java na Prática. Célio Silva Aula 3

Construtores. Introdução

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Programação Orientada a Objetos

Extensão de classes em Java - noções elementares - PCO / PPO Departamento de Informática Faculdade de Ciências da Universidade de Lisboa

Errors and exceptions

Introdução à linguagem C++

Programação Orientada pelos Objetos B. Desenvolvimento orientado pelos objectos

Linguagem de Programação Orientada a Objeto Construtores e Sobrecarga

Como construir um compilador utilizando ferramentas Java

Diagramas Sintáticos

Programação Java. - Herança e Polimorfismo - Marco Fagundes Marco Fagundes -

1 Considere o seguinte código e responda às questões enunciadas.

Sobrecarga. Algoritmos e Programação II. Aula 3 Sobrecarga

Padrão de projeto de software

Instituto Superior de Engenharia de Lisboa

Programação de Computadores II TCC /Turma A 1

9 Classes Abstractas e Interfaces

Threads. O que é uma Thread? Paralelismo

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Cartão de fidelização de clientes das distribuidoras de combustível.

Tipos Abstratos de Dados. Estrutura de Dados

Programação de Computadores - I. Profª Beatriz Profº Israel

No final deste curso, saberás criar programas através da linguagem de programação Java.

Programação Java (nível intermediário) 4. Polimorfismo

Polimorfismo. O que é polimorfismo?

Programação Orientada a Objetos Aula I Declaração de classes, métodos construtores. Prof.: Bruno E. G. Gomes IFRN

Programação Orientada a Objetos

Strings e Arrays POO

LEIC-A / MEIC-A 2007/2008 (1º

Recursividade. Métodos iterativos. Prof. Cesar Augusto Tacla. Métodos iterativos utilizam estruturas de repetição

Sistema Futebol - Java

Tratamento de Exceções

Linguagens de Programação. Marco A L Barbosa

Orientação a Objetos e Java

Profa. Thienne Johnson EACH/USP

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Notas de Aula 04: Herança e polimorfismo.

5 Caso de estudo O cartão fidelidade

13. Estudo de Caso: Folha de Pagamento

Transcrição:

Interacção e Animação Interacção: a acção ocorre em resposta a estímulos provocados pelo utilizador Animação: a acção ocorre pela passagem do tempo Behavior class: classe abstracta que fornece os mecanismos necessários para responder a eventos possibilitando a alteração do grafo em run time Interacção e Animação Exemplos de estímulos: teclado, rato, colisão de objectos, tempo, combinação de vários eventos,... Exemplos de Acções: adicionar/remover objectos da cena, mudar atributos de objectos, lançar Threads,... As subclasses de Behavior têm de definir: Método initialize() - define o evento que activa esse behavior Método processtimulus(enumeration c) método invocado pelo sistema quando ocorre o evento correspondente. A última instrução deve definir novamente a nova condição de activação. cheduling Region : especifica a região do espaço onde o behavior é válido. Restringe a região onde são verificadas as condições de activação. Melhora o desempenho do sistema.

Interacção e Animação Tipos de scheduling region: Boundingphere BoundingBox BoundingPolytope permite definir regiões a partir de equações de planos, pela reunião das regiões definidas por um conjunto de objectos, etc Utility Classes para Teclado/Rato com.sun.j3d.utils.behaviors. * KeyNavigatorBehavior(TransFormGroup tg) MouseBehavior() MouseRotate() MouseTranslate() MouseZoom() Inclusão no programa: 1. Activar as flags de permissão de leitura/escrita do 2. Criar o objecto Behavior 3. Atribuir o alvo 4. Especificar a região de influência 5. Adicionar o Behavior ao grafo B

Exemplo: teclado public class implebehavior extends Behavior{ private TransformGroup target; private Transform3D rotation = new Transform3D(); private double angle = 0.0; // create implebehavior implebehavior(transformgroup target){ this.target = target; //target.setcapability(transformgroup.allow_tranform_write); // initialize the Behavior - set initial wakeup condition // called when behavior beacomes live public void initialize(){ this.wakeupon(new WakeupOnAWTEvent(KeyEvent.KEY_PREED)); // called by Java 3D when appropriate stimulus occures public void processtimulus(enumeration criteria){ // decode event, do what is necessary angle += 0.1; rotation.roty(angle); target.settransform(rotation); this.wakeupon(new WakeupOnAWTEvent(KeyEvent.KEY_PREED)); // end of class implebehavior (ver exemplo: implebehavior.java) B Descodificação public void processtimulus (Enumeration criteria) { WakeupCriterion wakeup; AWTEvent[] event; int id, i; while (criteria.hasmoreelements()) { wakeup = (WakeupCriterion) criteria.nextelement(); if (wakeup instanceof WakeupOnAWTEvent) { event = ((WakeupOnAWTEvent)wakeup).getAWTEvent(); for(i=0; i < event.length; i++) { id = event[i].getid(); if(id==keyevent.key_preed) { if (((KeyEvent) event[i]).getkeycode() == KeyEvent.VK_){ // processamento do evento target.gettransform(transl); transl.mul(offsetright); target.settransform(transl); this.wakeupon(new WakeupOnAWTEvent(KeyEvent.KEY_PREED));

ubclasses de WakeupCriterion WakeupOnActivation WakeupOnAWTEvent WakeupOnBehaviorPost WakeupOnCollisionEntry WakeupOnCollisionExit WakeupOnCollisionMovement WakeupOnDeactivation WakeupOnElapsedFrames WakeupOnElapsedTime WakeupOnensorEntry WakeupOnensorExit WakeupOnTransformChange WakeupOnViewPlatformEntry WakeupOnViewPlatformExit Combinação de eventos WakeupAnd WakeupAndOfOrs WakeupOr WakeupOrOfAnds

Exemplo: eventos do rato public class MyMouseBehavior extends Behavior{ WakeupCriterion[] mouseevents; WakeupOr mousecriterion; MyMouseBehavior(){ public void initialize(){ mouseevents = new WakeupCriterion[3]; mouseevents[0] = new WakeupOnAWTEvent(MouseEvent.MOUE_DRAGGED); mouseevents[1] = new WakeupOnAWTEvent(MouseEvent.MOUE_PREED); mouseevents[2] = new WakeupOnAWTEvent(MouseEvent.MOUE_RELEAED); mousecriterion = new WakeupOr(mouseEvents); wakeupon (mousecriterion); public void processtimulus(enumeration criteria){ while (criteria.hasmoreelements()) { WakeupCriterion wakeup = (WakeupCriterion) criteria.nextelement(); if (wakeup instanceof WakeupOnAWTEvent) { AWTEvent[] event = ((WakeupOnAWTEvent)wakeup).getAWTEvent(); for (int i=0; i<event.length; i++) { id = event[i].getid(); if (id == MouseEvent.MOUE_DRAGGED) { else if(id == MouseEvent.MOUE_PREED){ else if(id == MouseEvent.MOUE_RELEAED){ wakeupon (mousecriterion); elecção de objectos na cena 3D (Picking) Javax.media.j3d.Pickhape PickBounds PickCone PickCylinder PickPoint PickRay, Pickegment Utilização: 1. Definir a Pickhape a usar no teste de intercepção 2. Obter o caminho para os objectos seleccionados cenegraphpath[] BranchGroup.pickAll(Pickhape pickhape) cenegraphpath[] pickallorted(pickhape pickhape) cenegraphpath pickclosest(pickhape pickhape) cenegraphpath pickany(pickhape pickhape)

elecção de objectos na cena 3D (Picking) Flag a activar nos nós que se quiserem incluir no vector: Node.ALLOW_PICK_REPORTING Nota: por defeito a flag assume o valor FALE, i.e. por defeito o vector devolvido pela função está vazio. Utility Classes para a elecção de objectos (classe abstracta) com.sun.j3d.utils.picking.behaviors.pickmousebehavior PickRotateBehavior(objRoot, canvas, bounds) PickTranslateBehavior PickZoomBehavior Ver exemplo do tutorial: MousePickApp.java Apenas um behavior para os vários objectos. B

Utility Classes para a elecção de objectos com.sun.j3d.utils.picking PickTool(BranchGroup bg) PickCanvas(Canvas3D c, BranchGroup b) PickIntersection() PickResult() A classe PickCanvas permite simplificar a operação de selecção: utiliza a coordenada de posição do rato no canvas para criar a Pickhape apropriada. PickResult[] PickCanvas.pickAll() PickResult PickCanvas.pickAny() PickResult[] PickCanvas.pickAllorted() PickResult PickCanvas.pickClosest() Exemplo de aplicação PickCanvas pc = new PickCanvas(canvas, branchgroup); pc.setmode(picktool.geometry); pc.sethapelocation(x0, y0); PickResult pr = pc.pickclosest(); if(pr == null){ return; Node n = pr.getnode(pickresult.tranform_group); if (n == null){ return; B Os nós hape3d: shape.setcapability(hape3d.enable_pick_reporting); // opcional PickTool.setCapabilities(shape, PickTool.INTERECT_TET); Os nós TransformGroup: setcapability(transformgroup.enable_pick_reporting);