A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Realidade Virtual Aula 3 Remis Balaniuk. Conteúdo Nessa aula serão apresentados os conceitos básicos de geometria 3D ao mesmo tempo em que será apresentada.

Apresentações semelhantes


Apresentação em tema: "Realidade Virtual Aula 3 Remis Balaniuk. Conteúdo Nessa aula serão apresentados os conceitos básicos de geometria 3D ao mesmo tempo em que será apresentada."— Transcrição da apresentação:

1 Realidade Virtual Aula 3 Remis Balaniuk

2 Conteúdo Nessa aula serão apresentados os conceitos básicos de geometria 3D ao mesmo tempo em que será apresentada a biblioteca Chai3D no Borland Builder. Os conceitos de geometria são genéricos e independem do Chai O Chai será apresentado paralelamente aos conceitos para facilitar a sua compreensão.

3 Chai A biblioteca Chai pode ser obtida no endereço: http://www.chai3d.org Após o download do arquivo zip o seu conteúdo deve ser extraído, gerando uma árvore de diretórios contendo fontes, executáveis e exemplos do Chai no Borland Builder e no MS Visual. Nós usaremos o Borland Builder 6.0 Crie um diretório ‘Aulas RV’ abaixo de chai3d/examples Copie do site da disciplina o diretorio `aula1’ em baixo de ‘Aulas RV’ Clique em aula1.bpr no diretório aula1 para abrir o projeto aula1

4 Elementos do BBC++ Note no main.cpp as seguintes características: –A aplicação é toda construída em torno de um formulário (Form1) que contém um painel (Panel1) que corresponde à área preta do formulário e onde aparecerão as imagens gráficas. –A classe TForm1 é uma especialização de TForm, que é uma classe do BBC++ –O método FormCreate é chamado assim que a aplicação é executada, e nesse método as estruturas do Chai são definidas.

5 Elementos do BBC++ Note também: –O Timer adicionado à aplicação é um recurso do BBC++ e define um objeto que quando ativo (Enabled=true) executa repetidamente o método Timer1Timer a um intervalo definido de tempo (configurado para 20ms nessa aplicação). –Nessa aplicação o timer é usado só para dar um ‘refresh’ na tela, ou seja, atualizar o seu conteúdo. –O grupo TGroupBox *GroupBox7 e e o botão TButton *Button2 também são recursos do BBC++ e o método ToggleGirarButtonClick é chamado quando se clica no botão. –Esses recursos de botão e outros são configurados no BBC++ na base do ‘drag-and-drop’ e configurados ao se clicar no ícone correspondente.

6 Elementos do Chai As demais estruturas da aplicação são do Chai e correspondem à definição da cena gráfica. Junto com a explicação de cada estrutura vamos conhecer os conceitos geométricos básicos que essas estruturas implementam.

7 Introdução Em Computação Gráfica é importante distinguir o modelo de sua representação O modelo, também chamado de topologia, é a composição de pontos, que são ligados por segmentos de reta, que delimitam polígonos, que por sua vez formam as superfícies dos objetos. Ainda como parte do modelo, uma série de propriedades são atribuídas a essas entidades, tais como cor, material, textura, etc. A posição de um objeto é definida pela posição de seus pontos no espaço, e essa posição é parte da representação daquele objeto. O mesmo objeto pode ser representado em diferentes posições, orientações e tamanho sempre com a mesma topologia.

8 Exemplo do mesmo modelo em representações diferentes

9 Introdução A representação de uma cena virtual pode conter diversos modelos. A definição de uma cena virtual começa pela definição de um mundo (cWorld no Chai): // cria uma nova cena world = new cWorld();

10 Introdução Esse mundo é a raiz de uma estrutura hierárquica sob a qual todos os componentes da cena virtual serão conectados. Uma das propriedades da cena é a cor de fundo // define cor de fundo world->setBackgroundColor(0.0f,0.0f,0.0f);

11 Cores Note que a definição de cores se faz seguindo o padrão RGB (Red Green Blue). Nesse padrão os 3 números definem a proporção entre vermelho, verde e azul que compõem a cor desejada Exemplo: –(0.0,0.0,0.0) = preto –(1.0,1.0,1.0) = branco –(0.0,0.0,1.0) = azul –(0.5,0.0,0.5) = vermelho + azul em iguais proporções que dá uma cor próxima do lilas.

12 Câmeras e viewports Para que esse mundo possa ser observado, uma ou mais câmeras devem ser criadas: // cria uma camera camera = new cCamera(world); world->addChild(camera); Note que toda estrutura criada daqui para frente deve ser adicionada à cena (addChild) A câmera permite a observação da cena. Para que a imagem ‘vista’ pela câmera possa ser mostrada é preciso ligar a câmera a uma janela de exibição (chamada de viewport no Chai) janelas (viewports no Chai) são criadas assim: // cria um display para apresentar a cena viewport = new cViewport(Panel1->Handle, camera, true); Note que a viewport esta associada a um painel da aplicação Borland e a uma câmera. Várias viewports e várias câmeras podem ser criadas para a mesma cena, permitindo visualiza-la de diferentes ângulos simultanemente.

13 cVector3d Em geometria 3D usamos com frequência vetores tridimensional, ou seja, uma estrutura numérica com 3 reais. Esse tipo de vetor é utilizado para representar posições, direções e outras informações. A classe cVector3d é definida por 3 valores: x,y e z, e um conjunto de métodos que permitem efetuar as principais operações vetoriais, tais como adição, produtos, normalização, cálculo do comprimento, etc.

14 Posições 2D e 3D Posições no espaço são descritas por meio de vetores representando um deslocamento com relação à origem de um sistema de coordenadas. A figura abaixo a direita representa o chamado “sistema de coordenadas da mão direita” para espaços 3D

15 Sistema de coordenadas do Chai Exemplo de posição no Chai x+x- y+ y- z- z+ 2 1.5 2.5 (2.5,2.0,1.5)

16 Direções Um vetor 3D pode também ser usado para indicar uma direção: x+x- y+ y- z- z+ (-0.7, 0.0, 0.7)

17 Direções Um vetor 3D usado para indicar direção é normalmente unitário, ou seja, seu comprimento é igual a 1. x+x- y+ y- z- z+ (-0.7, 0.0, 0.7)

18 Direções O comprimento l de um vetor 3D (x, y z) é calculado como: –. x+x- y+ y- z- z+ (-0.7, 0.0, 0.7)

19 Direções Um vetor 3D (x, y z) não unitário pode ser ‘normalizado’, ou seja, transformado em unitário fazendo-se: –(x/l, y/l. z/l) x+x- y+ y- z- z+ (-0.7, 0.0, 0.7)

20 Câmeras Uma câmera é definida por 3 informações (todas as 3 codificadas em vetores 3D): –Sua posição no espaço –O ponto para onde está ‘olhando’ (lookat) –E a postura da camera, ou seja, se esta em pé, de lado, de cabeça para baixo, etc (up)

21 Câmeras Exemplo: // posicao da camera cVector3d pos = cVector3d(0,0,3.0); // para onde a camera esta olhando cVector3d lookat = cVector3d(0,0,0); // define postura cVector3d up(0.0, 1.0, 0.0); // define posicao da camera camera->set(pos, lookat, up); x+x- y+ y- z- z+

22 Luzes Para ser visível a cena precisa conter pelo menos uma fonte de luz. Luzes são definidas pela sua posição e tipo: // cria uma fonte de luz e liga ao mundo light = new cLight(world); light->setEnabled(true); light->setPos(cVector3d(2,1,1)); Por default uma luz é difusa, ou seja, emite em todas as direções. É possível definir luzes direcionais (spotlights): –light-> setDirectionalLight(true); Nesse caso é preciso definir também a direção do foco. Diversas outras propriedades das luzes podem também ser definidas.

23 Elementos gráficos Os objetos de uma cena tridimensional são normalmente definidos por ‘meshes’. Um mesh é uma rede de vértices conectados por arestas definindo polígonos. Um mesh define uma superfície tridimensional. Quando totalmente fechada essa superfície pode representar um objeto volumétrico object = new cMesh(world); world->addChild(object);

24 Elementos gráficos Vértices são implementados no Chai pela classe cVertex. Além da posição 3D, um objeto da classe cVertex possui uma série de propriedades, como cor, posição na textura, além de uma série de métodos. Exemplo: int p1 = object->newVertex(-0.5, 0.0, 0.0); object->getVertex(p1)->setColor(1.0,0,0,1); –Note que o método newVertex da classe cMesh cria um novo vértice e retorna um sequencial correspondente à posição do novo vértice na lista de vértices do mesh. –getVertex retorna o ponteiro para o vértice na posição indicada pelo parâmetro. –setColor é um método da classe cVertex que permite configurar a sua cor.

25 Elementos gráficos Com os vértices se pode definir polígonos. O polígono mais utilizado para compor os meshes é o triângulo, por esse ter a propriedade de ter necessariamente seus vértices coplanares. No Chai os triângulos são implementados pela classe cTriangle.

26 Elementos gráficos Uma forma mais prática de adicionar triângulos a um mesh é usando o método abaixo: int p1 = object->newVertex(-0.5, 0.0, 0.0); int p2 = object->newVertex( 0.5, 0.0, 0.0); int p3 = object->newVertex( 0.0, 0.0, 0.5); //cria o triangulo no mesh object->newTriangle(p1, p3, p2); Note que primeiro foram criados os vértices para depois criar o triângulo passando como parâmetro os sequenciais dos vértices.

27 Elementos gráficos Um polígono tem direção, que é chamada de ‘normal’. A normal de um polígono indica para onde esse está voltado. Essa informação define como a luz incidirá em cada polígono do mesh. No exemplo abaixo o triângulo da esquerda será iluminado pela luz e ficará visível na cena, enquanto o da direita vai ficar sem cor (com a cor de fundo da cena). Luz

28 Elementos gráficos Para que as normais de todos os triângulos de um mesh sejam atualizadas use o seguinte método: // compute normals object->computeAllNormals(true); As normais do mesh precisam ser recalculadas sempre que esse se movimentar na cena, pois isso muda a orientação dos triângulos com relação às fontes de luz.

29 Elementos gráficos O cálculo da normal de um triângulo é influenciado pela ordem dos vértices na criação do triângulo. A normal estará ‘saindo’ do triângulo (apontando em sua direção) se ao você olhá-lo de frente ver os vértices no sentido anti-horário.

30 Elementos gráficos Exemplo: considere o código abaixo cVector3d p1(-0.5, 0, 0); cVector3d p2( 0.5, 0, 0); cVector3d p3( 0, 0.5, 0); //caso 1 - esse triangulo ficara voltado para y+ object->newTriangle(p1, p2, p3); //caso 2 - esse triangulo ficara voltado para y- object->newTriangle(p1, p3, p2); x+x- y+ y- z- z+ p1 p2 p3 Caso 1 x+x- y+ z- p1 p2 p3 Caso 2 normal

31 Projeto aula1 O projeto aula1 implementa uma aplicação simples no qual um triângulo é visualizado por uma câmera que pode rodar em torno dele ao clicar num botão. Note os seguintes detalhes: –a posição da câmera é recalculada cada vez que o botão é acionado. O ângulo de rotação é incrementado a cada clique. –quando a câmera passa para o lado de trás do triângulo esse desaparece da cena pois seu fundo não recebe incidência de luz. –a cor do triângulo é uma combinação das 3 cores básicas definidas em cada um vértices –o refresh periódico da janela controlado pelo timer.

32 Exercícios Adapte o projeto aula1 de forma a: –Mostrar um quadrado na tela no lugar do triângulo. –Tornar o quadrado visível dos dois lados. –Adicionar um botão que suba e desça a câmera e outro que a afaste e aproxime. –Adicionar um botão que inicie um movimento contínuo de rotação da câmera ao redor do objeto.


Carregar ppt "Realidade Virtual Aula 3 Remis Balaniuk. Conteúdo Nessa aula serão apresentados os conceitos básicos de geometria 3D ao mesmo tempo em que será apresentada."

Apresentações semelhantes


Anúncios Google