Modelo Hierárquico & Transformações Geométricas



Documentos relacionados
Introdução a Prática em OpenGL

SuperLogo: aprendendo com a sua criatividade

Barra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas

Métodos Computacionais. Árvores

CURSO DE INFORMÁTICA BÁSICA AULA 2 O AMBIENTE WINDOWS

2ª Lista de Exercícios

Algoritmos e Estruturas de Dados: Árvore Binária

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 10

Projeções e Visualização

EAD Árvore árvore binária

6. Geometria, Primitivas e Transformações 3D

Fluxo de trabalho do Capture Pro Software: Indexação de OCR e separação de documentos de código de correção

Computação Gráfica OpenGL 05 3D

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 CES-11 CES-11

Análises Geração RI (representação intermediária) Código Intermediário

1º Clicar no menu Ficheiro 2º Clicar em Guardar Como

Implementando plugins para o ImageJ

Fluxo de trabalho do Capture Pro Software: Indexação de código de barras e separação de documentos

Internet: Site da Simonsen e Secretaria Online

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15

Microsoft Office Excel 2007

Processo de Controle das Reposições da loja

NÚCLEO DE TECNOLOGIA E EDUCAÇÃO CURSO: WINDOWS MOVIE MAKER TUTORIAL

Criando uma mala direta com o Word 2007 em 6 Passos

Computação Gráfica. 5385: Licenciatura em Engenharia Informática. Cap. 3 Janelas e Visores. Janelas e Visores

Tutorial SGCD. 1. Efetuando Login no Sistema. 2. Criando uma nova página. 3. Editando uma página já existente

Autodesk Inventor 7. Tutorial de Modelamento 3D Básico. Modelamento de uma Polia. Autor: Cristiano Nogueira Silva

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

Microsoft Access XP Módulo Um

LIÇÃO 42: APLICAÇÃO SIMPLES CLP-IHM. Projeto botão na IHM que aciona uma saída do CLP. Vá em menu > File > New. Nome do projeto

Persistência de Dados

Iniciação à Informática

Estilos de Interação

GUIA MUDANÇA E FORMATAÇÃO DE SERVIDOR - MILLENNIUM

Busca. Pesquisa sequencial

Árvores binárias de pesquisa com balanceamento. Algoritmos e Estruturas de Dados II

Tutorial de Blender, Animação básica do tipo keyframe

OURO MODERNO APOSTILA DE EXEMPLO (Esta é só uma reprodução parcial do conteúdo)

Treinamento Sistema Condominium Módulo III

Tutorial de Viga: Ansys - Beam3

Tags de Portas e Janelas Para o Padrão Brasileiro

Microsoft Access: Criar relações para um novo banco de dados. Vitor Valerio de Souza Campos

MICROSOFT EXCEL AVANÇADO

Pesquisa em Memória Primária. Algoritmos e Estruturas de Dados II

O mundo à nossa volta é povoado de formas as mais variadas tanto nos elementos da natureza como nos de objetos construídos pelo homem.

4 - Layout de Mapas no QGIS 2.0

Tutorial de modelagem da Lixeira Z28

ÍNDICE. Tela de Configuração Dados de Etiqueta Configuração da Impressora Configuração do Papel Itens para Inserção...

Universidade Federal do Vale do São Francisco. Estruturas de Dados. Professor: Marcelo Santos Linder

Tabela e Gráficos Dinâmicos Como estruturar dinamicamente dados no Excel

Programas operam sobre dados. Dados são relacionados e possuem estrutura. Como representar e manipular dados em um computador

Apostila de PowerPoint 2013

Como fazer busca de imagem no Google?

1 Code::Blocks Criação de projetos

GUIA MUDANÇA E FORMATAÇÃO DE SERVIDOR - SLIM

Laboratório de ENGSOF Estudo de Caso. Prof. André Pereira, MSC, PMP

Gerenciamento de Arquivos e Pastas. Professor: Jeferson Machado Cordini jmcordini@hotmail.com

1 Criando um aplicativo visual em Java

O processo termina com o surgimento da última flecha quando aparece uma bolinha azul. Outras bolinhas aparecem aleatoriamente POWER POINT NEW WAY

O Excel é um programa de computador desenvolvido para gerenciar dados na forma de planilhas.

Data Transformation Services (DTS) por Anderson Ferreira Souza

Malha de terra para Subestação de Alta-Tensão utilizando o software TecAt Plus 5 (Grounding grid design using TecAt Plus 5)

Sistema de Recursos Humanos

INTRODUÇÃO A OPENGL. Computação Gráfica

A abordagem do assunto será feita inicialmente explorando uma curva bastante conhecida: a circunferência. Escolheremos como y

Árvores Binárias Balanceadas

Universidade Federal da Fronteira Sul Campus Chapecó Sistema Operacional

A equação da posição em função do tempo t do MRUV - movimento retilíneo uniformemente variado é:

A guia Desenvolvedor

1 UNIT Universidade do Trabalhador Dr. Abel dos Santos Nunes

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos

Comandos Complementares

O tratamento de informação através de planilha eletrônica, aplicada ao software Excel

INF 1007 Programação II

PÓS-GRADUAÇÃO EM MATEMÁTICA COMPUTACIONAL INFORMÁTICA INSTRUMENTAL Aula 05: Editores de Imagem Paint / GIMP

Disciplina: Programas de Edição de Textos Professora: Érica Barcelos

OpenGL. Uma Abordagem Prática e Objetiva. Marcelo Cohen Isabel Harb Manssour. Novatec Editora

DAS5102 Fundamentos da Estrutura da Informação

Aula 5 Microsoft PowerPoint 2003: Criando uma Apresentação

O Microsoft Office é composto por diversos softwares, dentre eles o Word, o Excel, o Access e o Power Point.

Programação para Dispositivos Móveis

Técnicas de Detecção de Colisão para Jogos

ATENÇÃO: * Arquivos com tamanho superior a 500 KB NÃO SERÃO ACEITOS * SOMENTE serão aceitos documentos do formato: PDF

Windows Explorer. Prof. Valdir

Questão Essência do Excel

Apostila de Windows Movie Maker

Noções Básicas de Excel página 1 de 19

Microsoft Word INTRODUÇÃO

FCT Faculdade de Ciências e Tecnologia Serviço Técnico de Informática STI SGCD Sistema Gerenciador de Conteúdos Dinâmicos

Modelagem de Banco de Dados através do ERwin

Neste método o cálculo é efetuado de maneira exponencial, ou seja, juros são computados sobre os juros anteriormente calculados.

Como instalar uma impressora?

Sumário. Computação Gráfica Illustrator

Esse manual é um conjunto de perguntas e respostas para usuários(as) do Joomla! 1.5.

Manual do Usuário. Sumário. 1. Introdução Utilização do site Mapa de Vitória Aplicativos Downloads...

Tecnologias da Informação e Comunicação: Sistema Operativo em Ambiente Gráfico

Transcrição:

Modelo Hierárquico & Transformações Geométricas Universidade de São Paulo USP Disciplina de Computação Gráfica Profª Maria Cristina PAE: Thiago Silva Reis Santos Setembro de 2010

Sumário Modelagem Objetos Predefinidos da GLUT Modelo Hierárquico Robô Pilha de Matrizes Estrutura de Dados: Árvore Travesia - Pré-ordem Movimento Bibliografia

Modelagem Modelos são abstrações do mundo. Estamos acostumados com modelos matemáticos, que são usados em várias áreas da ciência e das engenharias. Esses modelos usam equações matemáticas para modelar o fenômeno físico o qual se pretende estudar.

Modelagem Em Ciência da Computação, nós usamos tipos de dados abstratos para modelar organizações de objetos, e em computação gráfica, nós modelamos o mundo com objetos geométricos. Nós escolhemos cuidadosamente as primitivas que irão compor nosso modelo e o relacionamento entre elas.

Modelo Hierárquico Na criação de modelos hierárquicos temos que resolver duas questões: Como definimos um objeto mais complexo do que os usados até aqui? E Como podemos armazenar esse modelo que pode conter muitos objetos? A resposta da 1ª pergunta diz respeito a criação do modelo em si, o qual, geralmente é composto por vários objetos geométricos, tipicamente as funções predefinidas da GLUT.

Objetos Predefinidos da GLUT Void glutwirecube(gldouble size) Desenha um cubo wireframe (aramado) com o tamanho de size. glutwireteapot(gldouble size) Desenha um bule de chá wireframe com o tamanho de size.

Objetos Predefinidos da GLUT void glutwiresphere(gldouble radius, Glint slices, Glint stacks) Desenha uma esfera wireframe. Parâmetros: Radius: O raio da esfera Slices: linhas longitudinais (horizontais) Stacks: linhas latitudinais (vertivais)

Objetos Predefinidos da GLUT void glutwirecone(gldouble radius, GLdouble height, GLint slices, GLint stacks) Desenha um cone wireframe. Parâmetros: Radius: O raio da esfera Height: altura do cone Slices: linhas longitudinais (horizontais) Stacks: linhas latitudinais (vertivais)

Objetos Predefinidos da GLUT void glutwiretorus(gldouble innerradius, GLdouble outerradius, GLint nslices, GLint rings) Desenha um torus wireframe. Parâmetros: InnerRadius: Raio interno OuterRadius: Raio externo Rings: Número de seções para formar o torus NSlices: Número de divisões de cada seção

Objetos Predefinidos da GLUT void glutwireicosahedron(void) Desenha um icosaedro wireframe de tamanho predefinido. void glutwireoctahedron(void) Desenha um octaedro wireframe de tamanho predefinido.

Objetos Predefinidos da GLUT void glutwiretetrahedron(void) Desenha um tetraedro wireframe de tamanho predefinido. void glutwiredodecahedron(void) Desenha um dodecaedro wireframe de tamanho predefinido.

Objetos Predefinidos da GLUT Todas essas funções também podem ser usadas para desenhar objetos sólidos. Basta substituir a palavra "Wire" no nome da função por "Solid". Ex: gultsolidtorus glutsolidcone

Modelo Hierárquico A resposta da 2ª pergunta diz respeito ao modelo ao modelo hierárquico de dados que iremos utilizar para compor o modelo. A idéia do modelo hierárquico é modelar o objeto em questão numa estrutura hierárquica, tipicamente uma árvore.

Robô Vamos pegar como exemplo um robô. Como fazer uma estrutura hierárquica de um modelo de robô? Corpo Cabeça Braço Esq Superior Braço Direito Superior Perna Esq Superior Perna Direita Superior Braço Esq Inferior Braço Direito Inferior Perna Esq Inferior Perna Direita Inferior

Pilha de Matrizes Agora que está feito a estrutura do nosso modelo hierárquico fica mais fácil sua implementação. Cada nó da árvore é responsável por desenhar um pequeno pedaço do robô. Entretanto, cada nó deve possuir uma matriz de transformação a qual irá posicionar corretamente a sua pequena contribuição do robô.

Pilha de Matrizes Iniciamos pelo corpo, o qual será aplicado a matriz M que estará no topo da pilha modelview, depois de feita a devida transformação é chamado o método que desenha torso(). Em seguida vamos para a cabeça, a qual será aplicada uma matriz de transformação MM head que posicionará corretamente a cabeça que será desenhada pelo método head(). Após esse nó desempilha-se a matrix MM cab e deixase apenas M.

Pilha de Matrizes O próximo passo será o braço superior esquerdo aplicando a matrix MM lua e depois chamando o método que desenha o braço que é left_upper_arm(). Em seguida será o braço inferior esquerdo, aplicando a matrix MM lua M lla e depois chamando o método que desenha o braço que é left_lower_arm(). Após esse nó iremos desempilhar a matrix MM lua M lla e deixar apenas M.

Pilha de Matrizes glpushmatrix(); //Duplica o valor do topo da pilha torso(); gltranslate( xxxx ); glrotate3( xxxx ); head(); glpopmatrix(); // Recupera o valor anterior da pilha glpushmatrix(); //Duplica o valor do topo da pilha gltranslate( xxxx ); glrotate3( xxxx ); left_upper_arm(); gltranslate( xxxx ); glrotate3( xxxx ); left_lower_arm(); glpopmatrix(); // Recupera o valor anterior da pilha glpushmatrix(); //Duplica o valor do topo da pilha...

Estrutura de Dados: Árvore Para implementar o modelo hierárquico iremos utilizar uma estrutura de árvore otimizada, conforme a imagem ao lado.

Estrutura de Dados: Árvore Utilizaremos um struct com 4 campos: A matriz de transformação m[16] // 4x4 Um apontador para a função que desenha f Um apontador para o irmão (a direita) sibling Um apontador para o filho (a esquerda) child type struct treenode { GLfloat m[16]; void (*f)(); struct treenode *sibling; struct treenode *child; } treenode;

Estrutura de Dados: Árvore Quando for renderizar um nó, primiero mutiplicamos a matriz do topo da model-view a matriz armazenada em m. Depois chamamos a função f que contém as primitivas gráficas. Em seguida renderizamos os filhos e por útimo os irmãos. No nosso exemplo do robô definimos 10 nós da árvore. torso_node, head_node, lua_node, rua_node, lll_node, rll_node, lla_node, rla, rul e lul_node

Estrutura de Dados: Árvore Definimos o torso_node assim: O corpo do robô pode se movimentar em torno do eixco-y, então a matriz de transformação m será: glloadidentity(); glrotatef(angulo, 0.0, 1.0, 0.0); glgetfloatv(gl_modeling_matrix, torso_node.m); A função com as primitivas gráficas torso_node.f = torso; Os apontadores torso_node.sibling = NULL; //Não tem irmãos torso_node.child = &head_node;

Estrutura de Dados: Árvore Definimos o nó do braço esquerdo assim: O braço do robô pode se movimentar em torno do eixco-x, porém o braço é deslocado em relação ao corpo: glloadidentity(); gltranslatef(-(torso_radius+upper_arm_radius), 0.9*TORSO_HEIGHT, 0.0); glrotatef(theta[3], 1.0, 0.0, 0.0); glgetfloatv(gl_modelview_matrix,lua_node.m); lua_node.f = left_upper_arm; lua_node.sibling = &rua_node; lua_node.child = &lla_node;

Travesia - Pré-ordem Uma vez pronta a árvore o rendering do modelo é feito por uma travesia na árvore, como no algoritmo abaixo. void traverse(treenode* root) { if(root==null) return; glpushmatrix(); glmultmatrixf(root->m); root->f(); if(root->child!=null) traverse(root->child); glpopmatrix(); if(root->sibling!=null) traverse(root->sibling); }

Travesia - Pré-ordem O algoritmo de travesia é completamente independente do modelo (da árvore), então pode ser usado na função callback display() para gerar a visualização do objeto. void display(void){ } glclear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT); glloadidentity(); glcolor3f(1.0, 0.0, 0.0); traverse(&torso_node); glutswapbuffers();

Movimento O robô possui 9 pontos de junção que podem ser movimentados e mais o corpo do robô. O movimento aconteçe com o botão direito e esquerdo do mouse. Para selecionar o qual ponto de junção se pretende mover basta utilizar o terceiro butão do mouse e escolher no menu. O movimento se dá com a alteração do valor do ângulo da matrix m, onde cada nó da árvore está associado a um ângulo.

Movimento O movimento está condicionado aos clicks do mouse e a seleção do ponto de junção ao qual se pretende movimentar. void mouse(int btn, int state, int x, int y) { if(btn==glut_left_button && state == GLUT_DOWN) { theta[angle] += 5.0; if( theta[angle] > 360.0 ) theta[angle] -= 360.0; } if(btn==glut_right_button && state == GLUT_DOWN) { theta[angle] -= 5.0; if( theta[angle] < 360.0 ) theta[angle] += 360.0; }... //aplicação do novo ângulo ao ponto de junção selecionado }

Bibliografia ANGEL, Edward. Interactive Computer Graphics: A Top-Down Approach Using OpenGL. 4ª edição. Editora: Addison Wesley - Boston, San Francisco, New York, 2005.