licenciatura em engenharia informática e de computadores ... · padrão de textura (texture...

42
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

Upload: tranxuyen

Post on 06-Dec-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

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

Modelo Sombreado

LEIC CG Texture Mapping

LEIC CG

Environment Mapping

LEIC CG

Bump Mapping

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 Código Típico

© 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 Mipmaps: Optimização no Armazenamento �  Lados da textura devem ser

potências de 2

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 Exemplo

point sampling

mipmapped point sampling

mipmapped linear filtering

linear filtering

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

LEIC CG Exemplo do uso de Texturas

A textura é imagem de 256 x 256 mapeada num polígono

rectangular visualizado em perspectiva

© 2013 Corpo docente de Computação Gráfica / CG&M / DEI / IST / UTL