Computação Gráfica. Texturas



Documentos relacionados
Fundamentos de Computação Gráfica. Texturas

Computação Gráfica. Texturas

Texturas. Aula 7. Sistemas Gráficos e Interactivos Instituto Superior de Engenharia do Porto. Paulo Gandra de Sousa

Tomás Antônio Costa Badan. Mapa de Textura: O Básico

Mapeamento de Texturas

FUNDAMENTOS E APLICAÇÕES. Luis Valente

Implementação do algoritmo Marching Cubes usando shaders. Luiz Fernando Oliveira Corte Real

Computação Gráfica 5385: Licenciatura em Engenharia Informática. Chap. 10 Texturas. Texturas

Computação Gráfica - 13

OpenGL Conceitos Avançados

Computação Gráfica - 13

Introdução à Computação Gráfica Texturas

LAB. 1. Introdução à OpenGL

Introdução à Programação em OpenGL. Prof. Márcio Bueno

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

OpenGL. Sumário COMPUTAÇÃO GRÁFICA E INTERFACES. Introdução. Introdução. Carlos Carreto

Prof. Fernando V. Paulovich 3 de maio de SCC Computação Gráca

Ptex e outras ferramentas para modelagem de animação

FCG2006 Prova sobre OpenGL e Rastreamento de Raios

Introdução Programando com OpenGL Exemplos. O que é OpenGL? [1]

OpenGL. Conceitos Básicos. Waldemar Celes. Tecgraf/PUC-Rio

Iluminação e sombreamento

Projeções e Visualização

Trabalho Prático n. 2

Manual Processamento de Imagem. João L. Vilaça

Conversão Matricial. Prof. Fernando V. Paulovich 20 de maio de SCC Computação Gráca

Detalhes de Superfícies. Introdução à Computação Gráfica Texturas. Propriedades Mapeáveis. Mapeamento de Textura

OpenGL. Alberto B. Raposo

CG 2013/2014 Primeiro Teste LEIC Alameda/Taguspark

Introdução a OpenGL. Profª. Alessandra Martins Coelho

Utilização. de Shaders de efeitos realistas para jogos. Bruno Pereira Evangelista. Pontifícia Universidade Católica de Minas Gerais

Frederico Damasceno Bortoloti. Adaptado de: Claudio Esperança Paulo Roma Cavalcanti

Prof. Fernando V. Paulovich 3 de maio de SCC Computação Gráca

Pipeline de Visualização Câmara Virtual

AULA 5 Manipulando Dados Matriciais: Grades e Imagens. 5.1 Importando Grades e Imagens Interface Simplificada

Introdução a Programação de Jogos

Desenho e Apresentação de Imagens por Computador

Aula Prática Laboratorial n.º 8, nº 9 e nº 10

Enquadramento e Conceitos Fundamentais

Primitivas Gráficas. Prof. Márcio Bueno Fonte: Material do Prof. Robson Pequeno de Sousa e do Prof.

Apontamentos de Computação Gráfica

Introdução a Prática em OpenGL

Computação Gráfica. Engenharia de Computação. CEFET/RJ campus Petrópolis. Prof. Luis Retondaro. Aula 2. Introdução a OpenGL

Implementando plugins para o ImageJ

AULA 5 Manipulando Dados Matriciais: Grades e Imagens. 5.1 Importando Grades e Imagens Interface Simplificada

OpenGL, GLU e GLUT. GLUT (OpenGL Utility Toolkit) OpenGL. Linguagem. OpenGL. Esqueleto de um programa em PyOpenGL

Computação Gráfica. Daniela G. Trevisan.

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

Introdução a Programação de Jogos

Computação Gráfica. GLSL - Programação de Shaders Toon Mapping; Texturas

COMPUTAÇÃO GRÁFICA. Rasterização e Preenchimento de Regiões. MARCO ANTONIO GARCIA DE CARVALHO Fevereiro de Computação Gráfica

FAPESP FUNDAÇÃO DE AMPARO À PESQUISA DO ESTADO DE SÃO PAULO UNIVERSIDADE DE SÃO PAULO INSTITUTO DE MATEMÁTICA E ESTATÍSTICA (IME) GeoGrid

Ficha da Disciplina COMPUTAÇÃO GRÁFICA E INTERFACES. Objectivos. Docente

Optimização de um Mundo Virtual

Computação Gráfica OpenGl 01

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

Neste tutorial irá criar uma animação simples com base num desenho do Mechanical Desktop.

Oficina de Construção de Páginas Web

UFGD FCA PROF. OMAR DANIEL BLOCO 6 CLASSIFICAÇÃO DE IMAGENS

Mapeamento de Textura

Introdução ao OpenGL

FERRAMENTAS DE CRIATIVIDADE MAPA MENTAL (MIND MAP)

n À primeira vista: basta desenhar n Uma subrotina para desenhar cada tipo de objeto n Mas... n Como fazer interação? n Como estruturar a cena?

PlayLib Educational Game Programming Library Documentação

Paulo Sérgio Rodrigues. Exercícios de Laboratório

Computação Gráfica. GLSL - Programação de Shaders Iluminação

Bruno Pereira Evangelista.

GraphicsLib Biblioteca Gráfica 2D. Documentação

Computação Gráfica. GLSL - Programação de Shaders Iluminação

GeoMafra SIG Municipal

Introdução ao WebGL. Pedro Costa 2014

Planificação Anual 2015/2016

Transcrição:

Computação Gráfica Texturas António Ramires Fernandes + Luís Paulo Santos- Computação Gráfica 08/09

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 2

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 3

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 4

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 5

Texturas - Utilização Definiçã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 6

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 7

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 8

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 9

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 10

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 11

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

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 13

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 14

D.3 Parameterização Revisitada Imagem Original 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(); 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 15

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 16

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 17

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

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

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

Texturas 1D glteximage1d(gl_texture_1d,...) 3D glteximage3d(gl_texture_3d,...) DI-UM Computação Gráfica 08/09 21

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 22

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 23

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

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 25

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 26

Texturas - Mipmapping 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, GL_NEAREST_MIPMAP_NEAREST); glubuild2dmipmaps(gl_texture_2d, GL_RGB, width, height, GL_RGB, GL_UNSIGNED_BYTE, imagedata); DEMO DI-UM Computação Gráfica 08/09 27

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 28

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 29

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) ZZ (objx,objz) obj2cam α (camx,camz) XX obj2cam = normalize(camz-objz, camx-objx) α = 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.) DI-UM Computação Gráfica 08/09 30

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 31

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 32

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 33

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