Computação Gráfica. Texturas

Documentos relacionados
Fundamentos de Computação Gráfica. Texturas

Texturas. Aula 7. Sistemas Gráficos e Interactivos Instituto Superior de Engenharia do Porto. Paulo Gandra de Sousa

Computação Gráfica. Texturas

Tomás Antônio Costa Badan. Mapa de Textura: O Básico

Introdução à Computação Gráfica Texturas

Mapeamento de Texturas

Computação Gráfica - 13

Computação Gráfica - 13

Detalhes de Superfícies. Introdução à Computação Gráfica Texturas. Propriedades Mapeáveis. Mapeamento de Textura

Computação Gráfica. GLSL - Programação de Shaders Toon Mapping; Texturas

Computação Gráfica 5385: Licenciatura em Engenharia Informática. Chap. 10 Texturas. Texturas

FUNDAMENTOS E APLICAÇÕES. Luis Valente

Reflexões e Sombras em Superfícies Planares Animação e Visualização Tridimensional Prof. João Madeiras Pereira Instituto Superior Técnico 2005/2006

CG 2015/2016 Segundo Teste LEIC Alameda/Taguspark. Segundo Teste. 18 de Novembro de 2015

Prof. Fernando V. Paulovich 3 de agosto de SCC Computação Gráca

Implementação do algoritmo Marching Cubes usando shaders. Luiz Fernando Oliveira Corte Real

Capítulo 3 Primeiros Passos em OpenGL Função Desenha Função Teclado Função Inicializa Programa Principal...

2º Exame de Animação e Visualização Tridimensional

Visibilidade. Licenciatura em Engenharia Informática e de Computadores Computação Gráfica. Edward Angel, Cap. 7 Apontamentos CG

Mapeamento de Textura

Engenharia Informática Computação Gráfica

OpenGL Conceitos Avançados

Transformações (Cap 4.3, 4.4 e 4.6 a 4.10)

Aula Prática Laboratorial n.º 8, nº 9 e nº 10

Computação Gráfica. Iluminação

UNIVERSIDADE FEDERAL FLUMINENSE Pedro Martins Menezes. Um estudo dos estágios dos pipelines gráficos

Computação Gráfica OpenGL 05 3D

António Costa. Paulo Roma Cavalcanti

Computação Gráfica. Engenharia de Computação. CEFET/RJ campus Petrópolis. Prof. Luis Retondaro. Aula 6. Projeções

Computação Gráfica - 09

Introdução Geral a Computação Gráfica. Universidade Católica de Pelotas Curso de Engenharia da Computação Disciplina de Computação Gráfica

Transformações geométricas no plano e no espaço

Introdução à Computação Gráfica. Claudio Esperança Paulo Roma Cavalcanti

CG 2013/2014 Primeiro Teste LEIC Alameda/Taguspark

Computação Gráfica. GLSL - Introdução e Programação da Aplicação OpenGL

Computação Gráfica - 09

Imagem ou Desenhos e Gráficos vetorial ou raster?

Computação Gráfica. Iluminação

Modelos Geométricos Transformações

Exame de 2ª Época Computação Gráfica

Introdução ao Processamento e Síntese de imagens -Linhas e superfícies escondidas

Transformações geométricas

Sistemas Gráficos e Modelos Cap 1

Imagem e Gráficos. vetorial ou raster?

Cap. 9 Texturas Engenharia Informática (5385) - 2º ano, 2º semestre

Rendering de Polígonos. Determinação de Superfícies Visíveis. Back Face Culling. Back Face Culling. Back Face Culling. Back Face Culling.

4 Impostores com Relevo

CG 2015/2016 Prova de Repescagem LEIC Alameda/Taguspark. 12 de Janeiro de 2016

Sumário. Gráficos 3D - Evolução Histórica. Computação Gráfica. ! Criação de Gráficos. ! Criação de Modelos 3D. ! Pipeline Gráfico. !

Computação Gráfica. Licenciatura em Engenharia Informática e de Computadores Alameda / Taguspark. Terceiro Teste 19 de Maio de 2012

Realismo Visual. Aula 11 UFF

Lista de exercícios. 4) Defina o conceito de função de eficiência luminosa. (Victor)

2º Exame. Computação Gráfica

Instituto de Computação Bacharelado em Ciência da Computação Disciplina: Computação Gráfica Primeira lista de exercícios

Introdução a Programação de Jogos

Instituto de Computação Bacharelado em Ciência da Computação Disciplina: Computação Gráfica Primeira lista de exercícios

OpenGL. Soraia Musse

Computação Gráfica - 11

Transcrição:

Computação Gráfica Texturas António nio Ramires Fernandes - Multimédia

Texturas Aplicar imagens 1D,2D ou 3D a primitivas geométricas Utilizações: Simular materiais: madeira, granito, tijolo Reduzir complexidade geométrica Simulação de fenómenos naturais (ou outros) (reflexões, refracção, luz, lens flare) DI-UM Multimédia 2

Texturas Texturas e Geometria seguem caminhos separados no pipeline gráfico, encontrando-se na fase de raster. DI-UM Multimédia 3

Texturas Imagem: dimensões são potências de 2. Por exemplo: 256 x 128 Exemplos de Formatos: RGB, RGBA,... OpenGL não tem nenhuma função para carregar texturas de ficheiro DI-UM Multimédia 4

Texturas 1D: Linhas que podem ser utilizadas para a criação de imagens 2D: Textura normal 3D: Volumes. Permitem aplicar texturas como se tratasse de uma escultura DI-UM Multimédia 5

Texturas - Utilização Definição Carregar a imagem Criar uma textura em OpenGL Definir parâmetros da textura Aplicação Definir vértices Definir Transformações Geométricas DI-UM Multimédia 6

Texturas Aplicação Para aplicar uma textura a um polígono é necessário definir um mapeamento entre os pixels da textura e os vértices do polígono. As texturas 2D têm um sistema de coordenadas nos eixos s (=x),t (=y). gltexcoord2f(s,t). DI-UM Multimédia 7

Texturas - Aplicação Ao definir os vértices do polígono, é necessário definir anteriormente as coordenadas a aplicar da textura. glbindtexture(gl_texture_2d,texid); glbegin(gl_quads); gltexcoord2f(0,0);glvertex3f(-1.0f, -1.0f, 0.0f); gltexcoord2f(1,0);glvertex3f( 1.0f, -1.0f, 0.0f); gltexcoord2f(1,1);glvertex3f( 1.0f, 1.0f, 0.0f); gltexcoord2f(0,1);glvertex3f(-1.0f, 1.0f, 0.0f); glend(); DI-UM Multimédia 8

Texturas - Aplicação glbindtexture(gl_texture_2d,1); glbegin(gl_quads); gltexcoord2f(0,0);glvertex3f(-1.0f, -1.0f, 0.0f); gltexcoord2f(1,0);glvertex3f( 1.0f, -1.0f, 0.0f); gltexcoord2f(1,1);glvertex3f( 1.0f, 1.0f, 0.0f); gltexcoord2f(0,1);glvertex3f(-1.0f, 1.0f, 0.0f); glend(); DI-UM Multimédia 9

Texturas - Aplicação A escolha de coordenadas no espaço das texturas é "livre". DI-UM Multimédia 10

Texturas - Aplicação Matriz para Texturas Permite realizar transformações geométricas sobre a textura. glmatrixmode(gl_texture); gltranslatef(0.5,0,0); glrotatef(45,0,0,1); glmatrixmode(gl_modelview); glbegin(gl_quads);... glend(); DI-UM Multimédia 11

Texturas - Parâmetros Clamp & Repeat Imagem Original GL_CLAMP GL_REPEAT As várias hipóteses para CLAMP e REPEAT (2x2) DI-UM Multimédia 12

Texturas - Aplicação Demo Texturas Nate Robbins DI-UM Multimédia 13

Texturas - Filtros: Mag Utilizado quando a um pixel da textura corresponde mais que um pixel da imagem final, ou seja quando a textura é ampliada GL_LINEAR ou GL_NEAREST DI-UM Multimédia 14

Texturas - Filtros: Min Utilizado quando a um pixel da textura corresponde menos que um pixel da imagem final, ou seja quando a textura é comprimida visualmente. GL_LINEAR ou GL_NEAREST DI-UM Multimédia 15

Texturas - Filtros Mag:Nearest DI-UM Multimédia 16

Texturas - Filtros Mag: Linear pode parecer desfocado ao perto! DI-UM Multimédia 17

Texturas Demo Texturas - Filtros DI-UM Multimédia 18

Texturas - Definição glgentextures(1, texname); glbindtexture(gl_texture_2d, texname[0]); gltexparameteri(gl_texture_2d, GL_TEXTURE_WRAP_S, GL_REPEAT); gltexparameteri(gl_texture_2d, GL_TEXTURE_WRAP_T, GL_REPEAT); gltexparameteri(gl_texture_2d, GL_TEXTURE_MAG_FILTER, GL_LINEAR); gltexparameteri(gl_texture_2d, GL_TEXTURE_MIN_FILTER, GL_LINEAR); image = tgaload("casaco.tga"); glteximage2d(gl_texture_2d, 0, GL_RGB, image->width, image->height, border, GL_RGB, GL_UNSIGNED_BYTE, image->imagedata); DI-UM Multimédia 19

Texturas: Cor Final A cor da textura pode ser combinada com a cor do polígono. Modo RGBA GL_REPLACE C = Ct A = At GL_MODULATE C = Ct * Cf A = At * Af GL_BLEND C = Cf*(1-Ct) + Cc*Ct A = Af * At GL_DECAL C = Cf*(1-At) + Ct*At A = Af f = fragmento, t = textura, c = GL_TEXTURE_ENV_COLOR gltexenvi(gl_texture_env, GL_TEXTURE_ENV_MODE,param); gltexenvfv(gl_texture_env, GL_TEXTURE_ENV_COLOR,param); DI-UM Multimédia 20

Texturas: Transparência Para transparências parciais a ordem de desenho é importante Para transparências totais pode-se utilizar o teste do alpha Este teste é realizado antes da escrita no Z-buffer, e elimina todos os pixels que não passam no teste...... logo os pixels que são eliminados não alteram o Z- buffer. DI-UM Multimédia 21

Texturas: Transparência Na Prática glenable(gl_alpha_test); glalphafunc(gl_greater, 0); DI-UM Multimédia 22

Texturas 1D glteximage1d(gl_texture_1d,...) 3D glteximage3d(gl_texture_3d,...) DI-UM Multimédia 23

Texturas Em OpenGL é necessário activar a operação de aplicação de texturas: glenable(gl_texture_1d); glenable(gl_texture_2d); glenable(gl_texture_3d); DI-UM Multimédia 24

Geração de Coordenadas O OpenGL permite a geração de coordenadas para texturas automática. Note-se que a geração de coordenadas não pretende substituir a necessidade de definir coordenadas de texturas, mas sim permitir novas aplicações. DI-UM Multimédia 25

Geração de Coordenadas Três modos possíveis: GL_EYE_LINEAR Permite fixar as texturas no espaço, e o objecto move-se na textura. GL_OBJECT_LINEAR Texturas fixas ao objecto, aplicação tradicional. GL_SPHERE_MAPPING, GL_CUBE_MAPPING Os objectos reflectem o ambiente, tal como no filme Exterminador, ou no Abismo. DI-UM Multimédia 26

Geração de Coordenadas Demo Geração Coordenadas (texgencoord) DI-UM Multimédia 27

Geração de Coordenadas GL_OBJECT_LINEAR s = s 0 * x + s 1 * y + s 2 * z + s 3 * w sendo v = (x,y,z,w) e S = (s 0,s 1,s 2,s 3 ) Os planos S,T,R,Q determinam o referencial a partir do qual são calculadas as coordenadas. DI-UM Multimédia 28

Geração de Coordenadas GL_EYE_LINEAR s = s' 0 * xe + s' 1 * ye + s' 2 * ze + s' 3 * we sendo ve = (xe,ye,ze,we), as coordenadas do vértice no espaço da câmara... e S' = (s' 0,s' 1,s' 2,s' 3 ) = (s 0,s 1,s 2,s 3 ) * M -1 sendo M a matriz MODELVIEW Os planos S,T,R,Q determinam o referencial a partir do qual são calculadas as coordenadas no espaço câmara. DI-UM Multimédia 29

Geração de Coordenadas Terreno: utiliza textura 2D Calculo automático: Distância aos planos x=0 (s) e z=0 (t) Escala da textura de forma a que 1 unidade de textura corresponda ao terreno inteiro DI-UM Multimédia 30

Geração na prática Activar Geração de Coordenadas glenable(gl_texture_gen_s); glenable(gl_texture_gen_t); Modo: GL_OBJECT_LINEAR gltexgeni(gl_s, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); gltexgeni(gl_t, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); Os Planos S e T: GLfloat planes[] = {1.0, 0.0, 0.0, 0.0}; GLfloat planet[] = {0.0, 0.0, 1.0, 0.0}; gltexgenfv(gl_s, GL_OBJECT_PLANE, planes); gltexgenfv(gl_t, GL_OBJECT_PLANE, planet); Escala da Textura glmatrixmode(gl_texture); glscalef(1.0/(image->width),1.0/(image->height),1); glmatrixmode(gl_modelview); DI-UM Multimédia 31

Geração de Texturas Demo Terreno com Geração de Texturas DI-UM Multimédia 32

Geração de Coordenadas Curvas de nível: utiliza textura 1D Calculo automático: Distância ao plano y=0 (s) Escala da textura de forma a que 1 unidade de textura corresponda a n metros. Textura repetida permite visualizar múltiplas curvas de nível. DI-UM Multimédia 33

Geração na prática Activar Geração de Coordenadas glenable(gl_texture_gen_s); Modo: GL_OBJECT_LINEAR gltexgeni(gl_s, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); O Plano S : GLfloat planes[] = {0.0, 1.0, 0.0, 0.0}; gltexgenfv(gl_s, GL_OBJECT_PLANE, planes); Escala da Textura glmatrixmode(gl_texture); glscalef(1.0/n,1,1); glmatrixmode(gl_modelview); DI-UM Multimédia 34

Geração de Texturas Demo Curvas de Nível com Geração de Texturas DI-UM Multimédia 35

Texturas - Mipmapping Do Latim multum in parvo. Problema: alterações inesperadas ao encolher texturas à medida que a camera se afasta. Causa: O processo de aplicação de filtros a uma imagem muito encolhida pode implicar alterações abruptas à imagem projectada. DI-UM Multimédia 36

Texturas - Mipmapping Solução: Utilizar múltiplas texturas de diferentes resoluções para utilizar a escalas diferentes. Por exemplo: textura original 32 x 16 Fornecer texturas: 32x16, 16x8, 8x4, 4x2, 2x1, 1x1. É necessário fornecer uma sequência de níveis consecutivos (potências de 2). DI-UM Multimédia 37

Texturas - Mipmapping Figura do Red Book: DI-UM Multimédia 38

Texturas - Mipmapping Que textura escolher para cada pixel? a mais próxima da actual resolução, ou uma combinação linear das duas mais próximas. Imagens do Red Book DI-UM Multimédia 39

Texturas - Mipmapping Combinações disponíveis para filtrar uma textura (MIN_FILTER): GL_NEAREST_MIPMAP_NEAREST GL_LINEAR_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_LINEAR O primeiro filtro diz respeito à textura, o segundo ao mipmapping. DI-UM Multimédia 40

Texturas - Mipmapping GLU permite a criação automática dos níveis necessários para o mipmapping. Todos: glubuild2dmipmaps(gl_texture_2d, GL_RGBA, image->width, image->height, GL_RGBA, GL_UNSIGNED_BYTE, image->imagedata); Do nível base ao nível max: glubuild2dmipmaplevels(gl_texture_2d, GL_RGBA, image->width, image->height, GL_RGBA, GL_UNSIGNED_BYTE, level, base, max, image->imagedata); Pode-se também especificar quais os níveis a utilizar: gltexparameteri(gl_texture_2d,gl_texture_base_level,2); gltexparameteri(gl_texture_2d,gl_texture_max_level,5); DI-UM Multimédia 41

Texturas - Mipmapping glbindtexture(gl_texture_2d,texname[1]); gltexparameteri(gl_texture_2d, GL_TEXTURE_WRAP_S, GL_REPEAT); gltexparameteri(gl_texture_2d, GL_TEXTURE_WRAP_T, GL_REPEAT); gltexparameteri(gl_texture_2d, GL_TEXTURE_MAG_FILTER, GL_NEAREST); gltexparameteri(gl_texture_2d, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST); image = tgaload("ground.tga"); glubuild2dmipmaps(gl_texture_2d, GL_RGB, image->width, image->height, GL_RGB, GL_UNSIGNED_BYTE, image->imagedata); // especificar quais os níveis a utilizar gltexparameteri(gl_texture_2d,gl_texture_base_level,2); gltexparameteri(gl_texture_2d,gl_texture_max_level,5); DI-UM Multimédia 42

Texturas - Performance Texturas Residentes glaretexturesresident residentes é um array de booleanos que indica se cada uma das texturas alocadas está residente Prioridades glprioritizetextures DI-UM Multimédia 43

OpenGL Cube Map DI-UM Multimédia 44

Cube Mapping OpenGL Cube Map www.nvidia.com Cubo centrado na origem. Cada texel representa o que seria visto a partir da origem nessa direcção DI-UM Multimédia 45

OpenGL Environment Map Orientação das Imagens DI-UM Multimédia 46

OpenGL Environment Map Código OpenGL para criar Cube Map glgentextures(1, texname); glbindtexture(gl_texture_cube_map,texname[0]); static GLenum facetarget[6] = { GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z }; for (i=0; i<6;i++) { ti = tgaload(filename[i]); gltexparameteri(gl_texture_cube_map, GL_TEXTURE_MIN_FILTER, GL_LINEAR); gltexparameteri(gl_texture_cube_map, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } glteximage2d(facetarget[i], 0, GL_RGB, ti->width, ti->height, 0, GL_RGB, GL_UNSIGNED_BYTE, ti->imagedata); tgadestroy(ti); DI-UM Multimédia 47

OpenGL Environment Map Código OpenGL para preparar estado Cube Map glenable(gl_texture_cube_map); glenable(gl_texture_gen_s); glenable(gl_texture_gen_t); glenable(gl_texture_gen_r); gltexgeni(gl_s, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP); gltexgeni(gl_t, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP); gltexgeni(gl_r, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP); DI-UM Multimédia 48

OpenGL Environment Map Vantagens: Rápido em Hardware Fácil de Gerar em Runtime DI-UM Multimédia 49

OpenGL Environment Map Geração para cenas artificiais: Definir uma camera com ângulo de visão de 90º centrada na origem do objecto Apontar a camera no eixo do X+ e capturar o frame buffer para uma textura do cubo Repetir para as restantes 5 direcções. DI-UM Multimédia 50

OpenGL Environment Map Geração em tempo real www.nvidia.com DI-UM Multimédia 51

OpenGL Environment Map Ray Tracing Simulado DI-UM Multimédia 52

Referências OpenGL Programming Guide, aka Red Book, OpenGL ARB DI-UM Multimédia 53