Upload
ledien
View
216
Download
0
Embed Size (px)
Citation preview
Licenciatura em Engenharia Informática e de Computadores
Computação Gráfica
Mapeamento de Texturas
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
TexturasQuando o resultado começa a parecer real
� Superfícies “no mundo real” são muito complexas
� Não se pode modelar todos os pequenos detalhes
� Como podemos então adicionar detalhe na superfície?
Modelo Geométrico Modelo Geométrico+ Sombreamento
Modelo Geométrico+ Sombreamento+Texturas© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
Motivação
Limites da Modelação Geométrica
� Placas gráficas renderizam +20M polígonos / segundo
� Insuficiente para criar realismo em� Nuvens
� Relva
� Terreno
� Pele
� …
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
Exemplo
Modelação de uma Laranja� Queremos modelar uma laranja
� Começamos com uma esfera laranja� Demasiado simples
� Substituir esfera por forma mais complexa� Não trivial representar detalhes
� Demasiados polígonos necessários
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
Exemplo
Modelação de uma Laranja� Solução:
� Tirar foto de uma laranja
� Aplicar imagem na esfera
� Não é suficiente porque esfera é “lisa”
� É necessário alterar a forma� Usa-se bump-mapping
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
Texture Mapping
Bum
pM
appping
LEIC CGMapeamento de Texturas
� Três tipos diferentes de mapeamento� Texture Mapping
• Usa imagens para preencher os polígonos
� Bump Mapping• Altera as normais à superfície durante a renderização
� Environment (reflection) Mapping• Usa um snapshot da cena para fazer texture mapping
• Permite simular superfícies altamente especulares
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGOnde acontece o mapeamento?
� No final do pipeline� Eficiente porque poucos polígonos passam o recorte
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGMapeamento de texturas: é simples?
� Apesar de a ideia ser simples---mapear uma imagemnuma superfície --- estão 3 ou 4 sistemas de coordenadas envolvidos
2D image
3D surface
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGSistemas de Coordenadas� Coordenadas Paramétricas (u,v)
� Usados para modelar curvas e surfícies – mapeiam a superfície 3D com parâmetros 2D
� Coordenadas da Textura (s, t)� Parameteriza pontos na textura com 2 coordenadas: (s,t)
� Assim a textura é simplesmente uma imagem, com um sistema de coordenadas2D (s,t) - usado para identificar pontos na imagem a mapear
� Coordenadas do Mundo (x, y, z)� Conceptualmente, onde o mapeamento tem lugar
� Coordenadas do Dispositivo� Onde a imagem final é realmente reproduzida (viewport coord + depth info)
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGMapeamento Texturas
parametric coordinates
texture coordinates
world coordinatesdevice coordinates
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
Mapeamento de coordenadas Textura →Superfície
s
t
(x,y,z)
s
t
�Considere o mapeamento das coordenadas da textura
para um ponto na superfície: dada uma posição (s,t) na
textura, qual é a posição (x,y,z) na superfície?
�Aparentemente precisamos de:
�x = X(s, t)
�y = Y(s, t)
�z = Z(s, t)
� Mas na realidade queremos fazer exactamente o inverso
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGMapeamento de Texturas
� Mapeamento de Textura adiciona detalhe na superficie ao mapear padrões de textura na superfície.
� O padrão pode ser repetido. Por examplo, o padrão de textura (texture pattern) para o cubo à direita é:
� Texel = “texture element”.
� Um texel é um pixel numa textura. � Por examplo, uma textura 128x128 tem 128x128 texels.
� No ecrã isto podem resultar em mais ou menos pixeis dependendo da distância a que está o objecto e como está escalado.
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGBackward Mapping� Na realidade queremos andar “para trás”
� Dado um fragmento, queremos saber a que ponto do objecto corresponde
� Dado um ponto no objecto, queremos saber a que ponto na textura ele corresponde
� Precisamos de ter um mapeamento • s = s(x,y,z) • t = t(x,y,z)ou• s = s(u,v) • t = t(u,v)
� Estas funções difíceis de determinar genericamente
� Com polígonos:� Especificam-se as coordenadas (s,t) nos vértices� Interpola-se (s,t) para os restantes pontos
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
Como definir coordenadas de textura (s,t)?
� Defnir as coordenadas manualmente� Definirmos nós as coordenadas para cada vértice
� Calcular as coordenadas automaticamente� Usar um algoritmo que define as coordenadas da
textura para nós
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGEspecificação Manual
� Podemos especificar manualmente as coordenas para cada vértice:
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGMapeando Textura em Polígonos
….glTexCoord2f(0.5, 0.5);glVertex3fv (10.2,3.4,4.5);….
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGTexturas em OpenGLPassos básicos
� Criar um objecto textura e espeficar a textura para esse objecto• (glGenTextures() and glBindTexture());
� Definir os parâmetros da textura• (glTexParameter(), glTexImage() and glTexEnv());
� Activar o uso de texturas
� Desenhar a cena, fornecendo as coordenadas da geométricas e da textura
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGMapeamento de Texturas
x
y
z
image
geometry display
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
Mapeamento de Texturas e o Pipeline OpenGL
� Imagens e geometria atravessam pipelines separados, que se juntam no andar de rasterização� Texturas “complex” não afectam complexidade geometrica
geometry pipelinevertices
pixel pipelineimage
rasterizer
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
� Definir a textura imagem a partir de um array de texels em memória
� Glubyte my_texels[512][512][4];
� Activar mapeamento de texturas� glEnable(GL_TEXTURE_2D)
Especificar uma textura imagem
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
Definir Imagem como Textura
glTexImage2D(target, level, components,
w, h, border, format, type, texels );
target: tipo textura, e.g. GL_TEXTURE_2D
level: usado para mipmapping (não estudado em CG)
components: elementos por texel na memória vídeo
w, h: largura e altura
border: usado para suavizar o “repeat” (não estudado em CG)
format and type: descreve os texels na memória do CPU
texels: ponteiro para o array de texels
Example: set the current image texture:glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 512, 512, 0 , GL_RGBA, GL_UNSIGNED_BYTE, my_texels);
Chamar glTexImage2D. Carrega a textura da memória do CPU para a memória vídeo do OpenGL, onde fica pronta a usar.
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGConvertendo uma imagem em textura
� OpenGL requer que as dimensões das texturas sejampotências de 2
� Dimensões não inferiores a 64x64
� Se as dimensões da image não são uma potência de 2• gluScaleImage( format, w_in, h_in, type_in, *data_in, w_out, h_out, type_out,
*data_out );� data_in is source image
� data_out is for destination image
� A imagem é interpolada e filtrada durante a escala
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CGMapeando a Textura
� Baseado nas coordenadas parametricas da textura
� glTexCoord*() especificado em cada vértice
s
t1, 1
0, 1
0, 0 1, 0
(s, t) = (0.2, 0.8)
(0.4, 0.2)
(0.8, 0.4)
A
B C
a
bc
Texture Space Object Space
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
Wrapping Modes
� Clamping: if s,t > 1 use color at 1, if s,t < 0 use color at 0� glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
� Repeating : use s,t modulo 1� glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
Atribuir coordenadas de textura fora do intervalo [0,1]: cortar ou repetir a textura
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG
Magnification and Minification
Textura PolígonoMagnification Minification
• Mais de um texel para um pixel (minification )• Mais de um pixel para um texel (magnification )
point sampling (nearest texel) oufiltro linear (filtro 2 x 2) para obter valor da textura
Textura Polígono
LEIC CG
33
Modos de Filtragem
Modos determinados por� glTexParameteri( target, type, mode )
glTexParameteri(GL_TEXTURE_2D, GL_TEXURE_MAG_FILTER ,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXURE_MIN_FILTER ,GL_LINEAR);
Nota: Filtro linear requer a margem com extra texel para filtrar nas arestas (border = 1)
LEIC CG
Filtro de Minification� Um pixel mapeia a vários texels
� Comum em vistas perspectivas
Mau mapeamento de texturas deforma o tabuleiro Usando Mipmaps melhora-se o
mapeamento, reduzindo a deformação do tabuleiro
LEIC CGMipmaps� Ideia base:
� criar texturas de tamanho decrescente� usar a subtextura apropriada
� Pre-filtrar as texturas (mipmaps)
LEIC CGSumário sobre Flitragem
� “Zoom-in” => filtro Magnification
� “Zoom-out” => filtro Minification
� Filtros mais avançados� necessitam mais tempo de computação
� mas produzem melhores resultados
� Mipmapping é um filtro Minification avançado
LEIC CGTexturas em Mipmap
� Mipmapping permite o uso de texturas pre-filtradasde resoluções decrescentes
� Reduz erros de interpolação para pequenos objectostexturados
� Declara-se o nível do mipmap durante a definição da texturaglTexImage2D( GL_TEXTURE_*D, level, … )
Nota: Não têm de usar mipmaps nos laboratórios!
LEIC CG� Controla como a textura é aplicada� glTexEnv{fi}[v](GL_TEXTURE_ENV, prop, param )
� prop pode ser:� GL_TEXTURE_ENV_MODE� GL_TEXTURE_ENV_COLOR
� Modos GL_TEXTURE_ENV_MODEmodes� GL_MODULATE: modula com o sombreamento calculado
� GL_BLEND: mistura com uma cor ambiente
� GL_REPLACE: usa só a cor da textura� Example:
• glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
� Definir cor de blending com GL_TEXTURE_ENV_COLORe usar em conjunto com GL_BLEND
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
Função de Textura
LEIC CGAplicar Texturas1. Especificar texturas dos objectos
2. Definir o flitro de textura
3. Definir o Wrapping Mode
4. Definir a função de textura
5. Fazer o bind ao objecto textura
6. Activar o uso de texturas
7. Indicar coordenadas de textura para cada vértice
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL