Upload
gustavo-serpe
View
218
Download
0
Embed Size (px)
Citation preview
Realidade VirtualAula 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