Introduo Multimdia AULA PRTICA Igor Duarte idal Luciano

  • Slides: 26
Download presentation
Introdução à Multimídia AULA PRÁTICA Igor Duarte (idal) Luciano Demétrio (ldsp) Thiago Alexandre (tan

Introdução à Multimídia AULA PRÁTICA Igor Duarte (idal) Luciano Demétrio (ldsp) Thiago Alexandre (tan 2) Thiago Ferreira (tfds) Tiago Lemos (tlam) 16. 01. 08

Introdução[1] • A AGEIA Phys. X é a primeira engine totalmente dedicada a simulação

Introdução[1] • A AGEIA Phys. X é a primeira engine totalmente dedicada a simulação de fenômenos físicos; • Usa Open. GL para processar os gráficos; • O grande foco não apenas da engine, mas da própria empresa é a indústria de jogos eletrônicos; • Por enquanto o foco do desenvolvimento está em jogos para computadores, Play. Station 3 e Xbox 360; • A simulação de fenômenos físicos é um fator complicado dentro do projeto de jogos, Phys. X torna esse procedimento mais simples e eficiente;

Introdução[2] Unreal Tournament 2007 http: //www. youtube. com/watch? v=r. Kk 9 Fc. UJqr. U

Introdução[2] Unreal Tournament 2007 http: //www. youtube. com/watch? v=r. Kk 9 Fc. UJqr. U Back. Breaker http: //www. youtube. com/watch? v=bc 4 wfc 3 BGl 0

Instalação[1] • Para instalar o Phys. X SDK é preciso ter uma conta registrada

Instalação[1] • Para instalar o Phys. X SDK é preciso ter uma conta registrada no site da AGEIA. Para fazer uma solicitação, clique na seção My Support da seguinte página (http: //devsupport. ageia. com); • Sua conta será aprovada em poucos dias; • Já registrado e após efetuar login, clique em Online Support e depois em Download. • No lado esquerdo, escolha o SDK de sua preferência; • No painel principal, clique em Phys. X SDK Core. Aceite o contrato para permitir o download; • Obs. : desabilite o gerenciador de downloads para concluir essa tarefa.

Instalação[2] • Para rodar qualquer aplicação do Physx você precisará instalar também o AGEIA

Instalação[2] • Para rodar qualquer aplicação do Physx você precisará instalar também o AGEIA Phys. X System Software que está disponível na seção Driver & Support do site da AGEIA (www. ageia. com); • Com os downloads feitos, instale primeiro o AGEIA Physx System Software e depois o Phys. X SDK, pois este ficará dentro de uma pasta do System Software;

Componentes • Mundo (World) - O SDK do Physx é implementado em C++ e

Componentes • Mundo (World) - O SDK do Physx é implementado em C++ e internamente organizado como uma hierarquia de classes; • Cena (Scene) – Uma cena é uma simulação da interação dos corpos nela contidos, dos efeitos aplicados sobre os mesmos e da passagem do tempo; • Ator (Actor) – O principal objeto simulado no Physx, é criado para uma cena especifica; • Molde (Shape) – Usado para detectar e tratar colisões; • Junções (Joints)– São conexões entre corpos rígidos; • Material – definem as propriedades das superficies;

Phys. X SDK • O Phys. X SDK contém vários documentos para orientar o

Phys. X SDK • O Phys. X SDK contém vários documentos para orientar o desenvolvedor no aprendizado da ferramenta; • Para isso a pasta mais importante é a Training. Programs que contém um curso completo com diversas lições; • Há também a pasta Samples que oferece várias amostras simples do que pode ser feito com Phys. X; • Caso você queira acessar diretamente alguns exemplos siga o caminho: Menu Start -> All Programs -> AGEIA Physx Properties -> abra a aba Demonstração e dê um clique duplo sobre o icone cujo exemplo deseja visualizar.

Acesso ao Phys. X SDK[1] Menu Start -> My Computer -> Local disk(C: )

Acesso ao Phys. X SDK[1] Menu Start -> My Computer -> Local disk(C: ) Menu Iniciar -> Meu Computador -> Local disk(C: ) -> Program files Menu Start -> My Computer -> Local disk(C: ) -> Program files -> AGEIA Technologies Menu Start -> My Computer -> Local disk(C: ) > Program files-> AGEIA Technologies -> SDK Faça uma cópia da pasta v 2. 7. 3 para o seu Desktop

Acesso ao Phys. X SDK[2] Na pasta v 2. 7. 3 acesse: Training Programs

Acesso ao Phys. X SDK[2] Na pasta v 2. 7. 3 acesse: Training Programs -> Programs -> Chapter 1_Rigid_Bodies -> compiler Training Programs -> Chapter 1_Rigid_Bodies -> compiler -> vc 8 win 32 Na pasta vc 8 win 32 abra o arquivo Lesson 101_Box_on_a_plane. Este arquivo contém as primeiras lições da biblioteca Physx e é ele que iremos alterar em seguida

Exemplos

Exemplos

Lição 1 – corpos rígidos[1] • Nessa primeira lição somos apresentados aos conceitos básicos

Lição 1 – corpos rígidos[1] • Nessa primeira lição somos apresentados aos conceitos básicos que controlam todas as aplicações do Phys. X; • Além disso é também exposto como criar atores e forças que agem sobre os mesmos;

Lição 1 – corpos rígidos[2] • Para criar atores adicione as seguintes linhas de

Lição 1 – corpos rígidos[2] • Para criar atores adicione as seguintes linhas de código – Na parte de atributos globais insira: // Actor globals Nx. Actor* esfera = NULL; Nx. Actor* capsula = NULL; – Após a parte de atributos globais insira os trechos abaixo para criar uma esfera: Nx. Actor* Criar. Esfera(){ Nx. Actor. Desc ator. Desc; Nx. Body. Desc corpo. Desc; Nx. Sphere. Shape. Desc esfera. Desc; esfera. Desc. radius = 1. 25; //raio da esfera ator. Desc. shapes. push. Back(&esfera. Desc); ator. Desc. body = &corpo. Desc; ator. Desc. density = 3; //densidade da esfera ator. Desc. global. Pose. t = Nx. Vec 3(0, 3, 0); //posição inicial da esfera na cena return g. Scene->create. Actor(ator. Desc); }

Lição 1 – corpos rígidos[3] – Agora insira os trechos abaixo para criar uma

Lição 1 – corpos rígidos[3] – Agora insira os trechos abaixo para criar uma capsula: Nx. Actor* Criar. Capsula () { Nx. Actor. Desc ator. Desc; Nx. Body. Desc corpo. Desc; Nx. Capsule. Shape. Desc capsula. Desc; capsula. Desc. height = 5; //altura da capsula. Desc. radius = 0. 25; //raio da capsula ator. Desc. shapes. push. Back(&capsula. Desc); ator. Desc. body = &corpo. Desc; ator. Desc. density = 12; //densidade da capsula ator. Desc. global. Pose. t = Nx. Vec 3(5, 7, 0); //posicao inicial da capsula na cena return g. Scene->create. Actor(ator. Desc); } – Para visualizar os atores insira dentro do metodo Init. Nx() as linhas //faça isso logo abaixo da linha box = Create. Box(); capsula = Criar. Capsula(); esfera = Criar. Esfera(); – Após concluir os passos, aperte F 5 para executar

Lição 1 – corpos rígidos[4] • • Agora, vamos aplicar forças para um dos

Lição 1 – corpos rígidos[4] • • Agora, vamos aplicar forças para um dos atores que criamos – Na parte de atributos globais insira: // Force globals Nx. Vec 3 g. Force. Vec. Esfera(0, 0, 0); Nx. Real g. Force. Strength. Esfera = 20000; Depois da parte de atributos globais, insira os trechos abaixo para criar o método que contem as forças que irão agir na esfera: void Process. Force. Keys. Esfera() { for (int i = 0; i < MAX_KEYS; i++) { if (!g. Keys[i]) { continue; } switch (i) { //no segundo parametro do metodo Apply. Force. To. Actor voce pode criar diferentes //movimentos para seu ator alterando as coordenadas do vetor case '8': { g. Force. Vec. Esfera = Apply. Force. To. Actor(esfera, Nx. Vec 3(0, 0, 1), g. Force. Strength. Esfera); break; } case '5': { g. Force. Vec. Esfera = Apply. Force. To. Actor(esfera, Nx. Vec 3(0, 0, -1), g. Force. Strength. Esfera); break; } case '4': { g. Force. Vec. Esfera = Apply. Force. To. Actor(esfera, Nx. Vec 3(1, 0, 0), g. Force. Strength. Esfera); break; } case '6': { g. Force. Vec. Esfera = Apply. Force. To. Actor(esfera, Nx. Vec 3(-1, 0, 0), g. Force. Strength. Esfera); break; } case '7': { g. Force. Vec. Esfera = Apply. Force. To. Actor(esfera, Nx. Vec 3(0, 1, 0), g. Force. Strength. Esfera); break; } case '1': { g. Force. Vec. Esfera = Apply. Force. To. Actor(esfera, Nx. Vec 3(0, -1, 0), g. Force. Strength. Esfera); break; } }

Lição 1 – corpos rígidos[5] • Dentro do método Process. Inputs(), logo abaixo da

Lição 1 – corpos rígidos[5] • Dentro do método Process. Inputs(), logo abaixo da linha Process. Force. Keys(), faça uma chamada a Process. Force. Keys. Esfera(); • Por fim dentro do método Render. Callback(), logo abaixo da linha Draw. Force(box, g. Force. Vec, Nx. Vec 3(1, 1, 0)); chame o mesmo método mas com os parâmetros alterados para desenhar as forças na esfera, ou seja: Draw. Force(esfera, g. Force. Vec. Esfera, Nx. Vec 3(1, 0, 0)); Obs. : o último parâmetro é um vetor de cores RGB, use-o para definir uma coloração diferente e evitar confusões; • • Ainda em Render. Callback(), ponha a linha g. Force. Vec. Esfera = Nx. Vec 3(0, 0, 0); logo abaixo de g. Force. Vec= Nx. Vec 3(0, 0, 0); . Assim você garante que o desenho das forças será apagado quando as teclas não são pressionadas; • Aperte F 5 e teste os resultados.

Lição 1 – corpos rígidos[6] • Obs. : Physx oferece uma classe HUD (Heads

Lição 1 – corpos rígidos[6] • Obs. : Physx oferece uma classe HUD (Heads – Up - Display) para prover informação aos usuários; • Para escrever alguma informação utiliza a seguinte chamada dentro do metódo Initialize. HUD(); //posicao X e Y da mensagem na tela • hud. Add. Display. String(“sua mensagem", 0. 05, 0. 92);

Lição 2 – Junções(articulações)[1] • Volte para a pasta Training. Programs, e nela abra

Lição 2 – Junções(articulações)[1] • Volte para a pasta Training. Programs, e nela abra Programs e depois a pasta Chapter 2_joints; • Em seguida abra as pastas compiler -> vc 8 win 32 e abra o arquivo Lesson 201_joints; • Essa segunda lição trata de junções, que é a forma pela qual o Phys. X trata as articulações; • Neste exemplo aparece a classe Common. Code. Ela tem vários métodos que permitem a criação rápida de atores, forças e junções. • Existem muitos tipos de junções: revolução, prismática, cilíndrica, esférica, fixa, etc. Usaremos junção de revolução. • Execute (F 5) um pouco o arquivo; • Agora vamos alterá-lo.

Lição 2 – Junções(articulações)[2] • Primeiro, vamos criar os atributos atores e junção: –

Lição 2 – Junções(articulações)[2] • Primeiro, vamos criar os atributos atores e junção: – Adicione as linhas abaixo nos atributos globais // Actor globals Nx. Actor* capsula 1 = NULL; Nx. Actor* capsula 2 = NULL; // Joint globals Nx. Revolute. Joint* rev. Joint. Superior = NULL; //sera nossa junta de revolução • No metodo Init. Nx() faça as seguintes alterações; – Em // Create the objects in the scene aumente um pouco a posição y inicial da box 1 conforme indicado de verde, box 1 = Create. Box(Nx. Vec 3(0, 5. 75, 0), Nx. Vec 3(0. 5, 2, 1), 10); – Comente a linha: box 2 = Create. Box(Nx. Vec 3(0, 1, 0), Nx. Vec 3(0. 5, 2, 1), 10);

Lição 2 – Junções(articulações)[3] • Logo após o comentário da linha especificada, chame os

Lição 2 – Junções(articulações)[3] • Logo após o comentário da linha especificada, chame os métodos de criação de atores: capsula 1 = Create. Capsule(Nx. Vec 3(0, 10, 0), 3. 0, 0. 7, 1); capsula 2 = Create. Capsule(Nx. Vec 3(0, 1. 5, 0), 3. 0, 0. 7, 1); • Substitua essas linhas: Nx. Vec 3 global. Anchor = Nx. Vec 3(0. 5, 5, 0); Nx. Vec 3 global. Axis = Nx. Vec 3(0, 0, 1); Por essas Nx. Vec 3 global. Anchor = Nx. Vec 3(0. 1, 10, 0); Nx. Vec 3 global. Axis = Nx. Vec 3(0, 0, 3); Nx. Vec 3 global. Anchor. Superior = Nx. Vec 3(0, 5. 6, 0); Nx. Vec 3 global. Axis. Superior = Nx. Vec 3(0, 0, 1);

Lição 2 – Junções(articulações)[4] • As variáveis criadas anteriormente, serão os vetores Ancorâ e

Lição 2 – Junções(articulações)[4] • As variáveis criadas anteriormente, serão os vetores Ancorâ e Eixo das nossas junções. Eles são muito importantes pois definem o posicionamento da junção e os limites que, basicamente, definem os movimentos no eixo. • Por fim, logo após a substituição das linhas, chame os métodos responsáveis pelas junções da seguinte forma: – Na linha rev. Joint = Create. Revolute. Joint(box 1, box 2, global. Anchor, global. Axis); substitua box 2 por capsula 1; – E adicione em seguida a linha: rev. Joint. Superior = Create. Revolute. Joint(capsula 2, box 1, global. Anchor. Superior, global. Axis. Superior); – Atribua box 1 a variável g. Selected. Actor para poder selecionar os atores apertando a tecla “r”;

Lição 3 – Efeitos Físicos[1] • • Novamente na pasta Training. Programs, abra Programs

Lição 3 – Efeitos Físicos[1] • • Novamente na pasta Training. Programs, abra Programs e depois a pasta Chapter 4_Large_Scale_Physics_Effects; Dentro dela, abra compiler -> vc 8 win 32 e abra o arquivo Chapter 411_Fragmenting_Objects; Essa lição trata de fragmentação de objetos, usada em situações como explosões; Para isso, o Phys. X constrói um ator cubo. Que na verdade é uma caixa grande composta de várias caixas menores; Todas as caixas menores são atreladas umas as outras para dar a idéia de que tudo é apenas um único bloco grande; Execute um pouco o arquivo, clique com o botão direito em Lesson 411_Fragmenting_Objects no Solution Explorer, depois selecione Debug e Start new instance; Aperte “g” para particionar o bloco e “t” para lança-lo para o alto; Agora, vamos alterar o arquivo para criar uma pequena explosão utilizando o arremesso de uma esfera.

Lição 3 – Efeitos Físicos[2] • Na parte de atributos globais, adicione a linha

Lição 3 – Efeitos Físicos[2] • Na parte de atributos globais, adicione a linha abaixo para orientar a velocidade da esfera em relação ao eixo Z da câmera; // Camera globals extern Nx. Vec 3 g. Camera. Forward; • Ainda nos atributos globais, aumente o numero de blocos que formarão o cubo de 4 para 6; // Fracturing Globals const int i. Num. Boxes. On. Side = 6; • Também indique nos atributos globais que os atores estarão livres( atribuindo true a variável b. Release. Random. Shape); bool b. Release. Random. Shape = true;

Lição 3 – Efeitos Físicos[3] • Dentro do método Process. Inputs() mantenha a variável

Lição 3 – Efeitos Físicos[3] • Dentro do método Process. Inputs() mantenha a variável b. Release. Random. Shape com o valor true; • No metodo Special. Keys() adicione o seguinte case: case ' ': { //g. Camera. Pos indica que a posicao inicial da esfera sera a mesma da camera //4 sera o raio da esfera e 200 sua densidade Nx. Actor* sphere = Create. Sphere(g. Camera. Pos, 4, 200); //abaixo indicamos que a esfera percorrerá linearmente uma distância de 200 vezes //em relação ao eixo Z da camera sphere->set. Linear. Velocity(g. Camera. Forward * 200); break; } • Agora, sempre que você apertar a tecla de espaço uma esfera será lançada.

Lição 3 – Efeitos Físicos[4] • No método Create. Main. Object() atribua o valor

Lição 3 – Efeitos Físicos[4] • No método Create. Main. Object() atribua o valor 4. 5 a variável box. Start. Height para que o bloco maior inicie na cena numa posição adequada para que os blocos menores se separem sem alterar a estrutura; • Execute o arquivo alterado, clicando com o botão direito em Lesson 411_Fragmenting_Objects, no Solution Explorer, depois selecione Debug e Start new instance.

Referencias • FARIAS, Thiago; SILVA, Daliton; MOURA, Guilherme; BUENO, Márcio; TEICHRIEB, Veronica; KELNER, Judith.

Referencias • FARIAS, Thiago; SILVA, Daliton; MOURA, Guilherme; BUENO, Márcio; TEICHRIEB, Veronica; KELNER, Judith. Ageia Phys. X. In: Symposium on Virtual and Augmented Reality, 2007, Petrópolis. https: //www. gprt. ufpe. br/~grvm/pdfs/Minicursos/2007/SVR 2007_Apostil a. Tutorial. Phys. X. pdf • AGEIA - http: //www. ageia. com/ ou http: //www. ageia. com/physx/

Obrigado!!

Obrigado!!