Computação Gráfica Texturas.

Slides:



Advertisements
Apresentações semelhantes
Continuidade: sem interrupções
Advertisements

Computação Gráfica Geometria de Transformações
Computação Gráfica Mapeamento de textura
DCA-0114 Computação Gráfica
OpenGL Clique para adicionar texto Soraia Musse 6/4/2011.
António Ramires Fernandes & Luís Paulo Santos – Adaptado por Alex F. V. Machado Computação Gráfica Pipeline Gráfico.
Projeções e OpenGL Alex F. V. Machado.
COMPUTAÇÃO GRÁFICA.
Introdução a OpenGL (parte final).
Claudio Esperança Paulo Roma Cavalcanti
Mapeamento de Texturas e Visualização de Terreno
Introdução à Computação Gráfica OpenGL Básico
Navegador de cenas com openGL e rastreamento de raios
OpenGL Conceitos Básicos
Imagens Imagens Computação Gráfica - Gattass.
A terceira dimensão.
Computação Gráfica: Aula5: Rendering e Rasterização
Computação Gráfica Teórica
Callback de Teclado // registro void glutKeyboardFuc(Teclado);
Computação Gráfica: Aula5: Rendering e Rasterização
Iluminação Para programar um sistema de iluminação, dois passos principais devem ser considerados: c) Que tipo e posição de Iluminação se deseja b) Que.
UNIVERSIDADE KIMPA VITA
Computação Gráfica Iluminação.
Introdução + Transformações Geométricas
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
Geração de Geometria - Terrenos
COMPUTAÇÃO GRAFICA DAVIDE MOURO SALGUEIRO.
Sistemas Multimídia e Interface Homem-Máquina
Introdução à Programação
Introdução à Computação Gráfica Projeções
Reconstrução de formas Solução geométrica baseada na escavação do espaço e em superfícies reflectoras Nuno Martins Coimbra Novembro de 2001.
Redes de computadores Prof. António dos Anjos
Computação Gráfica aula 01
Computação Gráfica – Textura
Prof. Leandro da Silva Taddeo
Transformações Geométricas no Plano e no Espaço
Computação Gráfica Aula 3 Transformações Geométricas
TRANSFORMAÇÕES GEOMÉTRICAS
Computação Gráfica – Visibilidade
Computação Gráfica Mapeamento de textura
Computação Gráfica Introdução ao OpenGL.
Carlos Alves 12ºB Maio/2013. O mundo da geração e captura de imagens divide as imagens em dois grandes grupos: As imagens baseadas num mapa de bits e.
Introdução à Computação Gráfica OpenGL Básico
COMPUTAÇÃO GRÁFICA E INTERFACES
Mapeamento de Textura: Aspectos Gerais
Projeto e Implementação de Jogos Eletrônicos
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Computação Gráfica – Transformações Projetivas
Luiz Fernando Marcio Neves Petrônio Gomes Thiago Monteiro Victor Hazin
Desenhos Tridimensionais
Computação Gráfica – Introdução ao OpenGL
Introdução à Multimídia
OpenGL Aula Prática.
Visualização Tridimensional
Introdução à Computação Gráfica
Viewport.
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Computação Gráfica - Amostragem Profa. Mercedes Gonzales Márquez.
Algumas estruturas de dados em SIGs Tabela Vectorial Matricial.
IA725 – Computação Gráfica I Mapeamento de textura 27/05/2008
Modelo e Câmera e Projeção no OpenGL
Texturas em Jogos IA 725 – Computação Gráfica
Introdução à Computação Gráfica Texturas
Computação Gráfica – Visibilidade Profa. Mercedes Gonzales Márquez.
Computação Gráfica - Amostragem Profa. Mercedes Gonzales Márquez.
1 Computação Gráfica Prof. Dr. Júlio C. Klafke UNIP-Objetivo
Transcrição da apresentação:

Computação Gráfica Texturas

Texturas Aplicar imagens 1D,2D ou 3D a primitivas geométricas Utilizações: Simular materiais: madeira, granito, tijolo Reduzir complexidade geométrica Simulação de fenómenos naturais (reflexões, refracção, luz, lens flare) DI-UM Computação Gráfica 08/09

Texturas – Conceito Para aplicar uma textura a uma entidade geométrica é necessário definir um mapeamento entre pontos (pixels ??) da textura e pontos (vértices??) da geometria. Exemplo: As texturas 2D têm coordenadas nos eixos s (=x),t (=y). glTexCoord2f(s,t). DI-UM Computação Gráfica 08/09

Texturas Texturas e Geometria seguem caminhos separados no pipeline gráfico, encontrando-se na fase de raster. DI-UM Computação Gráfica 08/09

Texturas Imagem: dimensões são potências de 2. Por exemplo: 512x512, 256 x 128, … mas actualmente já é possível trabalhar sem esta restrição Exemplos de Formatos: LUMINANCE, RGB, RGBA,... OpenGL não tem nenhuma função para carregar texturas de ficheiro: usar bibliotecas, tais como tgalib ou DeViL DI-UM Computação Gráfica 08/09

Texturas - Utilização Definição Aplicação D.1 - Carregar a imagem D.2 - Criar uma textura em OpenGL D.3 - Definir parâmetros da textura Aplicação A.1 - Definir mapeamento das coordenadas das texturas nas coordenadas das primitivas geométricas A.2 – Transformações geométricas das texturas DI-UM Computação Gráfica 08/09

D.1 – Leitura Imagem OpenGL não tem nenhuma função para carregar texturas de ficheiro: usar bibliotecas, tais como DeViL #include <IL/il.h> unsigned char *il_imgData; int width, height, format, il_img; void Load_img (char *filename) { ilInit (); ilGenImages (1, &il_img); // get an unique ID ilBindImage(il_img); // Bind this image name. if (!ilLoadImage(filename)) return 0; // Load the image width = ilGetInteger (IL_IMAGE_WIDTH); height = ilGetInteger (IL_IMAGE_HEIGHT); il_imgData = ilGetData(); format = ilGetInteger(IL_IMAGE_FORMAT); } DI-UM Computação Gráfica 08/09

D.2 – Criar Textura Criar um OBJECTO de TEXTURA identificado pior um ID único int texID; void CreateTexture () { // create GL texture glGenTextures (1, &texID); // get texture unique ID glBindTexture (GL_TEXTURE_2D, texID); // bind it // associate with data read with DevIL glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, format, GL_UNSIGNED_BYTE, il_imgData); // Release data space created with DevIL ilDeleteImages(1, &il_img); } DI-UM Computação Gráfica 08/09

D.3 – Parameterizar textura A parameterização da textura (que pode ser alterada em qualquer momento) permite controlar alguns aspectos do seu mapeamento na geometria // Parameterise Texture glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); DI-UM Computação Gráfica 08/09

A.1 – Aplicar Textura A especificação dos vértices dos polígonos é precedida da especificação do ponto da textura (texel) que aí mapeia. t in [0 .. 1] s in [0 .. 1] glBindTexture(GL_TEXTURE_2D,texID); glBegin(GL_QUADS); glTexCoord2f(0,0);glVertex3f(-1.0f, -1.0f, 0.0f); glTexCoord2f(1,0);glVertex3f( 1.0f, -1.0f, 0.0f); glTexCoord2f(1,1);glVertex3f( 1.0f, 1.0f, 0.0f); glTexCoord2f(0,1);glVertex3f(-1.0f, 1.0f, 0.0f); glEnd(); DI-UM Computação Gráfica 08/09

A.1 – Aplicar Textura glBindTexture(GL_TEXTURE_2D,1); glBegin(GL_QUADS); glTexCoord2f(0,0);glVertex3f(-1.0f, -1.0f, 0.0f); glTexCoord2f(1,0);glVertex3f( 1.0f, -1.0f, 0.0f); glTexCoord2f(1,1);glVertex3f( 1.0f, 1.0f, 0.0f); glTexCoord2f(0,1);glVertex3f(-1.0f, 1.0f, 0.0f); glEnd(); DI-UM Computação Gráfica 08/09

A.1 – Aplicar Textura A escolha de coordenadas no espaço das texturas é "livre". DI-UM Computação Gráfica 08/09

A.2 – Transformação de Texturas Matriz para Texturas Permite realizar transformações geométricas sobre a textura. glMatrixMode(GL_TEXTURE); glTranslatef(0.5,0,0); glRotatef(45,0,0,1); glMatrixMode(GL_MODELVIEW); glBegin(GL_QUADS); ... glEnd(); DI-UM Computação Gráfica 08/09

Activar a aplicação de Texturas Por defeito a aplicação de texturas NÃO está activada glEnable (GL_TEXTURE_2D); DI-UM Computação Gráfica 08/09

D.3 – Parameterização Revisitada glBindTexture(GL_TEXTURE_2D,texID); glBegin(GL_QUADS); glTexCoord2f(0,0);glVertex3f(-1.0f, -1.0f, 0.0f); glTexCoord2f(4,0);glVertex3f( 1.0f, -1.0f, 0.0f); glTexCoord2f(4,4);glVertex3f( 1.0f, 1.0f, 0.0f); glTexCoord2f(0,4);glVertex3f(-1.0f, 1.0f, 0.0f); glEnd(); Imagem Original GL_REPEAT // Parameterise Texture glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); GL_CLAMP // Parameterise Texture glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); DI-UM Computação Gráfica 08/09

Texturas - Filtros: Mag Utilizado quando a um texel da textura corresponde mais que um pixel da imagem final, ou seja quando a textura é ampliada GL_NEAREST Ao pixel é aplicado o texel que nele mapeia GL_LINEAR Ao pixel é aplicada uma média dos texel que nele mapeiam DI-UM Computação Gráfica 08/09

Texturas - Filtros: Min Utilizado quando a um pixel da imagem corresponde mais do que um texel da textura GL_NEAREST Ao pixel é aplicado o texel que nele mapeia GL_LINEAR Ao pixel é aplicada uma média dos texel que nele mapeiam DI-UM Computação Gráfica 08/09

Texturas - Filtros Mag:Nearest DI-UM Computação Gráfica 08/09

Texturas - Filtros Mag: Linear pode parecer desfocado ao perto! DI-UM Computação Gráfica 08/09

Texturas - Demos Apresentar DEMO DI-UM Computação Gráfica 08/09

Texturas 1D 3D glTexImage1D(GL_TEXTURE_1D,...) DI-UM Computação Gráfica 08/09

Texturas - Mipmapping Do Latim “multum in parvo”. Problema: alterações inesperadas ao encolher texturas à medida que a camera se afasta. Causa: O processo de aplicação de filtros a uma imagem muito encolhida pode implicar alterações abruptas à imagem projectada. DEMO DI-UM Computação Gráfica 08/09

Texturas - Mipmapping Solução: Utilizar múltiplas texturas de diferentes resoluções para utilizar a escalas diferentes. Por exemplo: textura original 32 x 16 Fornecer texturas: 32x16, 16x8, 8x4, 4x2, 2x1, 1x1. É necessário fornecer uma sequência de níveis consecutivos (potências de 2). DI-UM Computação Gráfica 08/09

Texturas - Mipmapping Figura do Red Book: DI-UM Computação Gráfica 08/09

Texturas - Mipmapping 4 combinações disponíveis para filtrar uma textura (GL_MIN_FILTER): GL_NEAREST_MIPMAP_NEAREST GL_LINEAR_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_LINEAR O primeiro filtro diz respeito à textura, o segundo ao mipmapping. DI-UM Computação Gráfica 08/09

Texturas - Mipmapping … O OpenGL exige que se especifiquem as diferentes imagens para os diferentes níveis da pirâmide de resolução: glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, format, GL_UNSIGNED_BYTE, imgData0); glTexImage2D (GL_TEXTURE_2D, 1, GL_RGBA, width/2, height/2, 0, format, GL_UNSIGNED_BYTE, imgData1); … GLU permite a criação automática dos níveis necessários para o mipmapping: gluBuild2DMipmaps (GL_TEXTURE_2D, GL_RGBA, width, height, GL_RGBA, GL_UNSIGNED_BYTE, imageData); DI-UM Computação Gráfica 08/09

Texturas - Mipmapping DEMO glBindTexture(GL_TEXTURE_2D,texName[1]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST_MIPMAP_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER , gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, width, height, GL_RGB, GL_UNSIGNED_BYTE, imageData); DEMO DI-UM Computação Gráfica 08/09

Texturas - Billboard Em vez de utilizar uma malha de polígonos para representar um objecto: Podemos usar um único polígono com uma textura correspondente às cores do objecto: DI-UM Computação Gráfica 08/09

Texturas - Billboard A técnica de billboarding pode ser usada para reduzir o número de polígonos necessários para modelar um objecto, desde que: A câmara não se aproxime demasiado do billboard O billboard esteja sempre orientado de forma a apresentar a sua face à câmara DI-UM Computação Gráfica 08/09

Texturas - Billboard Suponhamos que o polígono é desenhado no ponto (objX,objZ), paralelo ao eixo dos YY e com a face frontal orientada ao longo do eixo dos XX A câmara está na posição (camX,camZ) com uma view direction igual a 0 em YY (olha na horizontal) (objX,objZ) ZZ XX obj2cam = normalize(camZ-objZ, camX-objX) α obj2cam α = acos (obj2camZ) No entanto, como cos(a)=cos(-a), if (obj2camX>0) rotate around YY if (obj2camX<0) rotate around –YY Rotatef (a*180/PI, 0., obj2camX, 0.) (camX,camZ) DI-UM Computação Gráfica 08/09

Texturas - Billboard void billboardBegin(float cX, float cZ, float oX, float oZ) { float obj2Cam[3], onorm, angleCos; glPushMatrix(); obj2Cam[XX] = camX - objPosX ; obj2Cam[YY] = 0; obj2Cam[ZZ] = camZ - objPosZ ; onorm = sqrt(obj2Cam[XX]*obj2Cam[XX]+obj2Cam[ZZ]*obj2Cam[ZZ]); obj2Cam[XX] /= onorm; obj2Cam[ZZ] /= onorm; angleCos = obj2Cam[ZZ]; if ((angleCos < 0.99990) && (angleCos > -0.9999)) glRotatef(acos(angleCos)*180/PI, 0., obj2Cam[XX], 0.); } DI-UM Computação Gráfica 08/09

Texturas - Billboard void billboardEnd() { glPopMatrix(); } void drawTree () { billboardBegin(cam_pos[XX], cam_pos[ZZ], x, z); glColor3f(0.0,0.0,0.0); glBindTexture (GL_TEXTURE_2D, treeTex); glBegin(GL_QUADS); glTexCoord2f(0.,0.); glVertex3f (-2.,0.,0.); glTexCoord2f(1.,0.); glVertex3f (2.,0.,0.); glTexCoord2f(1.,1.); glVertex3f (2.,5.,0.); glTexCoord2f(0.,1.); glVertex3f (-2.,5.,0.); glEnd(); billboardEnd(); } DI-UM Computação Gráfica 08/09

Texturas – Billboard: transparência R,G,B,A – Alpha: medida de opacidade A=0 : pixel transparente A=1 : pixel opaco glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GREATER,0); // o pixel da textura só é desenhado se alpha for maior do que 0 DI-UM Computação Gráfica 08/09

Referências OpenGL Programming Guide, aka Red Book, OpenGL ARB DI-UM Computação Gráfica 08/09