Realidade Virtual
Aula 2
Remis Balaniuk
Enxergando grande, começando
pequeno
• Quem começa a aprender RV normalmente sofre um
primeiro impacto negativo ao constatar o grande número
de tópicos que devem ser estudados:
– linguagem de programação: C, C++, Java(?)
– Biblioteca gráfica: OpenGL, VRML :-((
– Geometria tridimensional: vetores, transformadas, coordenadas
homogêneas, etc
– Física: equações do movimento (força, velocidade, aceleração,
gravidade, etc), propriedades dos objetos (massa, densidade,
elasticidade, etc), energia, etc.
– Estratégias de simulação: multi-threads, sincronização,
frequências de simulação.
– Drivers e dispositivos.
Enxergando grande, começando
pequeno
• A implementação de aplicações, quando
feita do zero, exige bastante esforço de
programação.
• Difíceis de depurar (multi-thread).
• Modelos são difíceis de serem construídos
(definição do mesh de triângulos,
definição das propriedades do objeto, etc).
Enxergando grande, começando
pequeno
• Por isso, essa disciplina vai adotar as seguintes
estratégias para otimizar o aprendizado:
– não reinventar a roda:
• usaremos um ambiente de programação adequado, que
tenha recursos que facilitem a programação e o debug : o
Borland C++
• ao invés de usar o OpenGL diretamente adotaremos uma
biblioteca de classes pronta que já traga implementadas as
estruturas básicas (vetor, matrizes, operações sobre vetores
e matrizes, apresentação, definição de atributos, etc).
Usaremos o Chai3d.
Enxergando grande, começando
pequeno
– defina de forma bem estruturada suas classes, de
forma que essas possam ser reutilizadas de uma
aplicação para outra.
– programe de forma limpa e bem documentada.
– aprenda implementando:
• ataque problemas começando pelos mais simples, e
aumente gradualmente sua complexidade.
• dê ênfase ao estudo das transformações geométricas, que
são o ponto crucial de uma aplicação em RV.
• explore os recursos da biblioteca gráfica para entender bem
seu funcionamento.
Passos
• Passo 1: escolher a plataforma de implementação
– VRML ou OpenGL?
• VRML
– é uma linguagem descritiva de objetos tridimensionais.
– necessita de um browser para visualização
– o browser, por ser uma caixa preta, não permite adicionar recursos
de vizualização ou alteração no modelo durante a simulação
(deformação, dinâmica, etc)
– é mais simples a ser usado mas limitado quanto ao uso
• OpenGL
– é uma linguagem procedural, que envia instruções à placa gráfica
– é bem primária, baseada em primitivas gráficas como linhas,
pontos, polígonos simples, cor do fundo, orientação da camera
virtual, etc
– código difícil de depurar pois não dá mensagens de erro
– instruções dependem do contexto (matriz de transformação) e o
programador é que deve entender esse contexto (camera virtual)
Passos
• Passo 1: escolher a plataforma de
implementação (cont.)
– escolha da linguagem
– escolha do ambiente de programação
• glut: biblioteca que adiciona recursos básicos ao
OpenGL, tais como abrir janelas, adicionar menus, etc. É
multi-plataforma (Windows, Unix)
• MS -Visual, Borland Builder: já trazem recursos de
gerenciamento de janelas (mais sofisticados que os do
glut) mas são restritos ao Windows.
– escolha de uma biblioteca
• deve conter estruturas de dados e classes abrangentes
Passos
• Passo 2: definir (ou entender) as
estruturas de dados que descrevem o
mundo
– o mundo virtual é composto de objetos
tridimensionais, cuja superfície é descrita
normalmente através de meshes de polígonos
(normalmente triângulos).
– um mesh é um conjunto de vértices,
conectados pelos polígonos.
– Um vértice é uma localização no espaço
descrita por um vetor de coordenadas [x,y,z]
– um polígono é uma lista de vértices e um vetor
normal (orientação para refletir a luz)
– cor, textura e tipo de material são ainda
propriedades dos polígonos
– um objeto é uma lista de polígonos
Passos
• Passo 3: entender os sistemas de
coordenadas
– a posição de um objeto no espaço (definida pela
posição dos seus vértices) assume que existe um
sistema de coordenadas conhecido, em função
do qual essas posições são definidas
– antes de mostrar na janela o mundo virtual é
preciso definir de qual ângulo e posição se deseja
ver esse mundo
– para isso de usa a metáfora da câmera virtual
– a câmera define uma outro sistema de
coordenadas, que muda constantemente,
enquanto o sistema onde os objetos são definidos
permanece fixo.
– Para mostrar o mundo pela perspectiva da
câmera virtual é feita uma transformação de
coordenadas de um sistema a outro (o OpenGL
faz isso)
Passos
• Passo 4: estudar os conceitos de transformações
geométricas
– movimentos do objeto como um todo (movimentos
rígidos) e as mudanças na câmera virtual são definidos
por uma composição de translações, rotações e
mudanças de escala
– essas transformações geométricas são implementadas
usando matrizes especiais chamadas de “coordenadas
homogêneas”
– o domínio dessas transformações e de sua
implementação é o ponto crítico da aprendizagem em
Computação Gráfica e Realidade Virtual.
– deformações definem movimentos específicos a cada
vértice que são calculados e aplicados um a um.
Passos
• Passo 5: entender o estrutura de controle da
simulação
– uma simulação é composta por loops simultâneos
(threads paralelas), cada um cuidando de um
aspecto da simulação
– aliás o loop é a forma de “fatiar” o tempo
(discretizar) de forma a tratar um processo
continuo em passos discretos.
– os loops devem ser repetidos diversas vezes por
segundo para criar a ilusão de continuidade
– a placa gráfica está sempre em loop exibindo a tela
e suas janelas
Passos
• Passo 5: entender o estrutura de controle da
simulação (cont.)
– uma simulação está ligada a uma janela (o mundo virtual)
– o loop gráfico (ou refresh) da aplicação executa os
comandos OpenGL que definem as primitivas gráficas que
aparecem na janela.
– se esse loop parar a placa gráfica vai continuar a mostrar a
ultima imagem gerada.
– se o mundo muda continuamente o loop gráfico precisa
rodar a pelo menos ~30Hz (como um filme) para dar a
sensação de continuidade dos movimentos.
– mudanças na câmera virtual são simuladas nesse loop
Passos
• Passo 5: entender o estrutura de controle da
simulação (cont.)
– no loop de atualização do mundo (ou update) é simulada
as mudanças ocorridas no mundo, ou seja, as mudanças de
posição e orientação dos objetos, as deformações, etc.
– se houver simulação física, a cada passo desse loop serão
recalculadas forças, acelerações, velocidades e posições
dos objetos.
– colisões também são tratadas nesse loop.
– para cada mudança num objeto a posição de todos os seus
vértices deve ser recalculada.
– esse loop pode funcionar mais devagar ou mais rápido que
o loop gráfico dependendo da aplicação.
– se eles funcionam sempre na mesma velocidade podem ser
juntados.
Passos
• Passo 5: entender o estrutura de controle da
simulação (cont.)
– o loop háptico calcula forças da interação
entre o usuário e os objetos virtuais
– devido à nossa alta sensibilidade tátil o
refresh háptico precisa ser muito mais
rápido (~1000Hz).
– devido a essa alta velocidade, o loop
háptico precisa ser bastante otimizado e
não pode realizar cálculos e testes longos.
Passos
• Passo 6: estudar animações
– uma animação pode ser baseada numa simulação física ou
não
– se não for física a implementação depende das
características da aplicação
– se for física é preciso estudar os conceitos básicos de
integração de equações diferenciais.
– o estado de um sistema físico é definido pela velocidade e
posição dos objetos.
– para recalcular o estado é preciso integrar (somar) as
acelerações, que podem ser causadas pela gravidade ou
forças externas
– como cada passo da integração depende do intervalo de
tempo considerado, é preciso ficar atento ao controle do
loop de update para que o intervalo de tempo real coincida
com o virtual.
Passos
• Passo 7: tópicos específicos
– algoritmos de detecção e tratamento de
colisões
– algoritmos de cálculo da interação háptica
– Texturas, materiais, luzes
Download

RVaula2 - GEOCITIES.ws