Computação Gráfica

Propaganda
Universidade Federal do Vale do São Francisco
Curso de Engenharia da Computação
Computação Gráfica - 13
Prof. Jorge Cavalcanti
[email protected]
www.univasf.edu.br/~jorge.cavalcanti
www.twitter.com/jorgecav
Uso de Texturas
• Os modelos de iluminação não são sempre apropriados para
descrever todas as propriedades da superfície e um objeto, por
exemplo, rugosidade e padronagem.
– Em princípio,é possível modelar esses detalhes com o acréscimo de
componentes na geometria da superfície ou usando materiais de
propriedades óticas distintas.
• Essa forma torna o processamento muito complexo, de modo que,
na prática esses efeitos são modelados com o uso de mapas de
textura.
• A textura é uma técnica que quando aplicada junto à iluminação,
procura dar às superfícies dos objetos características que os
façam parecer mais reais, quando comparados a simples técnicas
de iluminação e sombreamento.
Página 2
Computação Gráfica – Parte 13
05/04/2013
Uso de Texturas
• A idéia básica é reproduzir sobre a superfície do objeto as
propriedades de alguma função ou mapeamento
bidimensional.
• Para trabalhar com mapas de texturas é fundamental e ter um
bom programa de composição e tratamento de imagens.
–Imagens podem ser obtidas em bibliotecas de texturas
disponíveis na Internet.
Mapa de textura
Página 3
Modelo
Computação Gráfica – Parte 13
Modelo texturizado
05/04/2013
Uso de Texturas
Mapas procedurais
• Um bitmap é uma imagem produzida por uma
matriz fixa de pixels coloridos.
• Os mapas procedurais, por exemplo, um tabuleiro
de xadrez, podem ser gerados por um algoritmo.
• Esses mapas dispensam a utilização de imagens e,
podem ser inclusive tridimensionais:
–São muito usados para a síntese de cenas complexas ou
aplicações em real-time (mármore, revestimentos, repetição
de polígonos).
–Eles também são boas fontes para mapeamento de
textura sintéticas.
Página 4
Computação Gráfica – Parte 13
05/04/2013
Mapeamento de Texturas
• Funções ou imagens que são mapeadas sobre uma
superfície. Tal função ou imagem é chamada de mapa de
textura.
• Analogia com colagem de decalque sobre um objeto.
Página 5
Computação Gráfica – Parte 13
05/04/2013
Mapeamento de Texturas
Arranjos de texturas
• Armazenar um arranjo de cores (3D ou 2D) e associá-los
a uma posição espacial.
• Assume-se, para o caso 2D, que as dimensões nas quais
a textura será mapeada são as dimensões u e v.
– O mapa de texturas (imagem) tem dimensões nx e ny.
nx
ny
Página 6
u
v
Computação Gráfica – Parte 13
05/04/2013
Mapeamento de textura
• Em um arranjo 2D, a textura é uma imagem de
tamanho nx, ny. Cada pixel dessa imagem é chamado
de texel (texture element).
• Dependendo do mapeamento, cada texel pode ocupar
vários pixels da imagem final, ou vice-versa.
nx
ny
Página 7
Computação Gráfica – Parte 13
05/04/2013
Mapeamento de textura
• Principais tipos de mapeamento:
– Esférico: coordenadas uv são mapeadas segundo
coordenadas polares esféricas.
– Planar: coordenadas uv mapeadas ortogonalmente.
– Cilíndrico: coordenadas uv são mapeadas segundo
coordenadas polares cilíndricas.
– Cúbico: coordenadas uv mapeadas ortogonalmente nos
seis planos de um cubo.
Página 8
Computação Gráfica – Parte 13
05/04/2013
Mapeamento esférico
• Exemplo:
Página 9
Computação Gráfica – Parte 13
05/04/2013
Mapeamento planar
• Exemplo:
Página 10
Computação Gráfica – Parte 13
05/04/2013
Mapeamento cilíndrico
• Exemplo:
Página 11
Computação Gráfica – Parte 13
05/04/2013
Mapeamento cúbico
• Exemplo:
Página 12
Computação Gráfica – Parte 13
05/04/2013
Outros mapeamentos de texturas
• Mapeamento de superfícies paramétricas:
– Ao renderizar uma superfície paramétrica,
dispensamos o tipo de forma de mapeamento
(esférico, cilíndrico, cúbico) e tratamos os parâmetro
uv da superfície como parâmetros uv normalizados
do mapa de textura.
Página 13
Computação Gráfica – Parte 13
05/04/2013
Mapeamento de Reflexão
O mapeamento de reflexão (Environment mapping) é o tipo do
mapeamento que reflete na superfície dos objetos os elementos
que compõem a cena.
• Pode ser feita a partir de duas formas:
•
– A primeira é envolver a figura com um cubo, onde em cada face
com uma textura que se deseja projetar. Para cada vértice do
objeto, um vetor de reflexão é calculado, e indica uma das seis
imagens para aquela face/superfície.
Página 14
Computação Gráfica – Parte 13
05/04/2013
Mapeamento de Reflexão
•
Mapeamento de reflexão:
– Uma segunda forma é gerar uma única imagem de uma superfície
esférica refletindo o ambiente.
Página 15
Computação Gráfica – Parte 13
05/04/2013
Bump Map
• Quando utilizamos uma fotografia de uma superfície
áspera como mapa de textura, a superfície
renderizada não fica muito correta.
– A direção da fonte de luz utilizada para criar o mapeamento
é diferente da direção da iluminação do sólido.
• Uma técnica para amenizar esse efeito, dando uma
perturbação na normal à superfície antes de aplicar o
modelo de iluminação.
– Essa perturbação produz um deslocamento virtual na
posição dos pontos da superfície.
Página 16
Computação Gráfica – Parte 13
05/04/2013
Bump Map
•
Bump Map é uma técnica usada para adicionar realismo sem
modificar a geometria ao objeto.
– Essa técnica adiciona um sombreamento nos pixels, produzindo
uma ilusão de relevo no objeto renderizado.
•
A cor de uma superfície está relacionada com ângulo entre o
vetor normal da superfície e a direção da luz.
– Em uma superfície plana, o vetor normal é o mesmo para toda a
superfície, logo a cor da superfície será sempre a mesma.
•
No bump map, as propriedades de refração da luz são usadas
para indicar quais partes são mais escuras ou mais claras
Página 17
Computação Gráfica – Parte 13
05/04/2013
Bump Map
Textura
Bump Map
Parede sem
Bump Map
Página 18
Computação Gráfica – Parte 13
Parede com
Bump Map
05/04/2013
Texturas em OpenGl
• A utilização de mapeamento de texturas no OpenGl é
um procedimento complexo, pois existem variações e
diversas funções de manipulação.
• O uso de texturas requer a execução de dois passos
distintos: a CARGA e a APLICAÇÃO da textura.
• O mapeamento de textura 2D em OpenGL consiste
em carregar uma imagem de um arquivo e "colar"
esta imagem na superfície do(s) objeto(s).
• É importante salientar que a largura e a altura desta
imagem devem ser potências de 2.
Página 19
Computação Gráfica – Parte 13
05/04/2013
Texturas em OpenGl
• Os passos para o mapeamento de textura em Opengl
são:
- Ler uma imagem e armazenar num objeto adequado;
- Criar um identificador para a textura;
- Definir a textura em OpenGL;
- Especificar como a textura será aplicada em cada pixel (filtros);
- Habilitar o mapeamento de textura;
- Desenhar os objetos fornecendo uma coordenada de textura
para cada coordenada geométrica.
• Obs: Mapeamento de textura funciona apenas no modo
RGBA.
– glutInitDisplayMode ( GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA )
Página 20
Computação Gráfica – Parte 13
05/04/2013
Texturas em OpenGl
• Função para definir uma textura:
void glTexImage2D (GLenum target, GLint level, GLint
components, GLsizei width, GLint height, GLenum format,
GLenum type, const GLvoid *pixels)
target: GL_TEXTURE_2D
level: nível de detalhe da imagem de textura
components:número de valores de cor para cada pixel
(RGB=3, RGBA=4)
width e height: tamanho da imagem de textura (devem ser potências
de 2, isto é, a imagem de textura deve ter dimensões múltiplas de 2).
format: tipo de valor de cor esperado (GL_ALPHA, GL_COLOR_INDEX,
GL_RED , GL_RGB, GL_RGBA, ...)
type: indica o formato e tipo de dado (GL_BYTE, GL_SHORT, GL_INT,
GL_FLOAT, GL_BITMAP, ...)
pixels: textura
Página 21
Computação Gráfica – Parte 13
05/04/2013
Texturas em OpenGl
• OpenGL tem três modos de aplicação da textura:
•
GL_MODULATE
–
•
Ajusta valores de cor e iluminação com a imagem de textura (mais usado)
GL_DECAL
– Usa apenas a imagem de textura (cor e iluminação não alteram a aparência da
textura)
•
GL_BLEND
– Usado com um ou dois componentes de textura (imagem de textura é misturada
com a cor de textura e com as informações de cor e iluminação).
void glTexEnvi(GLenum target, GLenum pname, TYPE
param)
target deve ser GL_TEXTURE_ENV
pname é GL_TEXTURE_ENV_MODE
param pode ser GL_DECAL, GL_MODULATE,GL_BLEND
Página 22
Computação Gráfica – Parte 13
05/04/2013
Texturas em OpenGl
Filtros de textura:
• São usados para interpolar pixels de textura
• Dois tipos fornecidos
– GL_TEXTURE_MIN_FILTER para polígonos que são menores que
a imagem de textura;
– GL_TEXTURE_MAG_FILTER para polígonos que são maiores que
a imagem de textura.
Página 23
Computação Gráfica – Parte 13
05/04/2013
Texturas em OpenGl
•
Carga da Textura - Para a aplicação da textura é preciso criar
uma relação entre os vértices da textura e os vértices dos
polígonos sobre os quais se desenha mapear a textura escolhida.
– Na figura a seguir as letras A, B, C e D definem os vértices da textura
e os vértices A1, B1, C1 e D1 os vértices de polígono 3D onde deve
ser mapeada esta textura.
– O processo de mapeamento de texturas em OpenGL consiste em
"aplicar" a imagem 2D sobre o polígono 3D de forma que os pontos A,
B, C e D sejam encaixados sobre os pontos A1, B1, C1 e D1.
Página 24
Computação Gráfica – Parte 13
05/04/2013
Texturas em OpenGl
• Para permitir a construção desta correspondência entre a
imagem 2D e o polígono 3D usa-se a função glTexCoord2f
antes da definição do ponto 3D.
• Por exemplo:
glTexCoord2f(0.0f,0.0f); glVertex3f(1.0f,-1.0f,1.0f);
define que o ponto (0.0, 0.0) da textura 2D corresponde ao ponto
(1.0, -1.0, 1.0) do polígono 3D.
• O sistema de coordenadas da textura tem como (0,0) o ponto
inferior esquerdo da imagem e como (1,1) o ponto superior
direito. Ou seja, na imagem acima temos as seguintes
coordenadas para os pontos A, B, C e D.
Página 25
Computação Gráfica – Parte 13
05/04/2013
Texturas em OpenGl
•
•
O sistema de coordenadas da textura tem como (0,0) o ponto
inferior esquerdo da imagem e como (1,1) o ponto superior
direito. Ou seja, na imagem abaixo temos as seguintes
coordenadas para os pontos A, B, C e D.
Vértice da
Textura
Coordenada
A
(0,1)
B
(1,1)
C
(1,0)
D
(0,0)
Supondo que o polígono 3D é a face lateral direita de um cubo de aresta
2 com o centro no ponto (0,0,0) teremos as seguintes coordenadas:
Vértice do
Polígono 3D
Coordenada
A1
1.0, 1.0, 1.0
B1
1.0, 1.0, -1.0
C1
1.0, -1.0, -1.0
D1
1.0, -1.0, 1.0
Página 26
Computação Gráfica – Parte 13
05/04/2013
Texturas em OpenGl
• O mapeamento da textura sobre o polígono se dá através do seguinte
trecho de código:
// Define a textura corrente
glBindTexture ( GL_TEXTURE_2D, texture_id[0] );
// GL_TEXTURE_2D ==> define que será usada uma textura 2D
(bitmaps)
// texture_id[CUBE_TEXTURE] ==> define o número da
textura
// associa cada vértice do
glTexCoord2f(1.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f);
glTexCoord2f(0.0f, 0.0f);
polígono a um ponto da textura
glVertex3f( 1.0f, -1.0f, -1.0f);
glVertex3f( 1.0f, 1.0f, -1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f, -1.0f, 1.0f);
Códigos Exemplos: http://migre.me/23OIF - arquivo TGA
http://migre.me/23RnB - arquivo JPG
Página 27
Computação Gráfica – Parte 13
05/04/2013
Download