Arquivo da categoria: Computação Gráfica

Hey Control Me

Finalmente o site pode ser publicado (apesar de não ter terminado ainda). No http://www.heycontrol.me qualquer um pode controlar as luzes de casa e ver as mudanças em tempo real, através de uma câmera. Veja o video tour ou visite o site e interaja você mesmo!

Visite: http://www.heycontrol.me

O site também agrega todos os meus projetos de automação e possui bastante conteúdo. Mais pra frente quero postar as tecnologias por trás dessa empreitada, como jquery mobile, webgl, etc. Obrigado a todos que me ajudaram a não desistir desse projeto. 😉

3 Comentários

Arquivado em 3D, Arduino, Automação Doméstica, Computação Gráfica, Desenvolvimento, Eletrônica, Geek, Java

AABB – uma árvore para controle espacial e otimização de colisão

Vou começar alguns posts sobre “árvores de controle espacial e otimização de colisão”. Espacial nesse caso nada tem a ver com o universo, é espaço mesmo, ou seja, uma estrutura de dados que tem como objetivo organizar e otimizar os objetos espalhados em um determinado espaço.

Quando você aplica certo controle dos objetos no espaço, e essas estruturas de dados garantem isso, a implementação de diversas tecnicas de computação grafica se tornam viavies.

A primeira arvore que vou tratar é a arvore AABB (Axis Aligned Boundary Box). É uma das mais simples de implementar e que, nos meus projetinhos, já garantiram funcionalidades interessantes, como a “seleção de objetos 3D com o mouse”.

Figura 1 – Exemplo de AABB Tree – Existem caixas de volume para cada objeto, mas também caixas de volume que englobam as organizações hierárquicas de pai e filhos. Na figura, a cena tem dois filhos e um de seus filhos possui um filho também (confira a árvore de cena à esquerda)

Ela também pode ser usada para otimizar detecção de colisões. É possível refina-la em um nivel que, mesmo ela sendo alinhada ao eixo, garanta uma forma acurada de detecção de colisão

Figura 2 – É possível refinar a AABB para o mesmo objeto, aumentando assim a precisão em um possível teste de colisão. Fonte da Imagem: http://www.cgal.org/Manual/latest/doc_html/cgal_manual/AABB_tree/Chapter_main.html

Continuar lendo

Deixe um comentário

Arquivado em 3D, Computação Gráfica, Desenvolvimento, Desenvolvimento de Jogos

Arrows Engine – Lições aprendidas em um projeto fracassado de engine de jogos

Aee pessoal,

Como meus progressos no kinect estão lento (estou fazendo refactoring no código, e também estou sem muito saco para programar depois do trabalho), vou postar sobre o que aprendi (em outras palavras, O QUE NAO FAZER) no desenvolvimento abortado da minha engine de jogos.

Antes de mais nada, que fique claro que este post não dá lições de como você criar sua engine, mas lições que podem ser util no processo de desenvolvimento da engine!

O projeto em questão era criar uma engine de jogos 3D, ou seja, tanto o motor como um ambiente de criação de jogos. O nome que eu dei para ela era Arrows Engine, em homenagem à equipe de F1 Arrows.  Abaixo segue uma foto da suíte de criação de jogos:

Suite de criação de Cena - (Clique para ver em tamanho real) Nesse programa era possivel adicionar os modelos na cena a partir da biblioteca de modelos. Era possivel também posiciona-los na cena. Ele compunha a biblioteca com importações de modelos 3DS. Note que a organização da cena, no lado esquero, era para ser feito em celulas, carregadas via streaming pela proximidade (Sonho Meu!!!)

Esse foi um projeto que comecei para saciar meu sonho de produzir um jogo e que abandonei entre 2006 e 2007  inacabado(2º e 3º ano da faculdade). Mas acho que posso passar um pouco de “lições aprendidas” sobre o processo de desenvolvimento de uma engine de jogos que pode ajudar quem quer começar a fazer a sua ou em qualquer projetinho pessoal. Muitas das lições parecem quem contrariam o que aprendemos e lemos sobre desenvolvimento de software, mas utilizei varias delas em meu mestrado e obtive um bom resultado. 😉

Continuar lendo

Deixe um comentário

Arquivado em 3D, Computação Gráfica, Desenvolvimento, Desenvolvimento de Jogos, Geek

Controlando intensidade da Luz com Kinect – Dimmer + KinectHack

Continuando as experiencias do ultimo post (http://wp.me/s1pSXR-153), alterei a solução do kinect para controlar a intensidade da luz com meus gestos.

O resultado pode ser visto no video abaixo (esposa já tá querendo cobrar pelos serviços de filmagem.. olha só!):

Segundo o meu amigo Tanaka, o gesto que ativa a bagaça é o gesto do Hadouken! lol… ele me aconselhou a mudar o gesto para distancia na vertical, por que a idéia inicial de ser na horizontal podia ficar meio embaraçosa (ia parecer que estava medindo outra coisa O.o)

Continuar lendo

3 Comentários

Arquivado em 3D, Arduino, Automação Doméstica, Computação Gráfica, Eletrônica, Geek, Java

Usando o Kinect para apagar a luz. Automação + KinectHack

UPDATE: controlando a intensidade da luz com o Kinect http://wp.me/p1pSXR-2I

Estou sumido do blog hein (como se alguem sentisse falta, kkkk). Tive alguns problemas de saude (enxaqueca + stress) que me afastaram um pouco dos meus projetos mas agora estou retomando as coisas, muito mais relax.

E dando continuidade ao meu projeto de automação domestica, eu acabei de terminar a primeira versão (mais cheia de bugs que o windows millenium) do programa que liga e desliga a luz do meu escritório usando o Kinect.

Segue um video da bagaça funcionando (mira la camiseta no video… VAI CURINTIA!!!):

Em poucas palavras, o que eu fiz:

  • Desenhei a planta do meu apto em um mundo 3D*.
  • Capturei o plano de profundidade do kinect
  • Alinhei o plano na posição correta (fazendo os devidos ajustes de abertura de câmera do kinect)
  • Adicionei uma entidade que representa a lampada no mundo 3D*.
  • Obtive os esqueletos das pessoas “trackeadas” pelo Kinect
  • Estendi alguns vetores do braço do esqueleto
  • Fiz um controle pra quando esses vetores atingissem a lampada, que gerasse um evento (só se apontar por 400ms)
  • Com o evento de seleção da lampada, usei meu Framework de automação para enviar os comandos corretos para a unidade de processamento junto ao interruptor, via radio.

19 Comentários

Arquivado em 3D, Arduino, Automação Doméstica, Computação Gráfica, Desenvolvimento, Detecção de Movimento, Eletrônica, Geek

Técnicas de Jogos 1 – Tile Based Rendering

Sempre que puder, vou tentar postar algum material que produzi sobre algumas técnicas utilizadas em jogos.

Tile Based Rendering (em jogos 2D)

Essa técnica consiste em representar toda a cena e seus objetos através de blocos de pixels (comumente  8×8 pixels, que doravante será usado como tamanho referencia para os exemplos que seguem) chamados de tiles. Esses blocos são armazenados na memória de vídeo e o framebuffer é composto por uma matriz (de tamanho W/8 e H/8 sendo W a largura da tela em pixel e H a altura da tela em pixel) que indexará o conjunto de tiles.

Continuar lendo

Deixe um comentário

Arquivado em 2D, Computação Gráfica, Desenvolvimento, Desenvolvimento de Jogos, Geek, Jogos

Image Energy Sucker (Redimensionamento de Imagem Inteligente)

Bom, hoje vou postar sobre outro projetinho interessante que fiz na faculdade, com meu amigo Gabriel, na matéria de processamento de imagens do mestrado. Ele “se chama-se” Image Energy Sucker Tabajara :-P.

Qual foi a idéia do projetinho? Bom, a idéia era fazer um algoritmo de redimensionamento inteligente de imagens que tentasse retirar partes de pouca relevância ao todo e mantivesse o mais importante, fazendo isso sem deformações.

No método convencional, tanto a montanha quanto o golfinho sofreram deformações

Note que o barco não foi deformado no redimensionamento por energia.

Claro que não criamos nada novo. Tiramos a idéia desse vídeo ninja do maluquinho que alias foi contratado depois pela Adobe, que incorporou essa funcionalidade na nova versão do photoshops.

Porém o mais legal foi que fizemos sem ler o paper do cara. Olhamos o vídeo e pensamos em como descobrir a “energia” da imagem, ou seja, as partes mais relevantes, para então remover as menos relevantes. Logo, todas as soluções são nossas, são simplese baseadas somente nos resultados exibidos no vídeo dele.

Antes de explicar como fizemos a bagaça, acho que vale a pena postar um video do programa funcionando para entender melhor o que fizemos:

Continuar lendo

Deixe um comentário

Arquivado em Computação Gráfica, Desenvolvimento, Geek, Java, Processamento de Imagens