Geração de Geometria - Terrenos

Slides:



Advertisements
Apresentações semelhantes
Distâncias.
Advertisements

Instituto de Computação - UFF 1 Computação Gráfica I Professor: Anselmo Montenegro Conteúdo: - Transformações geométricas no plano.
Conceitos de Programação Paralela
Linguagem de Programação VI Tipos de Dados Compostos - structs
Operações Algébricas Operações Topológicas
1 Exercício prático 7 Private Sub cmdExecutar_Click() If optLer Then frmLer.Show Else frmEscrever.Show End If End Sub Private Sub cmdSair_Click() End End.
Computação Gráfica Mapeamento de textura
Introdução à Programação usando Processing Programação Gráfica 2D Exercícios de Revisão para Prova 2º Semestre 2009 > PUCPR > Design Digital Bruno C. de.
Vamos abordar o exemplo
Ciclos, Vectores e Gráficos Simulação da Queda de Corpos II
Chapter 2 Fundamentals (a) (b) Convenções de coordenadas:
António Ramires Fernandes & Luís Paulo Santos – Adaptado por Alex F. V. Machado Computação Gráfica Pipeline Gráfico.
Prof. Alex Fernandes da Veiga Machado
Transformações espaciais geométricas
COMPUTAÇÃO GRÁFICA.
Introdução a OpenGL (parte final).
Introdução à Computação Gráfica OpenGL Básico
Parte 1 – Conceitos de Real Time Rendering. a. Pipeline Gráfico.
Disciplina: AAM Profa. Ana Watanabe vol.3
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
7 Abstração Genérica Unidades genéricas e instanciação.
Mosaico e Registro de Imagens
Internet e Informação Electrónica INTERNET EXPLORER
1 Editor de Equações Com a opção Create New activada, seleccione a aplicação Microsoft Editor de Equações 3.0, da listagem que surge na caixa de diálogo.
1 Surge uma caixa de diálogo onde deve indicar se pretende ou não que o som seja reproduzido automaticamente durante a apresentação de diapositivos.
Programação Orientada para Objectos
Paulo J. Azevedo Departamento de Informática Universidade do Minho
Computação Gráfica Texturas.
Computação Gráfica Iluminação.
Computação Gráfica Desempenho.
Computação Gráfica Iluminação e Texturas.
Computação Gráfica Pipeline Gráfico.
Movimentos de Câmara – Modo Explorador
Revisão da Linguagem C.
Vamos agora aprender a utilizar estruturas.
O Portal do Estudante de Computação
Semana 03: Comandos de desvio de fluxo. Expressões lógicas.
Análise Semântica e Representação Intermédia
PROGRAMAÇÃO I UNIDADE 1.
HTML Técnicas em Programação para Internet
RECONSTRUÇÃO 3D Equipe: Amora Cristina (acat) Anália Lima (alc5)
Introdução à Computação Gráfica Projeções
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Estimação da direção de múltiplas fontes de luz Baseado no artigo Estimation of Illuminant Direction and Intensity of Multiple Light Sources, de W. Zhou.
Computação Gráfica aula 01
Computação Gráfica – Textura
UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS
Semana 03 Comandos de desvio de fluxo. Expressões lógicas.
O Plano "Não basta destruir o que sobra;
Computação Gráfica Aula 12 Superfícies Prof. Leo.
Prof. Celso Cardoso Neto. (2) ALINHAMENTO Caso 1.
Computação Gráfica Aula 3 Transformações Geométricas
Computação Gráfica Mapeamento de textura
1.
1 Limites e Preenchimentos da Tabela Limites e preenchimento {Borders and Shading}, do menu Tabela {Table}, na barra de Ferramentas Tabelas e limites.
Introdução à Computação Gráfica OpenGL Básico
Computação Gráfica – Transformações Projetivas
Desenhos Tridimensionais
Sistemas de Rastreamento de Baixo Custo para Desktops Tecgraf (Grupo de Tecnologia em Computação Gráfica) Depto. de Informática, PUC-Rio Alberto Raposo,
Aula Prática 3 14/04/2010 Conversão de Tipos. Conversão de tipos Definição – Refere-se a processo de converter uma entidade de um tipo para outro. Tipos.
Introdução à Computação Gráfica
Viewport.
Computação Gráfica - Amostragem Profa. Mercedes Gonzales Márquez.
IA725 – Computação Gráfica I Mapeamento de textura 27/05/2008
Teoria da Cor Trabalho realizado por: Catarina Ferreira nº4 12ºB.
Manipulação de Imagens em OpenGL
Computação Gráfica - Amostragem Profa. Mercedes Gonzales Márquez.
Linguagem de Programação
Transcrição da apresentação:

Geração de Geometria - Terrenos Computação Gráfica Geração de Geometria - Terrenos

Mapas de Alturas Intensidade por pixel pode representar uma altura numa grelha regular DI-UM Computação Gráfica 06/07

Terrenos a partir de Imagens Objectivo: Dada uma imagem criar uma grelha regular em que a altura de cada ponto da grelha corresponde à intensidade do pixel correspondente. Tarefas: Carregar a imagem Criar a geometria do terreno a partir da matriz de pixels extraída da imagem. Colocar todas as entidades do modelo na altura correcta DI-UM Computação Gráfica 06/07

Carregar a Imagem - tgalib Em www.lighthouse3d.com é disponibilizado código para carregar TARGA (.TGA): tgaInfo * tgaLoad(char *filename); typedef struct { int status; unsigned char type, pixelDepth; short int width, height; unsigned char *imageData; }tgaInfo; DI-UM Computação Gráfica 06/07

Alternativa: DevIL http://openil.sourceforge.net/ “A full featured cross-platform image library” Abrir um ficheiro de imagem ilInit(); ilGenImages(1,ima); // unsigned int ima[...] ilBindImage(ima[0]); ilLoadImage(filename); // char *filename DI-UM Computação Gráfica 06/07

Alternativa: DevIL Aceder aos dados e informações da imagem int width = ilGetInteger(IL_IMAGE_WIDTH); int height = ilGetInteger(IL_IMAGE_HEIGHT); unsigned char *imageData = ilGetData(); DI-UM Computação Gráfica 06/07

Alternativa: DevIL Converter para escala de cinzentos ilConvertImage(IL_LUMINANCE,IL_UNSIGNED_BYTE); outras opções: IL_RGB, IL_RGBA DI-UM Computação Gráfica 06/07

Alternativa: DevIL Exemplo para carregar uma imagem: unsigned int t; ilGenImages(1,&t); ilBindImage(t); ilLoadImage("bla.jpg"); tw = ilGetInteger(IL_IMAGE_WIDTH); th = ilGetInteger(IL_IMAGE_HEIGHT); imgData = ilGetData(); DI-UM Computação Gráfica 06/07

Geração de geometria (0,0) Mundo x z H-Map xt zt (0,0) Gerar o terreno como uma strip de triângulos, sendo y dados pelo valor do h-map no ponto (xt,zt) Origem (0,0) no centro do mundo e canto do H-Map Atenção aos diferentes sistemas de eixos DI-UM Computação Gráfica 06/07

Geração de geometria H-Map (0,0) Mundo zt z (0,0) x xt for (z=0 ; z < MapL-1 ; z++) { glBegin(GL_TRIANGLE_STRIP); for (x=0 ; x < MapW ; x++) { glVertex3f (x0+x, Map[x][z+1], z0-(z+1)); glVertex3f (x0+x, Map[x][z], z0-z); } glEnd(); } DI-UM Computação Gráfica 06/07

Geometria: Display Lists Conjunto de comandos pré-compilados que podem ser reutilizados: // Create the id for the display list terrainDL = glGenLists(1); // create the display list glNewList(terrainDL,GL_COMPILE); for (z=0 ; z < MapL-1 ; z++) { glBegin(GL_TRIANGLE_STRIP); for (x=0 ; x < MapW ; x++) { glVertex3f (x0+x, Map[x][z+1], z0-(z+1)); glVertex3f (x0+x, Map[x][z], z0-z); } glEnd(); glEndList(); DI-UM Computação Gráfica 06/07

Geometria: Display Lists Na função que desenha a cena (ex., renderScene()) basta chamar a display list: glCallList (TerrainDL); Permite um aumento de desempenho significativo devido à pré- compilação dos comandos de especificação da geometria Uma display list pode ser alterada executando de novo glNewList() .. glEndList() Uma display list pode ser removida com glDeleteLists() DI-UM Computação Gráfica 06/07

Geometria: terrain.cpp O ficheiro terrain.cpp disponibiliza o esqueleto de código para: Carregar o h-map a partir e um ficheiro (usando tgaLoad()) int terrainLoadImage (char *filename, int normals); Criar a display list devolvendo o seu ID int terrainCreateDL (float xOff, float yOff, float zOff); Dadas as coordenadas do mundo (x,z) devolver a respectiva altura de acordo com o height map float terrainGetHeight (float x, float z); DI-UM Computação Gráfica 06/07

Exercício Adapte a aplicação desenvolvida nas sessões anteriores para que: Carregue um height map e desenhe o terreno de acordo com estes Posicione os vários elementos (indios, cowboys, arvores, tesouro) à altura apropriada A câmara móvel faça surface following, isto é, se desloque ao longo da superfície adaptando-se à respectiva altura DI-UM Computação Gráfica 06/07

Interpolação bilinear As coordenadas no mundo são números reais, as coordenadas no mapa de textura são inteiros (melhor, o h-map só está definido para coordenadas inteiras) Solução: interpolação bilinear hb z2 x1 = int(x); xFrac = frac(x); x2 = x1+1; z1 = int(z); zFrac = frac(z); z2 = z1+1; ha = h(x1,z1)*(1-xFrac) + h(x2,z1)*xFrac; hb = h(x1,z2)*(1-xFrac) + h(x2,z2)*xFrac; h = há*(1-zFrac) + hb*zFrac; (x,z) zFrac ha z1 x1 x2 xFrac DI-UM Computação Gráfica 06/07

Mapeamento Neste momento, a área do terreno é determinado pela resolução do h-map. Modifique o código de forma a que o utilizador possa indicar a resolução pretendida para o terreno, invocando a função terrainDim (int wWidth, int wLength); Note que para passar de coordenadas (x,z) do mundo para (xt, zt) do h-map deverá aplicar a função: DI-UM Computação Gráfica 06/07