Realidade Virtual
Trabalho Prático
2011/2
Objetivo deste trabalho é desenvolver uma aplicação de realidade aumentada
em que o cenário real é captado por uma câmera real e sobre estas imagens são acrescentados objetos virtuais.
O trabalho está dividido em duas partes. Na primeira, sobre o ambiente
real são exibidas imagens de objetos virtuais. Na segunda, os objetos
reais devem rastreados e interagir com os objetos virtuais.
Parte I
Entrega: 22/10/2012
Valor: 3.5
Nesta primeira etapa o objetivo é exibir objetos virtuais registrados ao cenário real.
O cenário real deve ser composto por objetos de formas simples(cubos, pirâmides, esferas, cilindros) que
caibam em cima de uma mesa quadrada de, no máximo, 0.5m de lado. O
cenário deve ter, pelo menos 4 objetos.
As imagens do cenário real devem ser gerado por uma webcam.
Para cada objeto real, o programa deverá exibir um objeto virtual de mesma forma, ao qual chamaremos de "fantasma".
Posicionamento da Câmera Virtual
O cenário real deve ser filmado por uma webcam,
que além de gerar a imagem deste cenário, deverá prover informações que
permitam gerar a posição da câmera virtual a ser usada para exibir os
objetos virtuais.
A posição da câmera real pode ser obtida de duas formas:
Cópias locais do Artoolkit podem ser obtidas nestes links:
Caso haja a intenção de usar
uma ferramenta diferente, o professor deve ser consultado.
O ângulo de visão da webcam deve ser calculado com base na imagem de um quadriculado, de dimensões conhecidas, posicionado perpendicularmente à câmera.
Após a
obtenção da posição da câmera real, um novo programa deve entrar em
execução a fim exibir o cenário virtual sobreposto ao real.
Captura das Imagens da Webcam
Para capturar imagens da webcam, sugere-se utilizar a bibblioteca CameraClass.
Esta biblioteca utiliza duas outras bibliotecas, uma para capturar a
imagem da webcam e outra para permitir o processamento de cada frame
obtido.
Para capturar a imagem da webcam é utilizada a biblioteca IM, desenvolvida no TecGraf da PUC-Rio.
Para permitir o acesso aos pixels de
cada frame do vídeo e assim prossibilitar que se processe a imagem é
utilizada a biblioteca ImageClass, desenvolvida no Grupo de Realidade
Virtual da PUCRS.
As imagens também podem ser obtidas de um vídeo pré-gravado com uma webcam. Neste caso, sugere-se utilizar a classe VideoClass.
Para corrigir eventuais distorções radiais nas imagens, sugere-se utilizar o código disponível neste exemplo.
Posicionamento do Objetos Reais
A posição(e orientação) dos objetos reais no cenário devem ser informada
para o programa por meio de um arquivo texto. Este arquivo poderá ser
modificado pelo professor e o programa deve funcionar sem a necessidade de se recompilar o código.
Neste caso, o programa deverá ser reiniciado para que a nova posição de cada objeto virtual seja lida
pelo programa.
Exemplo de aquivo com os fantasmas do cenário:
2 << número de objetos no cenário
CUBO.OBJ << nome do arquivo que contém o objeto
POS 10 15.5 2
ROTX 0
ROTY 90
ROTZ 0
PIRAMIDE.OBJ
POS 0 -5 2
ROTX 90
ROTY 0
ROTZ 0
Veja neste vídeo um exemplo de um cenário real.
Objetos Virtuais
Para completar o
cenário, pelo menos 3 objetos virtuais devem ser exbidos 'passeando'
pelo cenário. Dois destes objetos devem se mover de forma autônoma e
devem passar na frente e atrás dos objetos reais, em relação à câmera
que visualiza o cenário. Um dos objetos deve poder ser controlado pelo
usuário com 6 DOFs.
Os objetos virtuais podem ser desenhados com as primitivas da GLUT ou de OpenGL.
Fantasmas dos Objetos Reais
O programa deverá ser capaz de exibir ou esconder os fantasmas a qualquer momento, por um comando do usuário, sem
a necessidade de recompilar o código.
Para a utilização dos fantasmas dos objetos reais, estes devem ser
desenhados com a função de mascaramento cores do OpenGL.
Os fantasmas dos objetos reais podem ser desenhados com as primitivas da GLUT ou de OpenGL.
Parte II
Entrega: 26/11/2012
Valor: 3.5
Objetivo
Nesta segunda etapa o objetivo é fazer o rastreamento de um
objeto real em movimento e usá-lo para interagir com objetos virtuais.
O programa deverá:
- calcular a posição do objeto real em movimento;
- simular a colisão deste objeto real com objetos virtuais colocados no cenário;
- simular a colisão dos objetos virtuais com objetos fixos do cenário.
Descrição
O programa deve processar uma sequência de quadros de aproximademente 1
minuto. Esta sequência pode tanto ser um vídeo, quanto uma sequência de
imagens captadas de uma câmera e processada em tempo real.
Nesta sequência deve haver um cenário com objetos estáticos e "no meio"
deste cenário deve aparecer um objeto móvel, como por exemplo uma
esfera rolando, um objeto "puxado por uma corda", ou um pequeno carro
de brinquedo em movimento. O objeto deve passar mais de uma vez pelo
cenário, e colidir com objetos virtuais.
O programa deve identificar o objeto móvel em cada frame e substituir
este objeto pois um objeto virtual de tamanho e forma equivalentes, em
3D.
Posição da Câmera Real
A câmera real deve ser posicionada, em relação ao
cenário, de maneira semelhante à posição de uma pessoa que observa
objetos sobre uma mesa, estando afastada da mesa, de maneira semelhante
à figura a seguir.
Figura - Posicionamento para a Câmara
Posição da Câmera Virtual
A posição de câmera virtual deve ser a mesma da câmera
real. A posição (e o alvo) da câmera real deve ser obtida usando o
ARToolkit. Após esta obtenção, o uso do ARToolKit não é mais permitido.
Rastreamento da Posição do Objeto Móvel
Para rastrear o objeto móvel sugere-se o uso de algum método de
segmentação por cor. Para tanto, o piso do cenário pode ser
monocromático, assim como o objeto móvel.
Para obter a posição do objeto móvel no cenário, é preciso "desfazer" a
perspectiva obtida pela câmera. Para tanto, o programa deve usar o
código disponível nos fontes Warp.h e Warp.c.
Este código permite que, ao se obter as coordenadas de um ponto em uma
imagem em perspectiva, se possa converter esta coordenada para um
cenário retangular, como na figura a seguir.
Algumas instruções sobre o uso deste deste código podem ser obtidas neste arquivo.

Figura 1 - Mapeamento de Coordenadas
Posição dos Objetos Fixos
Os objetos (reais) fixos devem ser posicionados no cenário e devem
existir equivalentes virtuais, posicionados como na primeira parte do
trabalho.
Objetos Virtuais
O cenário deve conter pelo menos 10 objetos virtuais, inicialmente parados.
À medida em que o movimento do objeto real o fizer colidir com um
objeto virtual, estes objetos virtuais deverão mover-se respondendo à
colisão. Ao se mover, um objeto virtual pode colidir com outros objetos
virtuais e/ou reais. Este outros objetos virtuais deverão seguir
respondendo corretamente a colisã˜.
Tratamento de colisões
Para tratar as colisões de objetos reais com objetos virtuais e de
objetos virtuais com virtuais deve ser utilizada a biblioteca Box2D.
Para cada objeto real(fixo ou móvel) deverá haver um objeto virtual
equivalente na Box2D. Isto permitirá que ao mover-se o objeto real
colida com objetos virtuais e provoque seu movimento.
Links
de OPENGL
OpenGL
(Introdução)
OpenGL
(Transformações Geométricas)
OpenGL
(Visualização 3D)
OpenGL (Carga de Objetos
3D)
MATERIAL
DE APOIO
Material
de Computação Gráfica Básica
OpenGL
Arquivo
de Help
Tutorial
da Profa. Isabel Manssour
SmallVR