computação gráfica - 13 - início — univasf …jorge.cavalcanti/comput_graf14...–são muito...
TRANSCRIPT
Computação Gráfica - 13
Prof. Jorge Cavalcanti [email protected]
www.univasf.edu.br/~jorge.cavalcanti
www.twitter.com/jorgecav
Universidade Federal do Vale do São Francisco Curso de Engenharia da Computação
05/04/2013 Computação Gráfica – Parte 13 Página 2
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.
05/04/2013 Computação Gráfica – Parte 13 Página 3
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 Modelo Modelo texturizado
05/04/2013 Computação Gráfica – Parte 13 Página 4
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.
05/04/2013 Computação Gráfica – Parte 13 Página 5
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.
05/04/2013 Computação Gráfica – Parte 13 Página 6
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
u
v
05/04/2013 Computação Gráfica – Parte 13 Página 7
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
05/04/2013 Computação Gráfica – Parte 13 Página 8
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.
05/04/2013 Computação Gráfica – Parte 13 Página 9
Mapeamento esférico
• Exemplo:
05/04/2013 Computação Gráfica – Parte 13 Página 10
• Exemplo:
Mapeamento planar
05/04/2013 Computação Gráfica – Parte 13 Página 11
• Exemplo:
Mapeamento cilíndrico
05/04/2013 Computação Gráfica – Parte 13 Página 12
Mapeamento cúbico
• Exemplo:
05/04/2013 Computação Gráfica – Parte 13 Página 13
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.
05/04/2013 Computação Gráfica – Parte 13 Página 14
• 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.
Mapeamento de Reflexão
05/04/2013 Computação Gráfica – Parte 13 Página 15
• Mapeamento de reflexão:
– Uma segunda forma é gerar uma única imagem de uma superfície esférica refletindo o ambiente.
Mapeamento de Reflexão
05/04/2013 Computação Gráfica – Parte 13 Página 16
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.
05/04/2013 Computação Gráfica – Parte 13 Página 17
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
05/04/2013 Computação Gráfica – Parte 13 Página 18
Bump Map
Textura
Bump Map
Parede sem Bump Map
Parede com Bump Map
05/04/2013 Computação Gráfica – Parte 13 Página 19
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.
05/04/2013 Computação Gráfica – Parte 13 Página 20
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 )
05/04/2013 Computação Gráfica – Parte 13 Página 21
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
05/04/2013 Computação Gráfica – Parte 13 Página 22
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
05/04/2013 Computação Gráfica – Parte 13 Página 23
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.
05/04/2013 Computação Gráfica – Parte 13 Página 24
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.
05/04/2013 Computação Gráfica – Parte 13 Página 25
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.
05/04/2013 Computação Gráfica – Parte 13 Página 26
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.
• 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 da
Textura Coordenada
A (0,1)
B (1,1)
C (1,0)
D (0,0)
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
05/04/2013 Computação Gráfica – Parte 13 Página 27
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 polígono a um ponto da textura
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
Códigos Exemplos: http://migre.me/23OIF - arquivo TGA http://migre.me/23RnB - arquivo JPG