computação gráfica i - inícioesdras/ck090_2007/notasdeaula/capitulo05.pdf · 5.1 visualização...

94
Computação Gráfica I Computação Gráfica I CRAb – Grupo de Computação Gráfica Departamento de Computação UFC

Upload: ngodieu

Post on 21-Sep-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

Computação Gráfica IComputação Gráfica I

CRAb – Grupo de Computação Gráfica

Departamento de ComputaçãoUFC

Objetivos

• Estudar – equipamentos, técnicas de programação e conceitos matemáticos

• Para

2

• Para– representação, manipulação e projeção de objetos bi- e tridimensionais– aplicar a problemas específicos

Sumário do Curso

• Sistemas Gráficos e Modelos• Programação Gráfica• Input e Interação• Objetos Geométricos e Transformações

3

• Objetos Geométricos e Transformações• Visualização• Pintura• Técnicas Discretas• Implementação de um Renderizador

5. Visualização5. Visualização

5.1 Visualização Clássica e Computacional

5.1.0 Ingredientes– Objeto a ser projetado • Representado no frame da câmera

– Plano de projeção• Equação: n . x = d →→→→ nxx + nyy + nz z= d

5

• Equação: n . x = d →→→→ nxx + nyy + nz z= d– Centro de projeção (COP)• Origem do frame da câmera

– Raio de projeção• Conecta um ponto do objeto ao centro de

projeção• Intercepta o plano de projeção• Equação paramétrica: P(αααα) = P + αααα u

5.1 Visualização Clássica e Computacional

– Quando o COP se desloca para o infinito• O vetor u (direção de projeção – DOP) dos

raios de projeção ficam idênticos– Raios de projeção paralelos

6

COP

Perspectiva Paralela

Projeções Geométricas Planares

5.1 Visualização Clássica e Computacional

5.1.1 Visualização clássica– Utiliza a noção de Face Principal– Utilizada em arquitetura e desenho

técnico

7

técnico– Visões• Frontal (F)• Posterior (P)• Lateral direita (LD)• Lateral esquerda (LE)• Inferior (I)• Superior (S)

F PLDLE

I

S

5.1 Visualização Clássica e Computacional

• Tipos de vistas

8

5.1 Visualização Clássica e Computacional

5.1.2 Projeções ortográficas– Projeção paralela– Raios de projeção perpendiculares ao

plano de projeção

9

plano de projeção

5.1 Visualização Clássica e Computacional

5.1.3 Projeções axonométricas– Projeção ortográfica especial• Vetor normal ao plano de projeção forma– Ângulos iguais com os eixos x, y e z: Isométrica– Ângulos iguais com dois eixos: Dimétrica

10

– Ângulos iguais com dois eixos: Dimétrica– Ângulos diferentes com os eixos x, y e z: Trimétrica

5.1 Visualização Clássica e Computacional

5.1.3 Projeções axonométricas

11

5.1 Visualização Clássica e Computacional

5.1.4 Projeções oblíquas– Projeção paralela mais geral– Raios de projeção formam ângulo

arbitrário com o plano de projeção

12

arbitrário com o plano de projeção– Se o ângulo for 45o: Projeção Cavaleira

(cavalier)– Se o ângulo entre a direção de projeção e

a normal ao plano for θθθθ = tg-1(1/2): Projeção Cabinet

5.1 Visualização Clássica e Computacional

– Projeções oblíquas

13

5.1 Visualização Clássica e Computacional

5.1.5 Visão em perspectiva– Diminuição do tamanho dos objetos mais

afastados do plano de projeção– Não permite tirar medidas

14

– Não permite tirar medidas– Adequada para visões realistas em

arquitetura e animação

5.1 Visualização Clássica e Computacional

– Objetos mais distantes do plano de visão têm projeções menores que os mais próximos de mesmo tamanho

Ponto de Fuga

15

Fuga

5.1 Visualização Clássica e Computacional

– Perspectiva com um ponto de fuga• Uma face paralela ao plano de projeção• Linhas perpendiculares ao plano de projeção são projetadas como linhas convergentes em um ponto (ponto de fuga)

16

um ponto (ponto de fuga)

Ponto de fuga

5.1 Visualização Clássica e Computacional

– Perspectiva com dois pontos de fuga• Há linhas paralelas ao plano de projeção• Há linhas paralelas que pertencem a faces oblíquas ao plano de projeção– são projetadas como linhas convergentes para dois

17

– são projetadas como linhas convergentes para dois pontos de fuga

Ponto de fuga 1

Ponto de fuga 2

5.1 Visualização Clássica e Computacional

– Perspectiva com três pontos de fuga• Há linhas paralelas que pertencem a três faces oblíquas ao plano de projeção– são projetadas como linhas convergentes para três pontos de fuga

18

Ponto de fuga 1 Ponto de

fuga 2

Ponto de fuga 3

5.2 Visualização computacional

• Com o OpenGL escolhemos visão– Perspectiva ou– Ortográfica

• Qualquer visão clássica pode ser

19

• Qualquer visão clássica pode ser obtida com o posicionamento adequado da câmera

• C ←←←← CProjectionCModel_View

vértices CModel_View CProjection vértices

5.3 Posicionamento da câmera (A20)

5.3.1 Posicionamento do frame da câmera– Default: Frame da câmera coincide com o

frame do mundox

20

-zc

xc=xw

yc=ywzc=zw

w

xw

yw

zw

c

zc

xc

ycCâmera

5.3 Posicionamento da câmera (A20)

– Exemplos simples de posicionamento do frame da câmera• Exemplo 1: Câmera na posição C = (0, 0, d)– Construir a matriz que muda de coordenadas do

mundo para coordenadas da câmera

0001

21

– Carregar essa matriz com o comando glLoadMatrixf(T); (Essa matriz é equivalente à gerada com o comando glTranslatef(0.0, 0.0, -d)

−=

1000

100

0010

0001

dT

zc

ycyw

zw

P

5.3 Posicionamento da câmera (A20)

• Exemplo 2: Câmera na posição C = (d, 0, 0)Apontando para a origem– Construir a matriz que muda de coordenadas do

mundo para coordenadas da câmera

−001 dxc

22

=

=

1000

0001

0010

0100

1000

0100

0010

001

R

T

d

zc

ycyw

xw

zw

glLoadMatrixf(R);glMultMatrixf(T);Desenha cenário;

5.3 Posicionamento da câmera

• Exemplo 2: continuação... – A operação é equivalente a» Deixar a câmera fixa» Girar o cenário de -90 graus» Transladar o cenário de (0, 0, -d)

xx

23

glLoadIdentity();glTranslatef(0.0, 0.0, -d);glRotatef(-90.0, 0.0, 1.0, 0.0);Desenha cenário;

zc

ycyw

xw

xc

zw

xw

zw

-90o

-d

5.3 Posicionamento da câmera (A20)

• Exemplo 3: Câmera na posição C = (d/√√√√3, d/ √√√√ 3, d/ √√√√ 3)apontando para a origem (visão isométrica)– Construir a matriz que muda de coordenadas do

mundo para coordenadas da câmera

24

−−

=

=

1000

03

13

13

1

06

16

26

1

02

102

1

10003

100

3010

3001

R

T

d

d

d

glLoadMatrixf(R);glMultMatrixf(T);Desenha cenário;

5.3 Posicionamento da câmera (A20)

5.3.2 Duas APIs de visualização– PHIGS e GKS3D– View-reference point (VRP): Localização

da câmera

25

da câmera• set_view_reference_point (x, y, z);

– View-plane normal (VPN): orientação da direção –z da câmera• set_view_plane_normal(nx, ny, nz);

– View-up vector: Vetor auxiliar para definir o eixo y da câmera• set_view_up(vup_x, vup_y, vup_z);

5.3 Posicionamento da câmera (A20)

5.3.3 A função Look-At– Eye point: Posição da câmera em

coordenadas do mundo– At point: Ponto para onde a câmera aponta• vpn = e – a

26

• vpn = e – a

– Up direction: direção do top da câmera– Seqüência

glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(eyex, eyey, eyez, atx, aty, atz, upx, upy,

upz);Desenhe objeto aqui

5.3 Posicionamento da câmera (A20)

5.3.4 Outras APIs de visualização– Simulador de vôo usa • Pitch • Yaw z

27

• Roll

xy

5.3 Posicionamento da câmera (A20)

– Transformação de Pitch (Rotação em x)• De: sistema de coordenadas do avião antes • Para: sistema de coordenadas do avião depois

0001

28

( ) ( )( ) ( )

Pitch

Antes

PP

PPPitch

Depois

1000

0θcosθsen-0

0θsenθcos0

0001

PP

=

5.3 Posicionamento da câmera (A20)

– Transformação de Yaw (Rotação em y)• De: sistema de coordenadas do avião antes • Para: sistema de coordenadas do avião depois

( ) ( )RR 0θsen-0θcos

29

( ) ( )

( ) ( )Yaw

Antes

RR

RR

Yaw

Depois

1000

0θcos0θsen

0010

0θsen-0θcos

PP

=

5.3 Posicionamento da câmera (A20)

– Transformação de Roll (Rotação em z)• De: sistema de coordenadas do avião antes • Para: sistema de coordenadas do avião depois

( ) ( )RR 00θsenθcos

30

( ) ( )( ) ( )

Roll

Antes

RR

RR

Roll

Depois

1000

0100

00θcosθsen

00θsenθcos

PP

=-

5.3 Posicionamento da câmera (A20)

5.3.4 Outras APIs de visualização(cont…)– Orientação geográfica• Azimute• Elevação

31

• Ângulo de torção

N

S

LO

θaz θaz

θel

θt

xz

x

z

y y

5.3 Posicionamento da câmera (A20)

– Transformação de Azimute (Rotação -y)• De: sistema de coordenadas anterior• Para: sistema de coordenadas depois

( ) ( )AzAz 0θsen0θcos

32

( ) ( )Azimute

Antes

AzAz

Azimute

Depois

1000

0θcos0θsen-

0010PP

=

5.3 Posicionamento da câmera (A20)

– Transformação de Elevação (Rotação x)• De: sistema de coordenadas antes• Para: sistema de coordenadas depois

0001

33

( ) ( )( ) ( )

Elevação

Antes

elel

elelElevação

Depois

1000

0θcosθsen-0

0θsenθcos0

0001

PP

=

5.3 Posicionamento da câmera (A20)

– Transformação de torção (Rotação -z)• De: sistema de coordenadas antes • Para: sistema de coordenadas depois

( ) ( )tt 00θsen-θcos

34

( ) ( )( ) ( )

Torção

Antes

tt

tt

Torção

Depois

1000

0100

00θcosθsen

00θsen-θcos

PP

=

5.4 Projeções simples (A21)

5.4.1 Projeções perspectiva

-z

y Projetor

z

P

P’COP

35

OBSERVAÇÃO: d é o produto escalar de um ponto do plano de projeção com o vetor normal ao plano.

Logo, d TEM SINAL

-z

d

Plano de Projeção

z COP

5.4 Projeções simples (A21)

– P = (x, y, z): Ponto a ser projetado– P’ = (x’, y’, z’): Projeção do ponto P– Equação do plano de projeção: n . X* = d• (0, 0, 1) . (x*, y*, z*) = z* = d

36

– Equação do projetor: P(αααα) = P(1 – αααα)– P’ é a interseção do projetor com o plano

z’ = d = z(1 – αααα’) →→→→ αααα’ = 1 - d/zx’ = x (1 – αααα’) = x (d/z) = x / (z/d)y’ = y (1 – αααα’) = y (d/z) = y / (z/d)

5.4 Projeções simples (A21)

– Em coordenadas homogêneas um ponto (x, y, z) ∈∈∈∈ R3 é representado por (w x, w y, w z, w)

– Assim

⋅1 x

37

=→∈

=

=→∈

=

)/(

')//(

)//(

'

1

1

1

1

3

3

dz

z

y

x

d

dzy

dzx

z

y

x

z

y

x

h

h

PRP

PRP

5.4 Projeções simples (A21)

– Projeção perspectiva em coordenadas homogêneas

hhPMP aPerspectiv

z

y

x

z

y

x

=

=

=0100

0010

0001

'

38

– No R3 →→→→ P’ = P’h/w • Cada ponto tem seu w• Todo ponto com o mesmo z tem o mesmo w

hhPMP aPerspectiv

z

ddz

z=

=

=

10/100

0100

)/(

'

P CModel_View CProjection P’Divisãopor w

5.4 Projeções simples (A21)

5.4.2 Projeções ortográficas– Projetores paralelos – Projetores perpendiculares ao plano de

projeção • Direção projetores = vetor normal ao plano

39

• Direção projetores = vetor normal ao plano• P(αααα) = P + ααααn

– P’ é a interseção do projetor com o planoz’ = d = z + αααα’ 1 →→→→ αααα’ = d - zx’ = x + (d - z) 0 = xy’ = y + (d - z) 0 = y

5.4 Projeções simples (A21)

– Projeção ortográfica em coordenadas homogêneas

hhPMP aOrtográfic

z

y

x

dd

y

x

=

=

=000

0010

0001

'

40

– No R3 →→→→ P’ = P’h/w (w = 1)

hhPMP aOrtográfic

zdd=

=

=

11000

000

1

'

P CModel_View CProjection P’Divisãopor 1

5.5 Projeções no OpenGL (A21)

5.4.1 Perspectiva no OpenGL

41

Ângulo de visão

Frustum: Planos de corte

5.5 Projeções no OpenGL (A21)

• Comando para definição do volume de visualização (Frustum)

glFrustum(xmin, xmax, ymin, ymax, near, far)

42

Observação 1: Sempre entrar near > 0 e far > 0

Observação 2: Frustum pode ser assimétrico

5.5 Projeções no OpenGL (A21)

glMatrixMode(GL_PROJECTION);glLoadIdentity();

glFrustum(xmin, xmax, ymin, ymax, near, far);

43

5.5 Projeções no OpenGL (A21)

• Outra alternativa (glut)gluPerspective(fov, aspect, near, far);

44

aspect =w/h no plano de projeção

5.5 Projeções no OpenGL (A21)

• Outra alternativa (glut)gluPerspective(fov, aspect, near, far);• fov: ângulo de abertura vertical em graus

entre 0 e 180 abertura entre planos superior e inferior

45

abertura entre planos superior e inferior• aspect: w/h da janela no plano de projeção• near > 0: distância do plano de corte anterior• far >0: distância do plano de corte posterior

– O frustum criado é simétrico • Tronco de pirâmide reto

5.5 Projeções no OpenGL (A21)

5.4.2 Projeções paralelas no OpenGL

46

5.5 Projeções no OpenGL (A21)

• Comando para definição do volume de visualização

glOrtho(xmin, xmax, ymin, ymax, near, far);

47

5.5 Projeções no OpenGL (A21)

glMatrixMode(GL_PROJECTION);glLoadIdentity();

glOrtho(xmin, xmax, ymin, ymax, near, far);

48

5.5 Projeções no OpenGL (A21)

glOrtho(xmin, xmax, ymin, ymax, near, far);• Paralelepípedo pode ser posicionado em qualquer lugar do espaço da câmera• near e far podem ser positivos ou negativos

y

49

y

z -z

near >0

far >0

near < 0

far < 0

View

point

zbufferzbuffer

5.5 Projeções no OpenGL (A21)

y

z -z

near > 0

far < 0

View

point NearFar

y

z -z

near < 0

far > 0

View

point FarNear

50

z -z

zbuffer

z -z

zbuffer

5.6 Remoção de superfícies ocultas

5.6.0 Categorias de algoritmos– Remoção de superfícies ocultas• Elimina as superfícies que não podem ser

vistas pelo observador• Algoritmos de Espaço-do-Objeto

51

• Algoritmos de Espaço-do-Objeto• Algoritmos de Espaço-da-Imagem

– Identificação de superfícies visíveis• Encontra as superfícies que são visíveis pelo

observador

– OpenGL usa o algoritmo z-buffer• Algoritmo Espaço-da-Imagem

5.6 Remoção de superfícies ocultas

– Algoritmos de Espaço-do-Objeto• Ordenam as superfícies dos objetos da cena• Processam a pintura das superfícies em uma

ordem específica– Exemplo: Cubo

52

– Exemplo: Cubo» Faces posteriores pintadas primeiro» Faces anteriores pintadas por cima

• Não funcionam bem em pipeline pois os objetos são passados em ordem arbitrária

• Precisam de todos os objetos para poder ordená-los

5.6 Remoção de superfícies ocultas

– Algoritmos de Espaço-da-Imagem• Funcionam como parte do processo de

projeção• Determinam a relação entre os pontos dos

objetos em cada projetor• Z-buffer

53

• Z-buffer– Tem a mesma resolução espacial do color-buffer– Resolução de profundidade 16, 24 ou 32 bits– No OpenGL o z-buffer é um dos buffers que

constituem o frame-buffer– Inicializado com a maior distância ao observador– Modficado com as distâncias dos pontos mais

próximos do observador

5.6 Remoção de superfícies ocultas

– Z-buffer

Plano de projeção

Z-buffer inicializado

Color buffer inicializado

21

54

COP

z1 z2

Modificado zs triângulo

Modificado cor triângulo

Modificado zs da esfera

Modificado cor da esfera

21

2

3

4

4

5.6 Remoção de superfícies ocultas

– Comandos para habilitar o z-bufferglutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB

| GLUT_DEPTH);

glEnable(GL_DEPTH_TEST);

55

glClear(GL_DEPTH_BUFFER_BIT);

5.6 Remoção de superfícies ocultas

5.6.1 Culling– Remove as faces cujas normais apontam

na direção oposta do observador– Culling é suficiente para objeto convexo

56

– Culling é suficiente para objeto convexo • Se objeto estiver só no cenário

– No OpenGL basta habilitar o processoglEnable(GL_CULL_FACE);

– Se a cena for complexa, utilizar culling combinado com z-buffer

5.7 Andando por um cenário

• Comando gluLookAt posiciona a câmeragluLookAt(vrpx, vrpy, vrpz, atx, aty, atz, upx, upy, upz);

• keyboard callback incrementa ou decrementa componentes do vrpX incrementa vrp Y

57

X incrementa vrpxY incrementa vrpyZ incrementa vrpzx decrementa vrpxy decrementa vrpyz decrementa vrpz

Xx

Y

y

Z

z

5.7 Andando por um cenário

•Keyboard callbackvoid keyboard(unsigned char key, int mousex, int mousey){if(key=='q' || key =='Q') exit(0);if(key=='x')viewer[0] -= 1.0;

Y

z

58

if(key=='x')viewer[0] -= 1.0;if(key=='X')viewer[0] += 1.0;if(key=='y')viewer[1] -=1.0;if(key=='Y')viewer[1] += 1.0;if(key=='z')viewer[2] -= 1.0;if(key=='Z')viewer[2] += 1.0;glutPostRedisplay();

}

Xx

y

Z

z

Código Fonte Código Exec

5.8 Matrizes de projeções paralelas

5.8.1 Normalização da projeção– Toda projeção é convertida em projeção

ortográfica• Distorcer objetos

Distorcer(Normalizar)

Projeçãoortográfica

59

• Projeção ortográfica do objeto distorcido é igual à projeção desejada

COP

Perspectiva Ortográfica

5.8 Matrizes de projeções paralelas

5.8.2 Matrizes de projeções ortogonais– Decompor projeção em duas partes• Conversão do volume de visualização em um

volume padrão– Preserva profundidade

60

– Preserva profundidade– Utilizado para clipping– Utilizado para eliminação de superfícies ocultas

• Eliminação da coordenada z (projeção ortográfica)

– OpenGL diferencia• Screen coordinates (coordenadas de tela): 2D• Window coordinates: 3D

5.8 Matrizes de projeções paralelas

– Volume de visualização canônico• Cubo 2 x 2 x 2 centrado na origem– x = ± 1– y = ± 1– z = ± 1

61

– z = ± 1

• Default do OpenGLglMatrixMode(GL_PROJECTION);glLoadIdentity();glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);

y

z -z

near < 0

far > 0

View

point FarNear

5.8 Matrizes de projeções paralelas

– Volume de visão definido por glOrthoglOrtho(xmin, xmax, ymin, ymax, near, far);

(xmin, ymin, zmax)

(xmax, ymax, zmin)y

62

zmin = -near

zmax = -far

(xmin, ymin, zmax)

x

y

z

x

z

5.8 Matrizes de projeções paralelas

– Transformar coordenadas • Para sistema paralelo ao da câmera, passando

pelo centro do volume de visualizaçãocentro = ( (xmin+xmax)/2,

(ymin+ymax)/2,

63

(zmin+zmax)/2 )

– Aplicar escala nos três eixos • para que o volume de visualização fique

2x2x2 (volume canônico)sx = 2/(xmax – xmin)sy = 2/(ymax – ymin)sz = 2/(zmax – zmin)

5.8 Matrizes de projeções paralelas

– Matriz de transformação concatenada• M = ST

+−

−+

−−

2

002

minmax

minmax

minmax

yy

xx

xx

xx

64

[ ][ ]

−+

−−

−+

−−==

1000

200

02

0

minmax

minmax

minmax

minmax

minmax

minmax

zz

zz

zz

yy

yy

yyTSM

5.8 Matrizes de projeções paralelas

– Matriz de transformação concatenada• M = ST

+−

−+

−−

02

0

002

minmax

minmax

minmax

minmax

yy

xx

xx

xx

65

−+

−+

−−=

1000

200

02

0minmax

minmax

minmax

nearfar

nearfar

nearfar

yy

yy

yyM

5.8 Matrizes de projeções paralelas

5.8.3 Projeções obliquas– D: vetor unitário que define a direção de

projeção (coordenadas de câmera)– Projetores são paralelos a D

66

– Projetores são paralelos a D– Algumas arestas do volume de

visualização são paralelas a D– Aplicar cisalhamento nas direções x e y

para que os projetores fiquem perpendiculares ao plano xy

5.8 Matrizes de projeções paralelas

– Fatores de cisalhamento• SHx= - Dx/Dz

• SHy= - Dy/Dz xy

67

D

Dx

Dy

x z

y

Dy

Dz

5.8 Matrizes de projeções paralelas

– Matrizes de cisalhamento concatenadas

=0100

0SH10

0SH01

y

x

xySH

68

– Normalização[M] = [S][T][SHxy]

=

1000

0100xySH

Observação: Os valores xmin, xmax, ymin, ymaxusados em [S] e [T] são definidos pela janela no plano de projeção

5.9 Matrizes de projeções perspectivas

5.9.1 Normalização da perspectiva– Volume de visualização: pirâmide não-

reta• Cisalhamento xy: pirâmide reta

69

• Escala nas direções x e y: laterais da pirâmide reta formam ângulos de 45 graus com os planos xz e yz

zx

zx

zx

Cisalhamento Escala

5.9 Matrizes de projeções perspectivas

Cisalhamento xy

70

Escala x e y

5.9 Matrizes de projeções perspectivas

– Matriz de projeção em perspectiva sobre o plano z=-1• x’ = -x/z• y’ = -y/z• z’ = -z/z

P

z=-1

71

• z’ = -z/z

=

=

=

z

z

y

x

z

y

x

W

Z

Y

X

1'

'

'

'

0100

0100

0010

0001

MM

Observação: Todos os pontos sobre o projetor têma mesma imagem x’. M é singular

5.9 Matrizes de projeções perspectivas

– Construir matriz não singular N

+=

=

=

z

z

y

x

z

y

x

W

Z

Y

X

βαβα1'

'

'

'

0100

00

0010

0001

MN

72

+−=

−=

−=

zz

zyy

zxx

zW

βα'

/'

/'

1'0100

5.9 Matrizes de projeções perspectivas

– Considere volume de visualização• Pirâmide reta• Planos laterais inclinados 45 graus: x=±z, y=±z y

73

Pl. Projeçãoz=-1

zmin=-far

zmax=-near

zz

y

zmin=-1

zmax=1

Escolherαααα e ββββ

5.9 Matrizes de projeções perspectivas

– Escolha de αααα e β β β β ( )( )

±=−=

±=−=

−=

−=

+

1/'

1/'

/'

/' zzy

zzx

zyy

zxx

z

y

x

ββα

m

m

74

−=

−+

−=⇒

=+

−=+

±=

+−=

+−=

−=⇒

+

minmax

minmax

minmax

minmax

min

max

min

max

21

1

1'

'

/'

zz

zz

zz

zz

z

z

z

zz

zz

zyy

z

z

β

α

βα

βα

βα

βα

βα

5.9 Matrizes de projeções perspectivas

5.9.2 Transformações de perspectiva no OpenGL–– CisalhamentoCisalhamento: transforma o frustum em

pirâmide reta

75

–– EscalaEscala: transforma em pirâmide canônica • Faces laterais formam 45 graus com os planos

xz e yz

–– NormalizaçãoNormalização: garante que depois da divisão por w o volume de visualização transforma-se no cubo canônico (2××××2××××2)

5.9 Matrizes de projeções perspectivas

5.9.2 Transformações de perspectiva no OpenGL–– CisalhamentoCisalhamento: transforma o frustum em

pirâmide reta

76

–– EscalaEscala: transforma em pirâmide canônica • Faces laterais formam 45 graus com os planos

xz e yz

–– NormalizaçãoNormalização: garante que depois da divisão por w o volume de visualização transforma-se no cubo canônico (2××××2××××2)

5.9 Matrizes de projeções perspectivas

– Cisalhamento• Centro da face near, C

++= max

maxminmaxmin ,2

,2

zyyxx

Cnear

far

77

• Fatores, SHx e Shy

max

maxmin

max

maxmin

2SH

2SH

z

yy

z

xx

y

x

+−=

+−=

zmax zmin

z

Projetor

c

∆∆∆∆

5.9 Matrizes de projeções perspectivas

– Implicações dos Fatores de Cisalhamento• Centro da face near, C

C(+,+)C(-,+)y

∆x<0∆x>0

78

C(+,-)C(-,-)

ximax

max

i CC

−=−=∆ zz

∆x>0 ∆x<0

∆y<0∆y<0

∆y>0 ∆y>0

5.9 Matrizes de projeções perspectivas

–Matriz de Cisalhamento

=0SH10

0SH01

y

x

SH

79

=

1000

0100SH

5.9 Matrizes de projeções perspectivas

– Escala nos eixos x e y

maxf

minmaxminmax

max

i

f

near22LS

near22

L

LS

z

xxxx

zx

⋅===

−⋅

=−

==

80

zmax zmin

zLiLf

minmaxminmaxi

f

LS

yyyyy −

=−

==

Observação: Sx e Sy >0 pois1) xmax – xmin > 02) ymax – ymin > 03) near > 0 e far > 0

5.9 Matrizes de projeções perspectivas

–Matriz de Escala

⋅−

near2

000near2

minmax xx

81

−⋅

=

1000

0100

00near2

0minmax yy

S

5.9 Matrizes de projeções perspectivas

– Normalização

−−+

−= 2

00

0010

0001

minmax

minmax

minmax

minmax

zz

zz

zz

zzN

82

−−⋅

−+=

−−−

0100

200

0010

0001

0100minmaxminmax

nearfar

nearfar

nearfar

nearfar

zzzz

N

5.9 Matrizes de projeções perspectivas

Concatenação de transformaçõesMpers= [N][S][SH]

( )( )

( )

+−

+−

−2

002

maxminmax

minmaxmax

minmax

max

yyzz

zxx

xxz

xx

z

83

( )( )

−−−

+−

+−

−=

0100

200

02

0

minmax

minmax

minmax

minmax

maxminmax

minmaxmax

minmax

max

pers

zz

zz

zz

zz

zyy

yyz

yy

z

M

5.9 Matrizes de projeções perspectivas

Concatenação de transformaçõesMpers= [N][S][SH]

( )( )( )

+−+

−2

002

minmax

minmax

minmax

yynear

xx

xx

xx

near

84

( )( )

−−⋅

−+−+

−=

0100

200

02

0minmax

minmax

minmax

minmaxminmax

pers

nearfar

nearfar

nearfar

nearfar

yy

yy

yy

near

M

5.10 Projeções e sombras

• Introdução

– Sombra de um objeto sobre outro

• Cálculo complexo

– Sombra de um objeto sobre um plano

85

– Sombra de um objeto sobre um plano

• Caso trivial de projeção plana

• Depende do tipo de iluminação

– Fonte de luz pontual →→→→ Projeção perspectiva

– Fonte de luz no infinito →→→→ Projeção oblíqua

5.10 Projeções e sombras

• Fonte de luz Pontual em (Lx, Ly, Lz)– Projeção sobre o plano xz (y = 0)

y Fonte Pontual

86

x

z

5.10 Projeções e sombras

• Fonte de luz pontual em (Lx, Ly, Lz)– Projeção sobre o plano yz (x = 0)

−+= )()('

Projetor

LPPP αα

87

=

−−=

−+=

=

−+=

x

xz

xy

xx

x

xxx

L001

0L0L-

00LL-

0000

LP

P

)LP(P0

0 x'Coordenada

)()('

M

LPPP

α

α

αα

5.10 Projeções e sombras

• Fonte de luz pontual em (Lx, Ly, Lz)– Projeção sobre o plano xz (y = 0)

−+= )()('

Projetor

LPPP αα

88

=

−−=

−+=

=

−+=

y

yz

xy

yy

y

yyy

L010

0LL-0

0000

00L-L

LP

P

)LP(P0

0y' Coordenada

)()('

M

LPPP

α

α

αα

5.10 Projeções e sombras

• Fonte de luz pontual em (Lx, Ly, Lz)– Projeção sobre o plano xy (z = 0)

−+= )()('

Projetor

LPPP αα

89

=

−−=

−+=

=

−+=

z

yz

xz

zz

z

zzz

L100

0000

0L-L0

0L-0L

LP

P

)LP(P0

0z' Coordenada

)()('

M

LPPP

α

α

αα

5.10 Projeções e sombras

• Fonte de luz no infinito (Dx, Dy, Dz)– Projeção sobre o plano xz (y = 0)

y D

90

x

z

5.10 Projeções e sombras

• Fonte de luz no infinito (Dx, Dy, Dz)– Projeção sobre o plano yz (x = 0)

+=)('

Projetor

DPP αα

91

=

−=

+=

=

+=

1000

010D

D-

001D

D-

0000

D

P

DP0

0 x'Coordenada

)('

x

z

x

y

x

x

xx M

DPP

α

α

αα

5.10 Projeções e sombras

• Fonte de luz no infinito (Dx, Dy, Dz)– Projeção sobre o plano xz (y = 0)

+=)('

Projetor

DPP αα

92

=

−=

+=

=

+=

1000

01D

D-0

0000

00D

D-1

D

P

DP0

0y' Coordenada

)('

y

z

y

x

y

y

yy M

DPP

α

α

αα

5.10 Projeções e sombras

• Fonte de luz no infinito (Dx, Dy, Dz)– Projeção sobre o plano xy (z = 0)

+=)('

Projetor

DPP αα

93

=

−=

+=

=

+=

1000

0000

0D

D-10

0D

D-01

D

P

DP0

0z' Coordenada

)('

z

y

z

x

z

z

zz M

DPP

α

α

αα

5.10 Projeções e sombras

• Cubo giratório com sombra

Código Fonte

Código Exec

94