Licenciatura em Engenharia Informática e de Computadores ... · padrão de textura (texture...
Transcript of Licenciatura em Engenharia Informática e de Computadores ... · padrão de textura (texture...
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
Texturas Quando 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 pintam +100M 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
Bump M
appping
LEIC CG Mapeamento 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 visualização
§ Environment (reflection) Mapping • Usa um snapshot da cena para fazer texture mapping • Permite simular superfícies altamente especulares sem traçado de
raios
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG Onde 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 CG Mapeamento de texturas: é simples?
Apesar de ser “simples” mapear imagem na superfície
Há 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 CG Sistemas de Coordenadas
� Coordenadas da Textura (s, t) § Parameteriza pontos na textura com 2 coordenadas: (s,t)
� 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 CG Mapeamento Texturas
parametric coordinates
texture coordinates world coordinates device 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
The image cannot be displaye
n 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?
n Aparentemente precisamos de:
n x = X(s, t)
n y = Y(s, t)
n z = Z(s, t)
n Mas na realidade queremos fazer exactamente o inverso
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG Backward 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)
� 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 Mapeamento 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 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 CG Especificação Manual
� Podemos especificar manualmente as coordenadas para cada vértice:
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG Mapeando 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 CG Texturas em OpenGL
Passos 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 CG Criar um Objecto Textura
© 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 CG Convertendo uma imagem em textura � OpenGL requer que as dimensões das texturas sejam
potê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 CG Mapeando a Textura
� Baseado nas coordenadas parametricas da textura
� glTexCoord*() especificado em cada vértice
s
t 1, 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
b c
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
Tiling Repetitivo de Texturas � Uma textura pode ser repetida através da superfície repetindo a parametrização
(s,t) ao longo da superfície
� Os melhores efeitos obtém quando a textura facilmente composta em azulejos § Isto significa que o lado direito da textura se junta suavemente com o lado
esquerdo (o mesmo para o topo e fundo)
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG Magnification and Minification
Textura Polígono Magnification Minification
• Mais de um texel para um pixel (minification) • Mais de um pixel para um texel (magnification) point sampling (nearest texel) ou filtro linear (filtro 2 x 2) para obter valor da textura
Textura Polígono
LEIC CG
31
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 CG Mipmaps � Ideia base:
§ criar texturas de tamanho decrescente § usar a subtextura apropriada
� Pre-filtrar as texturas (mipmaps)
LEIC CG Sumá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 CG Texturas em Mipmap � Mipmapping permite o uso de texturas pre-filtradas
de resoluções decrescentes
� Reduz erros de interpolação para pequenos objectos texturados
� Declara-se o nível do mipmap durante a definição da textura glTexImage2D( 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_MODE modes § 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_COLOR e usar em conjunto com GL_BLEND
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
Função de Textura
LEIC CG GL_TEXTURE_ENV_MODE modes
f = fragmento, t = textura, c = GL_TEXTURE_ENV_COLOR
RGBA MODE
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG Correcção de Perspectiva � Coordenadas da textura e interpolação da cor
§ Podem ser lineares no espaço do dispositivo § Ou pode-se usar valores de profundidade/perspectiva (+lento)
� Especialmente para polígonos “on edge” § glHint( GL_PERSPECTIVE_CORRECTION_HINT, hint ) Em que “hint” pode ser:
• GL_DONT_CARE • GL_NICEST • GL_FASTEST
© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL
LEIC CG Aplicar Texturas 1. Especificar texturas dos objectos
2. Definir o filtro 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