• Nenhum resultado encontrado

Imagem e Textura. Curso de Visualização Científica. Waldemar Celes. 10 de Setembro de Tecgraf/PUC-Rio.

N/A
N/A
Protected

Academic year: 2022

Share "Imagem e Textura. Curso de Visualização Científica. Waldemar Celes. 10 de Setembro de Tecgraf/PUC-Rio."

Copied!
67
0
0

Texto

(1)

Imagem e Textura

Curso de Visualiza¸c˜ao Cient´ıfica

Waldemar Celes

celes@tecgraf.puc-rio.br

Tecgraf/PUC-Rio

10 de Setembro de 2013

(2)

Imagem

Aspectos pr´aticos e uso com OpenGL

0 1 2 . . .

0 1 2 . . .

Armazenamento linear

Fatores importantes

I Dados associados aos pixels

I Formatos de armazenamento

I Custo de transferˆencia

I Alinhamento

(3)

Imagem

Opera¸c˜oes com imagens

Memória

host Memória

device Write

Read Copy

(4)

Opera¸c˜ oes com imagem

Posicionamento da imagem na tela

glRasterPos∗ (x, y, z, w);

I Representa a posi¸c˜ao do canto inferior esquerdo

I Sofre transforma¸c˜oes do pipeline

I Se fora do volume de vis˜ao, imagem ´e “clipada”

Especifica¸c˜ao do bufferde leitura escrita

glDrawBuffer(GL BACK); // default glReadBuffer(GL FRONT); //default

(5)

Opera¸c˜ oes com imagem

Opera¸c˜ao de escrita

I Escreve a partir da posi¸c˜aorastermapeada para a tela

glDrawPixels (width, height, format, type, pixels);

Opera¸c˜ao de leitura

I Deve-se alocar previamente espa¸co para armazenar imagem

glReadPixels (x,y,width, height, format, type, pixels);

Opera¸c˜ao de c´opia

I Pode-se operar sobre o mesmo buffer oubuffersdiferentes

glCopyPixels (x,y,width, height, buffer)

I onde buffer: GL COLOR,GL DEPTH,GL STENCIL

(6)

Opera¸c˜ oes com imagem

Opera¸c˜ao de escrita

I Escreve a partir da posi¸c˜aorastermapeada para a tela

glDrawPixels (width, height, format, type, pixels);

Opera¸c˜ao de leitura

I Deve-se alocar previamente espa¸co para armazenar imagem

glReadPixels (x,y,width, height, format, type, pixels);

Opera¸c˜ao de c´opia

I Pode-se operar sobre o mesmo buffer oubuffersdiferentes

glCopyPixels (x,y,width, height, buffer)

I onde buffer: GL COLOR,GL DEPTH,GL STENCIL

(7)

Opera¸c˜ oes com imagem

Opera¸c˜ao de escrita

I Escreve a partir da posi¸c˜aorastermapeada para a tela

glDrawPixels (width, height, format, type, pixels);

Opera¸c˜ao de leitura

I Deve-se alocar previamente espa¸co para armazenar imagem

glReadPixels (x,y,width, height, format, type, pixels);

Opera¸c˜ao de c´opia

(8)

Opera¸c˜ oes com imagem

Desenho de bitmap

I Em especial, para desenho de fontes raster

glBitmap (width, height, x0, y0, xinc, yinc, bitmap);

I Cor do bitmap definida pela cor corrente qdo da raster pos

I x0,y0indicam posi¸c˜ao dentro do bitmap

I xinc,yincs˜ao usados para incrementar raster pos Fun¸c˜oes da glut

glutBitmapCharacter(void ∗font, int character);

glutStrokeCharacter(void ∗font, int character);

(9)

Opera¸c˜ oes com imagem

Formato de pixel (dados por pixel)

GL RGB GL RGBA GL RG

GL RED, etc.

GL LUMINANCE GL LUMINANCE APLHA GL DEPTH COMPONENT GL STENCIL INDEX GL DEPTH STENCIL

(10)

Opera¸c˜ oes com imagem

Tipo do dado (representa¸c˜ao)

GL UNSIGNED BYTE GL BYTE

GL UNSIGNED SHORT GL SHORT

GL UNSIGNED INT GL INT

GL FLOAT GL HALF FLOAT

I Existem ainda os tipos compactados

I Devem ser compat´ıveis com o formato

GL UNSIGNED BYTE 3 3 2 GL UNSIGNED SHORT 5 6 5 GL UNSIGNED SHORT 4 4 4 4 GL UNSIGNED SHORT 5 5 5 1 etc.

I Existe tamb´em o tipo “bit” (armazenado emunsigned int)

(11)

Pipeline de opera¸c˜ oes em imagem

Memória Modo de

Armazenamento Operações de Transferência Rasterização Testes e operações

sobre fragmento Memória de

Textura

(12)

Pipeline de imagem

Controle do modo de armazenamento

I Mem´oria−→ Buffer: unpack

I Buffer−→ Mem´oria: pack Fun¸c˜ao de controle: glPixelStore∗

I Exemplos

glPixelStorei (GL UNPACK ALIGNMENT, 4);

glPixelStorei (GL PACK SWAP BYTES, GL TRUE);

glPixelSotrei (GL UNPACK SKIP ROWS, x0);

*ROW_LENGTH

*SKIP_PIXELS

*SKIP_ROWS

(13)

Pipeline de imagem

Opera¸c˜oes de transferˆencia e mapeamento

I glPixelTransfer∗(pname, param)

Exemplos de uso

I Leitura de imagem de luminˆancia (tons de cinza)

I L= 0.30R+ 0.59G+ 0.11B

glPixelTransferf(GL RED SCALE, 0.30);

...

I Mapa de cores

glPixelTransferi(GL MAP COLOR,TRUE);

(14)

Rasteriza¸c˜ ao de imagem

Fator de zoom

I Pixel mapeado para quadril´atero

glPixelZoom(fx, fy);

(15)

Textura

Mapeamento de textura

I Modela padronagem de cor (textura de cor)

I Modela ilumina¸c˜ao (mapa de ilumina¸c˜ao)

I Modela rugosidade (mapa de normal)

I Modela sombras (mapa de profundidade)

I etc.

(16)

Mapeamento de textura

Mapeamento conceitual

mapeamento de textura

s

0.0 1.0

t

0.0 1.0

(s, t) (s, t)

(s, t)

(17)

Mapeamento de textura

Mapeamento fragmento a fragmento

mapeamento texel a texel

t

(s, t) (s, t)

(s, t)

(18)

Textura

Cria¸c˜ao do objeto de textura

I Requisita “nomes”

glGenTextures(int n, unsigned int ∗texnames);

I Associa objeto como corrente

glBindTexture(enum target, int texname);

I Na finaliza¸c˜ao, deleta objetos

glDeleteTexture (int n, unsigned int ∗texnames);

(19)

Textura

Especifica¸c˜ao de imagem do objeto de textura

glTexImage2D (GL TEXTURE 2D, level, iformat,

width, height, border, format, type, pixels );

I level: n´ıvel da pirˆamide demipmapping(a base tem valor 0)

I iformat: formato interno

I border: indica existˆencia de borda, 0 ou 1

(20)

Textura

Especifica¸c˜ao de imagem do objeto de textura

I Dimens˜ao tem que ser potˆencia de 2: 2n+ 2b

I Exce¸ao para “texturas retangulares”

I Estrat´egias de ajustes

I Re-escala (quando tem repeti¸ao)

gluScaleImage (format,

in width, in height, in type, in pixels, out width, out height, out type, out pixels );

I Mapeamento de sub´area (quanto n˜ao tem repeti¸ao)

1.0 w/W 1.0

h/H

(21)

Textura

Especifica¸c˜ao de imagem do objeto de textura

I Dimens˜ao tem que ser potˆencia de 2: 2n+ 2b

I Exce¸ao para “texturas retangulares”

I Estrat´egias de ajustes

I Re-escala (quando tem repeti¸ao)

gluScaleImage (format,

in width, in height, in type, in pixels, out width, out height, out type, out pixels );

I Mapeamento de sub´area (quanto n˜ao tem repeti¸ao)

1.0 w/W 1.0

h/H

(22)

Textura

Especifica¸c˜ao de imagem do objeto de textura

I Dimens˜ao tem que ser potˆencia de 2: 2n+ 2b

I Exce¸ao para “texturas retangulares”

I Estrat´egias de ajustes

I Re-escala (quando tem repeti¸ao)

gluScaleImage (format,

in width, in height, in type, in pixels, out width, out height, out type, out pixels );

I Mapeamento de sub´area (quanto n˜ao tem repeti¸ao)

1.0 h/H

(23)

Textura

Outras formas de especifica¸c˜ao da imagem

I Redefinindo sub-imagem

glTexSubImage2D (target, level,

xoffset, yoffset, w, h, format, type, pixels );

I Copiando do frame buffer

glCopyTexture2D (target, level, iformat, x, y, w, h, border);

I Offscreen rendering

(24)

Pipeline de textura

Vértice x,y,z nx,ny,nz

geração

s, t transform s’, t’ sp, tp map/filtro

combinação fragmento fragres

texel rasterização por vértice por fragmento

(25)

Pipeline de textura

Gera¸c˜ao de coordenadas de textura

I Dadas explicitamente como atributos de v´ertices

glTexCoord∗ (s, t, r, q)

ou

glTexCoordPointer(nelem,type,offset,array);

glEnableClientState(GL TEXTURE COORD ARRAY);

I Geradas automaticamente a partir dos dados dos v´ertices

I Combina¸c˜ao linear no espa¸co do objeto

s=asx+bsy+csz+ds t=atx+...

I Combina¸ao linear no espa¸co do objeto s=aesxe+bseye+cseze+dse t =aetxe+...

(26)

Pipeline de textura

Gera¸c˜ao de coordenadas de textura

I Dadas explicitamente como atributos de v´ertices

glTexCoord∗ (s, t, r, q)

ou

glTexCoordPointer(nelem,type,offset,array);

glEnableClientState(GL TEXTURE COORD ARRAY);

I Geradas automaticamente a partir dos dados dos v´ertices

I Combina¸ao linear no espa¸co do objeto

s=asx+bsy+csz+ds

t=atx+...

I Combina¸ao linear no espa¸co do objeto s=aesxe+bseye+cseze+dse

(27)

Pipeline de textura

Especifica¸c˜ao dos “planos” geradores: a,b,c,d

I Se gera¸c˜ao for no espa¸co do olho, o plano especificado ´e transformado para o espa¸co do olho.

glTexGeni (GL S , GL TEXTURE GEN MODE, GL OBJECT PLANE);

glTexGenfv (GL S , GL OBJECT PLANE, plane);

I Ativa¸c˜ao da gera¸c˜ao autom´atica

glEnable (GL TEXTURE GEN S);

...

Quando usar espa¸co o objeto e espa¸co do olho?

I Espa¸co do objeto: textura aplicada em um objeto

I Espa¸co do olho: textura aplicada em todos os objetos da cena

(28)

Pipeline de textura

Especifica¸c˜ao dos “planos” geradores: a,b,c,d

I Se gera¸c˜ao for no espa¸co do olho, o plano especificado ´e transformado para o espa¸co do olho.

glTexGeni (GL S , GL TEXTURE GEN MODE, GL OBJECT PLANE);

glTexGenfv (GL S , GL OBJECT PLANE, plane);

I Ativa¸c˜ao da gera¸c˜ao autom´atica

glEnable (GL TEXTURE GEN S);

...

Quando usar espa¸co o objeto e espa¸co do olho?

I Espa¸co do objeto: textura aplicada em um objeto

I Espa¸co do olho: textura aplicada em todos os objetos da cena

(29)

Pipeline de textura

Transforma¸c˜ao aplicada `as coordenadas de textura

 s0 t0 r0 q0

=Mtex

 s t r q

I Uso da API de transforma¸c˜ao

I Pilha de matriz de textura

glMatrixMode(GL TEXTURE);

I Todas as fun¸c˜oes de especifica¸ao de transforma¸oes

glLoadIdentity();

glTranslate∗(...);

(30)

Pipeline de textura

Mapeamento

I Dado um fragmento com coordenada de textura interpolada (s,t), acessatexel ({r,g,b,a}) correspondente

Modo de mapeamento (wrap)

I Valores (s,t) fora do intervalo

glTexParameter∗(target, pname, param);

I GL TEXTURE WRAP S,GL TEXTURE WRAP T, ...

I Repeat, mirrored, clamp to edge, clamp to border

(31)

Pipeline de textura

Filtros

I Correspondˆencia entre fragmento e texel Amplia¸c˜ao (magnification)

I Fragmento mapeado para um sub-texel

I A ´area de um texel corresponde a v´arios pixels da tela

(32)

Pipeline de textura

Filtros de amplia¸c˜ao

I Nearest: 1 texel por fragmento

I Baixa qualidade (aliasing)

I Linear: 4 texels por fragmento

I Melhor qualidade (anti-aliasing)

nearest linear

(33)

Pipeline de textura

Filtros de amplia¸c˜ao

I Nearest: 1 texel por fragmento

I Baixa qualidade (aliasing)

I Linear: 4 texels por fragmento

I Melhor qualidade (anti-aliasing)

nearest linear

(34)

Pipeline de textura

Filtros de amplia¸c˜ao

I Nearest: 1 texel por fragmento

I Baixa qualidade (aliasing)

I Linear: 4 texels por fragmento

I Melhor qualidade (anti-aliasing)

nearest linear

(35)

Pipeline de textura

Redu¸c˜ao (minification)

I A ´area de um fragmento corresponde a v´arios texels

(36)

Pipeline de textura

Filtros de redu¸c˜ao

I Nearest: um texel por fragmento

I Baixa qualidade (aliasing)

I Linear: 4 texels por fragmento

I Ainda baixa qualidade (aliasing)

(37)

Pipeline de textura

Filtros de redu¸c˜ao

I Nearest: um texel por fragmento

I Baixa qualidade (aliasing)

I Linear: 4 texels por fragmento

I Ainda baixa qualidade (aliasing)

(38)

Filtro de redu¸c˜ ao

Problema de falta de amostragem de sinal

Nyquist rate

A frequˆencia da amostragem deve ser pelo menos duas vezes maior que a frequˆencia do sinal

(39)

Filtro de redu¸c˜ ao

Problema de falta de amostragem de sinal

(40)

Filtro de redu¸c˜ ao

Para alcan¸car o Nyquist rate:

como n˜ao se pode aumentar o n´umero de amostras (resolu¸c˜ao da tela), diminui-se a frequˆencia do sinal, isto ´e, diminui-se a textura.

Pirˆamide demipmapping

Tomas Akenine-M¨oller c2002

(41)

Filtro de redu¸c˜ ao

Para alcan¸car o Nyquist rate:

como n˜ao se pode aumentar o n´umero de amostras (resolu¸c˜ao da tela), diminui-se a frequˆencia do sinal, isto ´e, diminui-se a textura.

Pirˆamide de mipmapping

(42)

Filtro de redu¸c˜ ao

Filtrotrilinear

I Aplica filtro bilinearem dois n´ıveis adjacentes da pirˆamide

I Interpola linearmente os doistexels encontrados

C´alculo do n´ıvel da pirˆamide

I Busca-se rela¸c˜ao de um texel por fragmento γ = log2ρ+lodbias onde:

I γ: n´ıvel da pirˆamide (0 representa a base)

I ρ: m´aximo fator de escala entre pol´ıgono na tela e textura

I lodbias: constante definida viaglTexEnv∗() (default´e 0.0) Pode-se controlar os n´ıveis m´ınimo e m´aximo usados no filtro.

(43)

Filtro de redu¸c˜ ao

Filtrotrilinear

I Aplica filtro bilinearem dois n´ıveis adjacentes da pirˆamide

I Interpola linearmente os doistexels encontrados C´alculo do n´ıvel da pirˆamide

I Busca-se rela¸c˜ao de um texel por fragmento γ = log2ρ+lodbias onde:

I γ: n´ıvel da pirˆamide (0 representa a base)

Pode-se controlar os n´ıveis m´ınimo e m´aximo usados no filtro.

(44)

Filtro de redu¸c˜ ao

Filtrotrilinear

I Aplica filtro bilinearem dois n´ıveis adjacentes da pirˆamide

I Interpola linearmente os doistexels encontrados C´alculo do n´ıvel da pirˆamide

I Busca-se rela¸c˜ao de um texel por fragmento γ = log2ρ+lodbias onde:

I γ: n´ıvel da pirˆamide (0 representa a base)

I ρ: m´aximo fator de escala entre pol´ıgono na tela e textura

I lodbias: constante definida viaglTexEnv∗() (default´e 0.0)

(45)

Constru¸c˜ ao da pirˆ amide de mipmapping

Vers˜ao 3.0 ou posterior

glGenerateMipmap (target);

I target: GL TEXTURE 1D, GL TEXTURE 2D, ...

I Pirˆamide constru´ıda entre n´ıveis:

GL TEXTURE BASE LEVEL eGL TEXTURE MAX LEVEL

Vers˜oes anteriores

I Especifica imagem e constroi pirˆamide

gluBuild1DMimaps

(46)

Filtro de textura

API para defini¸c˜ao do filtro

glTexParameter∗ (target, param, value);

I Filtro de amplia¸c˜ao: GL TEXTURE MAG FILTER

I GL NEAREST, GL LINEAR

I Filtro de redu¸c˜ao: GL TEXTURE MIN FILTER

I GL NEAREST, GL LINEAR,

GL NEAREST MIPMAP NEAREST, GL LINEAR MIPMAP LINEAR, ...

(47)

Mipmapping

0 1 2 3

(48)

Compara¸c˜ ao entre filtros

Filtrosnearest xbilinear

(49)

Compara¸c˜ ao entre filtros

Filtrosbilinearxtrilinear

(50)

Compara¸c˜ ao de desempenho

Compara¸c˜ao entre 4 diferentes m´aquinas

(51)

Espa¸co de mem´ oria

Qual o espa¸co de mem´oria adicional para armazenar a pirˆamide?

I Considerando uma imagem RGB

Gasta-se apenas 1/3 a mais de mem´oria para textura RGB

(52)

Espa¸co de mem´ oria

Qual o espa¸co de mem´oria adicional para armazenar a pirˆamide?

I Considerando uma imagem RGB

Gasta-se apenas 1/3 a mais de mem´oria para textura RGB

(53)

Espa¸co de mem´ oria

Qual o espa¸co de mem´oria adicional para armazenar a pirˆamide?

I Considerando uma imagem RGB

Gasta-se apenas 1/3 a mais de mem´oria para textura RGB

(54)

Espa¸co de mem´ oria

Qual o espa¸co de mem´oria adicional para armazenar a pirˆamide?

I Considerando uma imagem RGB

(55)

Filtro de mipmapping

Filtro isotr´opico

I Usa-se a quadril´atero que aproxima o mapeamento do fragmento no espa¸co de textura

texel

projected fragment

(56)

Filtro de mipmapping

Filtro anisotr´opico

I Utiliza diversas amostras e faz a m´edia dos texels resultantes

amostras de mipmapping linha de anisotropia

(57)

Compara¸c˜ ao entre filtros

Filtro anisotr´opico deixa imagem mais n´ıtida

(58)

Compara¸c˜ ao entre filtros

Filtro anisotr´opico “retarda” subida na pirˆamide

(59)

Fun¸c˜ oes de textura

Determina combina¸c˜ao de cor do fragmento com texel resultante

glTexEnv∗ (target, pname, param);

Fun¸c˜oes (para textura RGBA)

I Replace: c =ct,a=at I Modulate: c =cfct,a=at

I Decal: c =cf(1−at) +ctat,a=af

I Blend: c =cf(1−at) +ccct,a=afat

(60)

Fun¸c˜ oes de textura

ReplaceeModulate

(61)

Multi-textura

Mapeamento de diferentes unidades de textura

I Fragmento ´e combinado com texels em sequˆencia Frag

Texel 0

Fragres

Texel 1

Fragres

Texel 2

Fragres

Fragres

(62)

Multi-textura

Especifica¸c˜ao das texturas

I glActiveTexture(unit): seleciona unidade corrente

I Fun¸oesglBindTexture(), glTexEnv∗(), glTexGen∗()

afetam apenas unidade corrente

Especificando coordenadas de textura

I API convencional: glMultiTexCoord∗(texunit, coords) I API de array, ativa unidade para cliente:

glClientActiveTexture(texunit)

(63)

Texture combiners

Flexibiliza a combina¸c˜ao de fragmentos e texels Exemplo

I Seleciona o uso de combiners

glTexEnvi(GL TEXTURE ENV, GL TEXTURE ENV MODE, GL COMBINE);

I Seleciona combina¸c˜ao de RGB e alphadesejados

glTexEnvi(GL TEXTURE ENV, GL COMBINE RGB, GL MODULATE);

glTexEnvi(GL TEXTURE ENV, GL COMBINE ALPHA, GL SUBTRACT);

I Define operandos

(64)

Textura 1D

Exemplos de aplica¸c˜ao

I Mapas de propriedades

I Escala de cores na textura

I Propriedade mapeada para coordenadas

I Matriz de textura normaliza valores

I N´evoa vertical

I Intensidade da n´evoa mapeada na textura

I Valor des proporcional a altura

(65)

Textura 3D

Exemplos de aplica¸c˜oes

I Aplica¸c˜ao de propriedades 3D

I Material volum´etrico

I Mapa 3D de ilumina¸ao

I Visualiza¸c˜ao volum´etrica

I Area m´´ edica

I Area cient´ıfica´

(66)

Textura 3D

Exemplos de aplica¸c˜oes

I Aplica¸c˜ao de propriedades 3D

I Material volum´etrico

I Mapa 3D de ilumina¸ao

I Visualiza¸c˜ao volum´etrica

I Area m´´ edica

I Area cient´ıfica´

(67)

Implementa¸c˜ ao no grafo de cena

Fora do pipeline

I Carga e defini¸c˜ao do objeto de textura

glBindTexture(...)

glTexImage∗(...), glTexParameter∗(...)

Como parte do pipeline

I Fun¸c˜ao Load

glPushAttrib(GL TEXTURE BIT);

glBindTexture(...);

glTexEnv∗(...); glTexGen∗(...);

glEnable(...);

Referências

Documentos relacionados

No entanto, para aperfeiçoar uma equipe de trabalho comprometida com a qualidade e produtividade é necessário motivação, e, satisfação, através de incentivos e política de

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

O modelo de trajetória é usado para extrapolar o último ponto extraído um passo adiante (por exemplo, dois ou três pixels). A tolerância é maior, para que o perfil medido seja maior

Quadro 2 Quadro-resumo das condutas consesuadas sobre triagem e avaliação nutricional para o paciente oncológico adulto e idoso cirúrgico, clínico, transplantado (TCTH) e sob

Pombagira %aria Navalha7 Pombagira %aria Padilha7 Pombagira %aria Padilha %enina7 Pombagira %aria Padilha da 'ahia7 Pombagira %aria Padilha das )lmas7 Pombagira %aria Padilha do

§ 2 º As instituições que não atendam ao disposto no caput deste artigo podem submeter seus projetos de criação de curso à Câmara de Educação Superior do Conselho Nacional de

Considere o anel hxi, temos que este satisfaz as condi¸c˜ oes do Lema 4, logo ´ e soma direta de corpos finitos, esses corpos n˜ ao podem todos comutar elemento a elemento com y,

¾ Segundo nível • Terceiro nível – Quarto nível A FAMÍLIA PROFIBUS A FAMÍLIA PROFIBUS PROFIBUS-FMS PROFIBUS-FMS é a solução de propósito geral para comunicação de