Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 ·...
Transcript of Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 ·...
![Page 1: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/1.jpg)
Mapeamento de Texturas 2D
Maria Cristina F. de Oliveira2013
1
![Page 2: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/2.jpg)
Fontes
• Introdução à Computação GráficaTexturas, por Claudio Esperança e Paulo Roma Cavalcanti (UFRJ)
• Livro Edward Angel, Interactive Computer Grtaphics, a Top-down approach withOPENGL
• Outras citadas nos slides
2
![Page 3: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/3.jpg)
Detalhes de Superfícies
• Modelos de iluminação não são apropriados para descrever todas as diferenças de cor observáveis em uma superfície� Superfícies pintadas com padrões ou imagens
• A capa ou uma página de um livro
� Superfícies com padrões regulares• Tecidos ou uma parede de tijolos
• Em princípio é possível modelar esses detalhes com geometria e usando materiais de propriedades óticas distintas
• Na prática, esses efeitos são modelados usando uma técnica chamada mapeamento de textura
3
![Page 4: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/4.jpg)
Example 1
4
![Page 5: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/5.jpg)
Example 2
5
![Page 6: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/6.jpg)
Mapeamento de Textura
• A idéia é reproduzir sobre a superfície de algum objeto da cena as propriedades de alguma função –ou mapa - bidimensional (cor, por exemplo)
6
![Page 7: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/7.jpg)
Propriedades Mapeáveis
• Quais parâmetros ou propriedades pode-se reproduzir a partir de mapas:� Cor (coeficientes de reflexão
difusa)� Coeficientes de reflexão
especular e difusa• Mapeamento de ambiente
� Perturbação do vetor normal• “Bump Mapping”
� Perturbação da superfície na direção da normal
• “Displacement Mapping”
� Transparência / opacidade7
![Page 8: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/8.jpg)
Three Types of Mapping
• Texture Mapping� Uses images to fill inside of polygons
• Environment (reflection mapping)� Uses a picture of the environment for texture
maps� Allows simulation of highly specular surfaces
• Bump mapping� Emulates altering normal vectors during the
rendering process
![Page 9: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/9.jpg)
Texture Mapping
geometric model texture mapped
![Page 10: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/10.jpg)
Environment Mapping
![Page 11: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/11.jpg)
Bump Mapping
![Page 12: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/12.jpg)
Where does mapping take place?
• Mapping techniques are implemented at the end of the rendering pipeline� Very efficient because few polygons make it
past the clipper
![Page 13: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/13.jpg)
Is it simple?
• Although the idea is simple---map an image to a surface---there are 3 or 4 coordinate systems involved
2D image
3D surface
![Page 14: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/14.jpg)
Texture Mapping
parametric coordinates
texture coordinates
world coordinateswindow coordinates
![Page 15: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/15.jpg)
Mapping Functions
• Basic problem is how to find the maps• Consider mapping from texture coordinates
to a point a surface • Appear to need three functions
x = x(s,t)y = y(s,t)z = z(s,t)
• But we really want to go the other way
s
t
(x,y,z)
![Page 16: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/16.jpg)
Backward Mapping
• We really want to go backwards� Given a pixel, we want to know to which
point on an object it corresponds� Given a point on an object, we want to know
to which point in the texture it corresponds• Need a map of the form
s = s(x,y,z)
t = t(x,y,z)
• Such functions are difficult to find in general
![Page 17: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/17.jpg)
Espaço de Textura
• Texturas 2D são funções T (s, t) cujo domínio é um espaço bidimensional e o contradomínio pode ser cor, opacidade, etc
• É comum ajustar a escala da imagem de tal forma que a imagem toda se enquadre no intervalo 0 ≤ s, t ≤ 1
• Normalmente a função em si é derivada de alguma imagem capturada� Se a imagem está armazenada
numa matriz Im [0..N–1 , 0..M–1]
� Então T (s, t) = Im [ (1 – s) N , t M ]
t
s
1
1
0
0
17
![Page 18: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/18.jpg)
Espaço de Textura
• Pode ser vantajoso assumir que o padrão da imagem se repete fora desse intervaloT (s, t) =
Im [ (1 – s) N mod N, t M mod M ]
18
![Page 19: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/19.jpg)
Espaço de Textura
• A função de textura pode ser também definida algebricamente:
22 )5.0()5.0(),( −+−= tstsT
19
![Page 20: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/20.jpg)
Função de Mapeamento
• Retorna o ponto do objeto correspondente a cada ponto do espaço de textura
(x, y, z) = F (s, t)
• Corresponde à forma com que a textura é usada para “embrulhar” (wrap) o objeto� Na verdade, na maioria dos casos, precisamos de uma
função que nos permita “desembrulhar” (unwrap) a textura do objeto, isto é, a inversa da função de mapeamento
• Se a superfície do objeto pode ser descrita em forma paramétrica esta pode servir como base para a função de mapeamento
20
![Page 21: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/21.jpg)
Processo de Mapeamento de Texturas
• Projeção do pixel sobre a superfície� Pontos da superfície
correspondentes aos vértices do pixel
• Parametrização� Coordenadas paramétricas
dos vértices do pixel projetados
• Mapeamento inverso� Coordenadas dos vértices
no espaço de textura• Média
� Cor média dos “Texels” proporcional à área coberta pelo quadrilátero
uv
s
t
i
j
Tvis T
T-1vis * T-1
pixel
texel
21
![Page 22: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/22.jpg)
Mapeamentos objeto -> textura
• Mapeando coordenadas do objeto em coordenadas de textura
• Casos simples: esfera, cilindro...� Mapeamento derivado a partir das
representações paramétricas do objeto
• e uma superfície paramétrica? Mapeamento linear aparentemente simples...Não tão simples quanto parece...
• e objetos genéricos?22
![Page 23: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/23.jpg)
Parametrização da Esfera
x
y
z
φ
θ
23
![Page 24: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/24.jpg)
Parametrização da Esfera
ϕθϕθϕθϕθϕθϕ
cos),(
sinsin),(
cossin),(
===
z
y
x
x
y
z
φ
θ
s
t
⋅=⋅=π2
π
θϕ
x
y
z
arctan
arccos
=
=
θ
ϕ
π
π
2
arctan
arccos
x
y
s
zt
=
=
Função de mapeamento
Função de mapeamento inversa
24
![Page 25: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/25.jpg)
Parametrização do Cilindro
x
y
z
θ
25
zz
y
x
===
θθ
sin
cos
![Page 26: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/26.jpg)
Parametrização do Cilindro
x
y
z
θ
zz
y
x
===
θθ
sin
cos
tz
s
=⋅= π2θ
zzx
y
=
= arctanθ
zt
s
=
=π2
θ
Função de mapeamento
Função de mapeamento inversa
26
![Page 27: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/27.jpg)
Parametrizando Objetos Genéricos• O que fazer quando o objeto não
comporta uma parametrização natural?• Uma sugestão é usar um mapeamento
em 2 estágios [Bier e Sloan]:� Mapear textura sobre uma superfície
simples como cilindro, esfera, etc aproximadamente englobando o objeto
27
![Page 28: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/28.jpg)
Two-part mapping
• One solution to the mapping problem is to first map the texture to a simple intermediate surface
• Example: map to cylinder
![Page 29: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/29.jpg)
Cylindrical Mapping
parametric cylinder
x = r cos 2π uy = r sin 2πu
z = v/h
maps rectangle in u,v space to cylinderof radius r and height h in world coordinates
s = ut = v
maps from texture space
![Page 30: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/30.jpg)
Spherical Map
We can use a parametric sphere
x = r cos 2πuy = r sin 2πu cos 2πvz = r sin 2πu sin 2πv
in a similar manner to the cylinderbut have to decide where to put
the distortion
Spheres are used in environmental maps
![Page 31: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/31.jpg)
Box Mapping
• Easy to use with simple orthographic projection
• Also used in environment maps
![Page 32: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/32.jpg)
Parametrizando Objetos Genéricos• mapeamento em 2 estágios:
� Mapeamento da textura do objeto intermediário para o objeto alvo pode ser feito de diversas maneiras
• Raios passando pelo centróide do objeto
• Raios normais à superfície do objeto• Raios normais à superfície simples• Raios refletidos (environment
mapping)
32
![Page 33: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/33.jpg)
Second Mapping
• Map from intermediate object to actual object� Normals from intermediate to actual� Normals from actual to intermediate� Vectors from center of intermediate
intermediateactual
![Page 34: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/34.jpg)
Exemplos
Parametrizaçãocúbica
Projetada em um cilindro
Projetada emuma esfera
34
![Page 35: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/35.jpg)
Exemplos
Parametrizaçãocilíndrica
Projetada em um cubo
Projetada emuma esfera
35
![Page 36: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/36.jpg)
Exemplos
Parametrizaçãoesférica
Projetada em um cilindro
Projetada emum cubo
36
![Page 37: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/37.jpg)
Example 5
37
![Page 38: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/38.jpg)
Example 6
38
![Page 39: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/39.jpg)
Example 6
39
![Page 40: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/40.jpg)
Example 6
40
![Page 41: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/41.jpg)
Two Part Texture Mapping
• Different approaches for mapping the texture from the intermediate surface to the object, e.g.:� Reflected ray� Object normal � Object centroid� Intermediate surface normal
41
![Page 42: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/42.jpg)
Example 8
42Different mappings for a cylinder intermediate surface
![Page 43: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/43.jpg)
Aliasing
• Point sampling of the texture can lead to aliasing errors
point samples in u,v (or x,y,z) space
point samples in texture space
miss blue stripes
![Page 44: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/44.jpg)
Area Averaging
A better but slower option is to use area averaging
Note that preimage of pixel is curved
pixelpreimage
![Page 45: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/45.jpg)
Processo de Mapeamento de Texturas
• Projeção do pixel sobre a superfície� Pontos da superfície
correspondentes aos vértices do pixel
• Parametrização� Coordenadas paramétricas
dos vértices do pixel projetados
• Mapeamento inverso� Coordenadas dos vértices
no espaço de textura• Média
� Cor média dos “Texels” proporcional à área coberta pelo quadrilátero
uv
s
t
i
j
Tvis T
T-1vis * T-1
pixel
texel
45
![Page 46: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/46.jpg)
Texture Mapping and the OpenGL Pipeline
geometry pipelinevertices
pixel pipelineimage
rasterizer
• Images and geometry flow through separate pipelines that join at the rasterizer� “complex” textures do not affect geometric
complexity
![Page 47: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/47.jpg)
Basic Stragegy
Three steps to applying a texture1. specify the texture
• read or generate image• assign to texture• enable texturing
2. assign texture coordinates to vertices• Proper mapping function is left to application
3. specify texture parameters• wrapping, filtering
![Page 48: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/48.jpg)
Texture Mapping
s
t
x
y
z
image
geometry display
![Page 49: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/49.jpg)
Texture Example
• The texture (below) is a 256 x 256 image that has been mapped to a rectangular polygon which is viewed in perspective
![Page 50: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/50.jpg)
Mapeamento de Texturas em Polígonos
• Polígonos são freqüentemente usados para representar fronteiras de objetos
• Em OpenGL, além das coordenadas dos vértices e do vetor normal, é possível também especificar coordenadas de textura:glBegin (GL_POLYGON);
glNormal3fv (N);
glTexCoord2fv (T);
glVertex3fv (V);
...
glEnd ();50
![Page 51: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/51.jpg)
Mapeamento de Texturas em Polígonos
• A maneira mais simples e rápida:� Projetar os vértices do polígono na imagem� A cada vértice projetado Pi corresponde um
ponto Qi no espaço de textura� Um pixel P do polígono na imagem é dado
por uma combinação afim. Ex.:P = α1P1 + α2P2 + α3P3
� Pixel P é pintado com a cor do texel obtido com a mesma combinação afim. Ex.:
Q = α1Q1 + α2Q2 + α3Q3
51
![Page 52: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/52.jpg)
Mapeamento de Texturas em Polígonos• Problemas da abordagem
simples:� Aliasing
• Pixel <≠> Texel• Soluções:
– Interpolação – Mip-mapping
� Deformação• Combinações afim não
são preservadas em projeções perspectivas
• Soluções:– Mais vértices– Coordenadas
homogêneas
52
![Page 53: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/53.jpg)
Mapeamento de Texturas em OpenGL
1. Ligar o mapeamento de texturas� glEnable(GL_TEXTURE_2D);
2. Especificar a textura� Usar glTexImage2D que tem o formato
void glTexImage2D (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border,
GLenum format, GLenum type, const GLvoid *pixels);
� Exemplo:
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, 128, 128, 0, GL_RGBA, GL_UNSIGNED_BYTE, img);
53
![Page 54: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/54.jpg)
Mapeamento de Texturas em OpenGL
3. Configurar diversos parâmetros� Modos de filtragem
• Magnificação ou minificação• Filtros mipmap de minificação
� Modos de repetição de padrões• Cortar ou repetir
� Funções de aplicação de textura• Como misturar a cor do objeto com a da textura
– Misturar, modular ou substituir texels
4. Especificar coordenadas de textura� Por vértice
• glTexCoord*� Coordenadas computadas automaticamente
• glTexGen*
54
![Page 55: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/55.jpg)
• Imagem de textura normalmente carregada a partir de um array de texels na memória principal� glTexImage2D( target, level, components,
w, h, border, format, type, *texels );
� Tamanho da imagem tem ser potência de 2• Cores dos texels são processadas pela parte
do pipeline que processa pixels� Boa parte do repertório de operações sobre
bitmaps pode ser usada
Especificando imagem de textura CPU DL
Poly. PerVertex
Raster Frag FB
Pixel
Texture
55
![Page 56: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/56.jpg)
Convertendo Imagem de Textura
• Se o tamanho da imagem não é uma potencia de 2• gluScaleImage( format, w_in, h_in,
type_in, *data_in, w_out, h_out,type_out, *data_out );
� *_in = imagem original
� *_out = imagem destino
• Imagem é interpolada e filtrada durante a escala
56
![Page 57: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/57.jpg)
Outros métodos para especificar texturas
• Usar o frame buffer como fonte da imagem de texturaglCopyTexImage1D(...)glCopyTexImage2D(...)
• Modificar parte de uma textura pré-definidaglTexSubImage1D(...)glTexSubImage2D(...)glTexSubImage3D(...)
57
![Page 58: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/58.jpg)
• Baseado em coordenadas paramétricas de textura• Chamar glTexCoord*() para cada vértice
s
t 1, 10, 1
0, 0 1, 0
(s, t) = (0.2, 0.8)
(0.4, 0.2)
(0.8, 0.4)
A
B C
a
bc
Espaço de Textura Espaço do Objeto
Mapeando aTextura CPU DL
Poly. PerVertex
Raster Frag FB
Pixel
Texture
58
![Page 59: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/59.jpg)
Gerando Coordenadas de Texturas Automaticamente
• Habilitar a geração automática de coordenadas de texturaglEnable (GL_TEXTURE_GEN_{STRQ});
• Especificar parâmetrosvoid glTexGen {ifd} (GLenum coord, GLenum pname, TYPE param);void glTexGen {ifd}v (GLenum coord, GLenum pname, TYPE *param); � Qual coordenada de textura?
• Coord = GL_S / GL_T / GL_R / GL_Q
� Plano de referência • Pname = GL_OBJECT_PLANE / GL_EYE_PLANE
• Param = coeficientes A/B/C/D do plano� Modos de geração de coordenadas
• Pname = GL_TEXTURE_GEN_MODE
• Param = GL_OBJECT_LINEAR / GL_EYE_LINEAR / GL_SPHERE_MAP
59
![Page 60: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/60.jpg)
Geração Automática de Coordenadas de Textura
GL_EYE_LINEAR
60
![Page 61: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/61.jpg)
Geração Automática de Coordenadas de Textura
GL_OBJECT_LINEAR
61
![Page 62: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/62.jpg)
Filtragem
Textura Polígono
Magnificação Minificação
PolígonoTextura
Exemplo:glTexParameteri( target, type, mode );
GL_TEXTURE_2DGL_TEXTURE_1D
GL_TEXTURE_MAG_FILTERGL_TEXTURE_MIN_FILTER
GL_NEAREST GL_LINEAR
GL_NEAREST_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_NEARESTGL_LINEAR_MIPMAP_LINEAR
62
![Page 63: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/63.jpg)
Texturas Mipmap
Textura original
Imagens minificadaspré-filtradas
63
![Page 64: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/64.jpg)
Texturas Mipmap
• Permite que texturas de diferentes níveis de resolução sejam aplicadas de forma adaptativa
• Reduz aliasing devido a problemas de interpolação• O nível da textura na hierarquia mipmap é especificada
durante a definição da texturaglTexImage*D( GL_TEXTURE_*D, level, … )
• GLU possui rotinas auxiliares para construir texturas mipmap com filtragem adequadagluBuild*DMipmaps( … )
• OpenGL 1.2 suporta facilidades mais sofisticadas para níveis de detalhe (LOD)
64
![Page 65: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/65.jpg)
Modos de Repetição
• Exemplo:glTexParameteri( GL_TEXTURE_2D,
GL_TEXTURE_WRAP_S, GL_CLAMP )
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT )
textura
s
t
GL_CLAMPGL_REPEAT
65
![Page 66: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/66.jpg)
Modos de Aplicação de Textura
• Controla como a cor da textura afeta a cor do pixelglTexEnv{fi}[v]( GL_TEXTURE_ENV, prop, param )
• Modos (prop = TEXTURE_ENV_MODE)� GL_MODULATE
� GL_BLEND
� GL_REPLACE
• Cor a ser misturada (GL_BLEND)� Especificada com prop = GL_TEXTURE_ENV_COLOR
66
![Page 67: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/67.jpg)
Correção Perspectiva
• Mapeamento de texturas em polígonos pode ser feito:� Da forma simples e rápida (interpolação linear)� Usando interpolação em coordenadas homogêneas
• Comportamento do OpenGL é influenciado por “dicas” (“hints”)
glHint( GL_PERSPECTIVE_CORRECTION_HINT, hint )
onde hint pode ser • GL_DONT_CARE
• GL_NICEST
• GL_FASTEST
• O OpenGL não necessariamente obedece!67
![Page 68: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/68.jpg)
Outras Facilidades
• Objetos de Textura (Texture Objects)� Permite mudar rapidamente de texturas durante a
renderização de diversos objetos• Controle de espaço na memória de texturas
� Texturas residentes na placa são mais rápidas• Multitexturas (Extensões OpenGL)
� Placas + modernas (NVidia GeForce /ATI Radeon)� Mais de uma textura mapeada no mesmo objeto� Permite uma série de efeitos interessantes
• Shadow mapping• Bump mapping
68
![Page 69: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/69.jpg)
Other Approaches
• Environment mapping: simulates the reflection of the environment (e.g. lighting, reflections, shadows) on the surface of an object� Blinn & Newell 1976
• Assumes scene environment composed of objects and lights that are far distant from the object being textured.
69
![Page 70: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/70.jpg)
Environment Mapping
• One (or multiple) images of the environment are mapped to the inside of a bounding sphere or box.
• Example: six images of the environment produced from the appropriate viewpoints are mapped to the sides of the box.
70
![Page 71: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/71.jpg)
Example 9
71
![Page 72: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/72.jpg)
Example 9
72
![Page 73: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/73.jpg)
Environment Mapping
• Could use a sphere as the bounding mapping surface
• Distortion relative to ray tracing increases with the size of the object and its distance from the viewer.
• Limited capabilities compared to ray tracing, but computationally much less expensive...
73
![Page 74: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/74.jpg)
Reflection Mapping
• Simulates a global illumination model in scan line rendering. � Scene is rendered from the view point of the surface
to be mapped. � Next, this image is turned into a texture map, which
is then mapped to the specular surface.
• Does a "one bounce" reflection, unlike true global illumination algorithms, such as ray tracing.
• Example from http://www.education.siggraph.org/materials/HyperGraph/mapping/
74
![Page 75: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/75.jpg)
Example 10
75
![Page 76: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/76.jpg)
Bump Mapping
• Bump mapping alters the surface of an object so that it appears non-smooth: rough, dented or pitted.
• Example from http://www.education.siggraph.org/materials/HyperGraph/mapping/
76
![Page 77: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/77.jpg)
Example 11
77
![Page 78: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/78.jpg)
Bump Mapping
• We visually detect bumps in a surface by the relative darkness or lightness of the surface feature.
• Rough surfaces have a small random component in the surface normal, and hence in the light reflection direction
• In local illumination models, this is primarily determined by the diffuse reflection term� proportional to N*L.
78
![Page 79: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/79.jpg)
Bump Mapping
• J. Blinn suggested an approach to perturbe the surface normal when applying the illumination model� Effect is creating spots of darkness or
brightness.
nnQP
nQnP
nn uvvur
rr
r
rrrr )()(
'⊗+⊗+=
79
![Page 80: Mapeamento de Texturas 2D - USPwiki.icmc.usp.br/images/5/5a/Texturas2D.pdf · 2018-09-25 · Função de Mapeamento • Retorna o ponto do objeto correspondente a cada ponto do espaço](https://reader034.fdocumentos.com/reader034/viewer/2022050315/5f77c4a0deecde5f0019f56f/html5/thumbnails/80.jpg)
Normal mapping
http://www.3dkingdoms.com/tutorial.htm
80