18
Computação Gráfica – Textura Profa. Mercedes Gonzales Márquez

Computação Gráfica – Textura Profa. Mercedes Gonzales Márquez

Embed Size (px)

Citation preview

Page 1: Computação Gráfica – Textura Profa. Mercedes Gonzales Márquez

Computação Gráfica – Textura

Profa. Mercedes Gonzales Márquez

Page 2: Computação Gráfica – Textura Profa. Mercedes Gonzales Márquez

Textura

Modelos de iluminação não são suficientes para descrever todas as características observáveis em uma superfície

– Superfícies pintadas com padrões ou imagens A capa ou uma página de um livro

– Superfícies com padrões regulares Tecidos ou uma parede de tijolos

Esses detalhes podem ser modelados usando uma técnica chamada mapeamento de textura

Textura consiste de um conjunto de valores que afetam os atributos de cada pixel de uma imagem, com a finalidade de aumentar realismo.

Page 3: Computação Gráfica – Textura Profa. Mercedes Gonzales Márquez

Textura

Estes valores pré-computados são tipicamente organizados em um arranjo multidimensional de texels (texture elements) em um espaço próprio, denominado espaço de textura.

A ideia básica é reproduzir sobre a superfície do objeto as propriedades de alguma função ou mapeamento bidimensional.

Na Figura ilustra-se o mapeamento de uma textura bi-dimensional (s, t) sobre a superfície de um objeto, proporcionando sensação de um tampo de mármore.

Page 4: Computação Gráfica – Textura Profa. Mercedes Gonzales Márquez

Textura

Page 5: Computação Gráfica – Textura Profa. Mercedes Gonzales Márquez

5

Aplicando textura em OpenGL

Três passos Especificar textura

Ler ou gerar a imagem Carregar a textura

Mapear coordenadas da textura a coordenadas de vértices

Especificar parâmetros de textura Embrulhamento e filtragem

Page 6: Computação Gráfica – Textura Profa. Mercedes Gonzales Márquez

6

Aplicando texturas (detalhe)

– Especificar texturas em objetos de textura– Setar filtros de textura– Setar o modo de embrulhamento da textura– Criar/Ligar objeto de textura– Habilitar textura– Especificar coordenadas de textura

Page 7: Computação Gráfica – Textura Profa. Mercedes Gonzales Márquez

7

Objetos de Textura

Uma imagem por objeto de textura Gera nomes de textura

glGenTextures( n, *texIds ); Cria objetos de textura com dados de textura glBindTexture( target, id );

Liga texturas antes de usá-las

glBindTexture( target, id );

Page 8: Computação Gráfica – Textura Profa. Mercedes Gonzales Márquez

8

Define uma imagem de textura a partir de um arranjo de texels

glTexImage2D( target, level, components, w, h, border, format, type, *texels );– Dimensão da imagem deve ser potência de 2

Especificando Imagem de Textura

Page 9: Computação Gráfica – Textura Profa. Mercedes Gonzales Márquez

Baseado em coordenadas paramétricas de textura Chamar glTexCoord*() para 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

Espaço de Textura Espaço do Objeto

Mapeando a Textura

Page 10: Computação Gráfica – Textura Profa. Mercedes Gonzales Márquez

10

Modo de filtro– minificação ou magnificação– Filtros especiais para Mipmap – Modos de embrulhamento (clamp ou repeat)

Funções de textura– Como misturar a cor primitiva com a cor da textura

blend, modulate ou replace texels

Modos de aplicação de texturas

Page 11: Computação Gráfica – Textura Profa. Mercedes Gonzales Márquez

Filtragem

Textura Polígono

Magnificação Minificação

PolígonoTextura

Exemplo:

glTexParameteri( glTexParameteri( target, type, modetarget, type, mode ); );

GL_TEXTURE_2DGL_TEXTURE_1D

GL_TEXTURE_MAG_FILTERGL_TEXTURE_MIN_FILTER

GL_NEAREST GL_LINEAR

GL_NEAREST_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_NEARESTGL_LINEAR_MIPMAP_LINEAR

Page 12: Computação Gráfica – Textura Profa. Mercedes Gonzales Márquez

Texturas Mipmap

Textura original

Imagens minificadaspré-filtradas

Page 13: Computação Gráfica – Textura Profa. Mercedes Gonzales Márquez

Texturas Mipmap

Permite que texturas de diferentes níveis de resolução sejam aplicadas de forma adaptativa

Reduz aliasing devido a problemas de interpolação O nível da textura na hierarquia mipmap é especificada

durante a definição da texturaglTexImage*D( GL_TEXTURE_*D, level, … )

Page 14: Computação Gráfica – Textura Profa. Mercedes Gonzales Márquez

Modos de Repetição

Exemplo:glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP )

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT )

textura

s

t

GL_CLAMPGL_REPEAT

Page 15: Computação Gráfica – Textura Profa. Mercedes Gonzales Márquez

Funções de Textura

Controla como a cor da textura afeta a cor do pixel glTexEnv{fi}[v](GL_TEXTURE_ENV, prop, param )

Modos (prop = TEXTURE_ENV_MODE)– GL_MODULATE– GL_BLEND– GL_REPLACE

Cor a ser misturada (GL_BLEND)– Especificada com prop = GL_TEXTURE_ENV_COLOR

Page 16: Computação Gráfica – Textura Profa. Mercedes Gonzales Márquez

Exercícios

OpenGL permite carregar texturas externas e também construir texturas sintéticas (ou procedurais). O programa loadTextures.cpp (pasta Code) carrega uma textura externa de um lançamento de nave espacial e gera internamente uma imagem xadrez. Então aplica alternadamente as duas em um retângulo, ao apertar a barra espaçadora.

.

Page 17: Computação Gráfica – Textura Profa. Mercedes Gonzales Márquez

Exercícios

Observações: A pasta Textures deve estar no mesmo local que o programa O programa usa a rotina getBMPData() para ler arquivos de

imagens, portanto as texturas aplicadas devem estar no formato bmp 24-bits. Arquivos em outros formatos devem ser convertidos a este. Use por exemplo o Paint do Windows para fazer esta conversão.

OpenGL requer que as dimensões das texturas sejam potências de 2. Arquivos de dimensões diferentes devem ser redimensionados devidamente.

Page 18: Computação Gráfica – Textura Profa. Mercedes Gonzales Márquez

Exercícios

O programa texturedCylinder.cpp (site) apresenta três opções de textura (2 procedurais e uma textura externa) as quais podem ser aplicadas em um cilindro construído por quadricas.