licenciatura em engenharia informática e de computadores ... · usar um algoritmo que define as...

40
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: ledien

Post on 06-Dec-2018

215 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

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 CGModelo Sombreado

LEIC CGTexture Mapping

LEIC CGEnvironment Mapping

LEIC CGBump Mapping

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 CGCriar 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 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 CGCó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

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 CG

Mipmaps: Optimização no Armazenamento� Lados da textura devem ser

potências de 2

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

LEIC CGExemplo do uso de Texturas

� A textura é uma imagem de 256 x 256 que foi mapeada numpolígono rectangular polygon que está a ser visualizado emperspectiva

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