27
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

Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

  • Upload
    dangdan

  • View
    217

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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

Page 2: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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.

Page 3: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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

Page 4: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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.

Page 5: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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.

Page 6: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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

Page 7: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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

Page 8: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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.

Page 9: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

05/04/2013 Computação Gráfica – Parte 13 Página 9

Mapeamento esférico

• Exemplo:

Page 10: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

05/04/2013 Computação Gráfica – Parte 13 Página 10

• Exemplo:

Mapeamento planar

Page 11: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

05/04/2013 Computação Gráfica – Parte 13 Página 11

• Exemplo:

Mapeamento cilíndrico

Page 12: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

05/04/2013 Computação Gráfica – Parte 13 Página 12

Mapeamento cúbico

• Exemplo:

Page 13: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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.

Page 14: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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

Page 15: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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

Page 16: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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.

Page 17: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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

Page 18: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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

Page 19: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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.

Page 20: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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 )

Page 21: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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

Page 22: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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

Page 23: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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.

Page 24: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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.

Page 25: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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.

Page 26: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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

Page 27: Computação Gráfica - 13 - Início — UNIVASF …jorge.cavalcanti/comput_graf14...–São muito usados para a síntese de cenas complexas ou aplicações em real-time (mármore,

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