quinta-feira, 2 de fevereiro de 2012

Aula 16 (dia 28/02/2012)

Pessoal, estou antecipando o post da aula 16, que será realizada somente no dia 28 de fevereiro.

Nessa aula faremos uma introdução sobre shaders. Utilizaremos uma linguagem de shader chamada OpenGL Shading Language (GLSL).

A idéia de "shaders" é poder sobrescrever a funcionalidade de algumas partes do pipeline de renderização padrão, que é mostrado abaixo. Iremos trabalhar com dois tipos de shares: o vertex shader e o fragment shader. Veremos mais detalhes em sala.


Se desejarem se antecipar, baixem um programinha para brincar com shaders em GLSL chamado "Shader Maker" em:
http://cg.in.tu-clausthal.de/teaching/shader_maker/index.shtml

Tutorial de GLSL em:
http://www.lighthouse3d.com/tutorials/glsl-tutorial/

Aula 15

Tendo em vista o prazo para realização do projeto final, na aula 15 fizemos uma revisão básica da utilização do nosso framework.

Teremos uma pausa de três semanas agora em fevereiro, retornando no dia 28. Portanto, utilizem esse tempo para focar no projeto.

A última versão do framework está disponível em:
http://www.inf.ufsc.br/~sms/data3d/projeto/
(vejam a data do arquivo e baixem o mais recente)

Abraços!

Marco

sábado, 28 de janeiro de 2012

Lightmapping

É interessante notar como é feita a iluminação em nossos cenários BSP. A técnica usada é conhecida como lighmapping. Toda iluminação é previamente calculada e salva como uma textura (primeira parte da imagem abaixo). Cada face a ser desenhada também possui uma textura do material sem iluminação (segunda parte). Essas duas texturas são mescladas em tempo de execução para obter a cor final de cada face (terceira parte).

sexta-feira, 27 de janeiro de 2012

Carregador de cenários BSP do Quake 3

Pessoal, implementei no nosso framework um carregador de arquivos BSP, que são usados no Quake 3 para descrever os cenários. Ficou muito bonito e rápido. Vejam as imagens.





  O BSP guarda informações para você calcular facilmente as faces que são potencialmente visíveis dada uma certa posição da câmera. Essa informação é chamada de PVS (potentially visible set). Além de eliminar objetos que estão fora desse conjunto, também descarto as faces que estão fora do frustum de visão da câmera. Dessa forma, apenas o necessário é enviado para desenho.

Abraços!

Marco

segunda-feira, 23 de janeiro de 2012

Aula 14

Vimos como acelerar o processo de detecção de colisão entre duas malhas complexas de triângulos via BVH (bounding volumes hierarchy).

A aplicação de teste usada consiste num bule que colide com um coelho. Os triângulos que se intersectam são pintados de amarelo em wireframe, conforme mostrado na figura abaixo.


Dada a grande quantidade de triângulos envolvidos, o resultado obtido é bastante satisfatório. A figura a seguir destaca a BVH envolvendo o coelho. O bule também possui uma estrutura semelhante associada.


quarta-feira, 18 de janeiro de 2012

Aula 13

Depois do recesso de fim de ano, retornamos às aulas nessa terça, dia 17/1.

A aula 13 foi dedicada à Unity3D. A fim de aprendermos o funcionamento básico dessa ferramenta, refizemos o jogo de Pong feito anteriormente na aula 7 com o nosso framework. Entre outros detalhes da Unity, vimos basicamente como criar e organizar GameObjects usando "prefabs"; usar hierarquias de GameObjects (obtendo efeito semelhante ao grafo de cena já implementado no framework); adicionar diferentes componentes a um GameObject (rigid body, collider, mesh render, scripts...); criar e usar scripts em C#; tratar input de teclado; adicionar skybox; adicionar fontes de luz; tratar colisão de forma personalizada; etc.

Aos que desejam usar a Unity3D para fazer o projeto final, recomendo começarem o quanto antes. Aproveitem e tragam dúvidas para as próximas aulas.

Na próxima aula, voltaremos a usar nosso framework para rever algoritmos e estruturas de dados usadas no processo de detecção de colisão.

sexta-feira, 16 de dezembro de 2011

Suporte ao Kinect

Isso foi feito em aulas anteriores, mas esqueci de comentar aqui no blog.

Nosso framework suporta ler dados de entrada do Kinect. Abstrações como "hand tracker" foram criadas para esconder chamadas às funções do OpenNI, tornando o uso mais fácil e intuitivo.


Foram criadas duas aplicações de teste. Na primeira, com uma mão, o usuário pode controlar uma esfera, fazendo-a colidir com outros objetos na cena. Com duas mãos, o usuário pode rotacionar e transladar a câmera virtual.



A outra aplicação é uma adaptação do jogo "acerte os coelhos" que fizemos em aulas anteriores. Ao invés de usar o mouse para clicar na tela e lançar esferas, o usuário pode usar apenas as mãos.



Usamos a interface do OpenNI para C++ com o middleware NITE da PrimeSense. Mais detalhes em: www.openni.org