Computação Gráfica -...

76
LEI / LCC Departamento de Informática Universidade do Minho Computação Gráfica Computação Gráfica António Ramires Fernandes António Ramires Fernandes – Computação Gráfica 09/10 Computação Gráfica 09/10 Transformações Geométricas

Transcript of Computação Gráfica -...

Page 1: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

LEI / LCC

Departamento de Informática

Universidade do Minho

Computação Gráfica

Computação Gráfica

António Ramires Fernandes António Ramires Fernandes –– Computação Gráfica 09/10Computação Gráfica 09/10

Transformações Geométricas

Page 2: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Vectores

• Magnitude

• Vector Normalizado v

=

222|| zyxv ++=

• Vector Normalizado (magnitude = 1)

• Produto Interno

|| v

vvnorm =

DI-UM Computação Gráfica 09/10 2

∑=

=⋅

3

1

*i

ii uvuv

)cos(|||||||| α××=⋅ uvuv

v u

α

Page 3: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Vectores

• Projecção2|||| n

nvnv

⋅=

v

n v||

v⊥

• Produto Externo

)sin(|||||| α××=×

=

×

uvuv

uvuv

uvuv

uvuv

u

u

u

v

v

v

xyyx

xzzx

yzzy

y

x

y

x

zz

DI-UM Computação Gráfica 09/10 3

n v||

α

u

v

v x u

Page 4: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Escala

• Escala Uniforme– Seja p um ponto e k um escalar,

p’ = kp

yp’

• Escala Não Uniforme– Seja p um ponto e k1,k2 um par de

escalares,

p’ = Kp

yp’

DI-UM Computação Gráfica 09/104

x

p

=

y

x

k

k

y

x

0

0

'

'

kyy

kxx

=

=

'

'equações

forma matricial

x

p

p’

=

y

x

k

k

y

x

2

1

0

0

'

'

yky

xkx

2

1

'

'

=

=equações

forma matricial

Page 5: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Translação

• Seja p um ponto e T um vector,

y

p T

Tpp +='

y’y

DI-UM Computação Gráfica 09/105

x

p

p’

T

Translação do ponto num sistema fixo�

Translação do sistema de coordenadas na direção inversa

p

x’-T x

Page 6: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Rotação

• Rotação em torno da origem

– A direcção da rotação é anti-horária

p

p’

y y

DI-UM Computação Gráfica 09/106

x

pαp

αx

Rotação do ponto num sistema fixo�

Rotação do sistema de coordenadas na direção inversa

Page 7: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Rotação

• Seja p = (a,b) e p’ = (a’, b’)

p

p’

α

y

||)cos(

)sin(|'|'

)cos(|'|'

ω

αω

αω

=

+=

+=

p

a

pb

pa

ω

Trigonometria

DI-UM Computação Gráfica 09/107

x

)sin()cos()cos()sin()sin(

)sin()sin()cos()cos()cos(

||)sin(

αωαωαω

αωαωαω

ω

+=+

−=+

=p

b

−=

b

a

b

a

)cos()sin(

)sin()cos(

'

'

αα

αα

)cos()sin('

)sin()cos('

αα

αα

bab

baa

+=

−=equações

forma matricial

ω

Page 8: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Rotação

• Vejamos qual o resultado de escrevermos o novo sistema de coordenadas em função dos eixos do sistema original

y

))cos(),(sin('

))sin(),(cos('

αα

αα

=

−=

y

x

DI-UM Computação Gráfica 09/108

αx

−=

)cos()sin(

)sin()cos(

αα

ααR

A definição dos eixos do novo sistema (x’,y’) corresponde às

linhas da matriz R

Page 9: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Rotação

• Rotação Inversa

• Se

−=

)cos()sin(

)sin()cos(

αα

ααα

R

• Então

DI-UM Computação Gráfica 09/109

−−

−−−=

−)cos()sin(

)sin()cos(

αα

ααα

R

IRR =− αα

Page 10: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Rotação

• Sabemos que

• Logo

)sin()sin(

)cos()cos(

αα

αα

−=−

=−

• Logo

DI-UM Computação Gráfica 09/1010

TRR

R

αα

ααα

αα

αα

αα

=

−=

−−

−−−=

−)cos()sin(

)sin()cos(

)cos()sin(

)sin()cos(

Page 11: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Composição de Transformações

• Translação + Translação

y Tpp +='

DI-UM Computação Gráfica 09/1011

x

y

p

p’

p’’

T1

T2

T

TpTTpp

Tpp

Tpp

+=++=

+=

+=

21

2

1

''

'''

'

Page 12: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Composição de Transformações

• Rotação + Rotação

p

p’

y

p’α2

yp’’ p’

yp’’

+ =

DI-UM Computação Gráfica 09/1012

x

pα1

x

p

x

pα+ =

pRpRRp

pRp

pRp

⋅=⋅⋅=

⋅=

⋅=

ααα

α

α

12

2

1

''

'''

'

Page 13: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Composição de Transformações

• Rotação + Translação– A ordem das transformações é relevante!

y

p

y

p p’T

y

p p’

p’’α

translação rotação

)('' TpRp +=−α

DI-UM Computação Gráfica 09/1013

x x x

p’’α

x

y

p

x

y

pp’

α p’’

x

y

pp’

α

Ttranslaçãorotação

)('' pRTpα−

+=

Page 14: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Composição de Transformações

• Rotação de p em torno de um ponto arbitrário o

y

p

o

p’

α

DI-UM Computação Gráfica 09/1014

x

p’

Page 15: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Composição de Transformações

• Rotação de p em torno de um ponto arbitrário o

y

p

o

p’

α

y

p

o

T

T

y

p

o

DI-UM Computação Gráfica 09/1015

xo1

p1 p2

α

T

p’

-T

Tpp −= 2'

x

p1

o1T

Tpp +=1

xo1

p1 p2

α

T

12 pRpα

=

TTpRp −+= )('α

Page 16: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Composição de Transformações

• E se quisermos em seguida rodar o resultado p’ em torno de outro ponto arbitrário?

• Sabemos que:

11)('

1TTpRp −+=

α

• Logo:

DI-UM Computação Gráfica 09/1016

22

11

)'(''2

1

TTpRp −+=α

α

2211 )))(((''12

TTTTpRRp −+−+=αα

Page 17: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Coordenadas Homogéneas

• Pretende-se uniformizar a forma das transformações geométricas

• Para tal recorre-se a coordenadas homogéneas.

• Em 2D, um ponto P(X,Y) em coordenadas cartesianas representa-• Em 2D, um ponto P(X,Y) em coordenadas cartesianas representa-se por p(x,y,w) em coordenadas homogéneas,

Sendo

• Por omissão considera-se w = 1

DI-UM Computação Gráfica 09/1017

w

yY

w

xX == ,

Page 18: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Coordenadas Homogéneas

• Pontos com coordenadas homógeneas distintas representam o mesmo ponto 2D

• O ponto em coordenadas cartesianas é obtido dividindo as duas primeiras coordenadas pela

=

wx

w

y

x

P

/

3

w

w=1

P3

P2

cartesianas é obtido dividindo as duas primeiras coordenadas pela última coordenada.

• Para vectores w = 0, porquê? (tip: diferença de pontos)

=

wy

wxP

/

/2

2

6

4

1

3

2

DI-UM Computação Gráfica 09/10 18

x

y

Page 19: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Coordenadas Homogéneas

• Revisitar Transformações Geométricas

– Pontos têm mais uma coordenada, logo rotações e escalas são representadas por matrizes 3x3. Seja p =(x,y,1)

– Escalas– Escalas

DI-UM Computação Gráfica 09/1019

)1,,(

1100

00

00

' 212

1

ykxky

x

k

k

p =

= )1,,(

1100

01

0

001

2

1

2

1

yxyk

xk

k

k

p =

=

escala (k1,k2) escala inversa

Page 20: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Coordenadas Homogéneas

• Revisitar Transformações Geométricas

– Rotações

)1,(0

0)cos()sin(

0)sin()cos(

'2

pRpR

y

x

αα

αα

=

=

= )1,()1,(0

ppRRpRR

p ==

=− αα

DI-UM Computação Gráfica 09/1020

)1,(110

0

1100

0)cos()sin('2

2pR

pRyp

α

ααα =

=

= )1,()1,(110

022

ppRRpRR

p ==

=

αα

αα

rotação α rotação inversa

Page 21: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Coordenadas Homogéneas

• Revisitar Transformações Geométricas

– Translações também podem ser representadas por uma matriz 3x3

01pTI

xtx

DI-UM Computação Gráfica 09/1021

)1,(110

1100

102

TppTI

ytp y +=

=

=

Com coordenadas homogéneas todas as transformações geométricas podem ser representadas por matrizes 3x3

Page 22: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Composição de Transformações

• Todas as transformações podem ser definidas através de matrizes 3x3

• A composição de múltiplas transformações geométricas resulta • A composição de múltiplas transformações geométricas resulta na multiplicação de matrizes 3x3

• Ou seja, qualquer transformação geométrica, por mais complexa que seja, pode ser representada por uma única matriz

DI-UM Computação Gráfica 09/1022

Page 23: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Composição de Transformações

• Translação + Rotação

=

×+××+×

×+××+×=

=

101100100

100

10

0

10

TR

R

TITRIRTIM

• Inversa

DI-UM Computação Gráfica 09/1023

−=

−=

=

=

=

=

=

−−

−−−

1010

1010

0

1010

0

10

0

10

11

111

1

1

TRRTRR

TIRTIR

RTIM

TT

Page 24: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Composição de Transformações

• Como interpretar uma sequência de transformações?(leitura da direita para a esquerda, c/ transformações inversas)

y’ y’ y’

-T2 -Rz(90)-T1

)0,2,1(),90(),0,1,1(

'

21

21

−===

=

TRRT

pRTTp

z

DI-UM Computação Gráfica 09/1024

y

x

y

x

y’

x’

y

x

y’

x’

y’’

x’’

y

x

y’

x’

y’’

x’’

y’’’

x’’’

Page 25: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Composição de Transformações

– Lendo da esquerda para a direita podemos determinar o que acontece ao objecto em cada passo

)0,2,1(),90(),0,1,1(

'

21

21

−===

=

TRRT

pRTTp

z

DI-UM Computação Gráfica 09/1025

y

x

y

x

x’

y

x

y’’

x’’

y

x

y’’’

x’’’

T1 Rz(90) T2

Page 26: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Composição de Transformações

• Duas formas de ver o problema

y’ x

x’ y’’ x’’’

DI-UM Computação Gráfica 09/1026

y

x

x’

y’’

x’’

y’’’

x’’’

y

y’

x’ y’’

x’’

y’’’

x’’’

y

x

y’’’

x’’’

=

Page 27: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas 3D

• Escala

Para definir uma escala uniforme em todos os eixos temos a = b = c definimos a seguinte matriz

pc

b

a

p

=

1000

000

000

000

'

seguinte matriz

Para definir uma escala não-uniforme atribuímos diferentes coeficientes na diagonal

DI-UM Computação Gráfica 09/10 27

'

1000

01

00

001

0

0001

p

c

b

a

p

=

Page 28: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas 3D

• Escala em OpenGL

– glScaled(GLdouble x, GLdouble y, GLdouble z)

– glScalef(GLfloat x, GLfloat y, GLfloat z);

DI-UM Computação Gráfica 09/1028

Page 29: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas 3D

• Translação

pt

t

py

x

=010

001

' '010

001

pt

t

py

x

=

DI-UM Computação Gráfica 09/1029

pt

tp

z

y

=

1000

100

010' '

1000

100

010p

t

tp

z

y

−=

Page 30: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas 3D

• Translação em OpenGL

– glTranslate{d,f}(x,y,z);

DI-UM Computação Gráfica 09/1030

Page 31: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas 3D

• Rotação 3D em torno dos eixos

– A rotação inversa é obtida pela inversa da matriz, ou seja, pela transposta

=

1000

0100

00cossin

00sincos

)(αα

αα

αRz

DI-UM Computação Gráfica 09/10 31

−=

1000

0cossin0

0sincos0

0001

)(αα

αααRx

−=

1000

0cos0sin

0010

0sin0cos

)(αα

αα

αRy

Page 32: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas 3D

• Rotação em torno de uma direcção arbitrária (solução algébrica)– Pretende-se aplicar uma rotação de α graus em torno de n

p’ = ucos(α)+vsin(α)

Para determinar u precisamos de calcular h

Cálculo da projecção do vector op em n resulta no vector oh vhCálculo da projecção do vector op em n resulta no vector oh

h = o + oh

u = p – h

v = n x u

DI-UM Computação Gráfica 09/1032

α

pp’

u v

n

h

o

+−+

++−

−++

=

1000

0

0

0

2

2

2

ctzsxtyzsytxz

sxtyzctysztxy

sytxzsztxyctx

R

Sendo n = (x,y,z) obtem-se a seguinte form matricial

c = cos(α), s = sin(α), t = (1-c)

Page 33: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas 3D

• Rotação em OpenGL

– glRotate{d,f}(ang,x,y,z);

• sendo ang o ângulo de rotação em graus;• e (x,y,z) o vector que define o eixo de rotação;

DI-UM Computação Gráfica 09/1033

Page 34: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Sistemas de Coordenadas

• Um triplo de vectores (u,v,w) pode definir um sistema de coordenadas 2D desde que sejam linearmente independentes.

• Um conjunto de 2 vectores é linearmente independente se nenhum dos vectores se puder escrever como uma combinação linear dos restantes,vectores se puder escrever como uma combinação linear dos restantes,

• ou seja, não existe nenhuma combinação de números a1,a2, a3,sendo pelo menos um deles diferente de zero, tal que

0321 =++ wauava

DI-UM Computação Gráfica 09/10 34

Page 35: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Sistemas de Coordenadas

• Uma matriz invertível pode ser vista como uma transformação entre sistemas de coordenadas.

• Uma matriz invertível implica que os seus vectores (linha ou coluna) sejam linearmente independentes.linearmente independentes.

• Os vectores de uma matriz invertível representam um sistema de eixos, ou seja, um sistema de coordenadas.

DI-UM Computação Gráfica 09/10 35

Page 36: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Sistemas de Coordenadas

• Um conjunto de vectores (v1,...vn) forma uma base ortogonal se

• Um conjunto de vectores (v1,...,vn) forma uma base ortonormal se

0,),,( =⋅≠∀ ji vvjiji

• Um conjunto de vectores (v1,...,vn) forma uma base ortonormal se

DI-UM Computação Gráfica 09/10 36

==

=⋅∀

ji

ji

vvji

ij

ijji

,0

,1

),,(

δ

δ

Page 37: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Sistemas de Coordenadas

• Uma matriz cujos vectores coluna formem uma base ortonormal é uma matriz ortogonal

• Se G é ortogonal então

TGG =−1

• Um caso particular são as rotações!

TGG =−1

DI-UM Computação Gráfica 09/10 37

Page 38: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Sistemas de Coordenadas

• Object Space ou Modelling Space (Espaço local)

– Este espaço é o sistema de coordenadas relativas a um objecto (ou grupo de objectos).

– Permite-nos definir coordenadas relativas.– Permite-nos definir coordenadas relativas.

DI-UM Computação Gráfica 09/1038

Page 39: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Sistemas de Coordenadas

• World Space (Espaço Global)

– Este espaço engloba todo o universo e permite-nos exprimir as coordenadas de forma absoluta.exprimir as coordenadas de forma absoluta.

– É neste espaço que os modelos são compostos para criar o mundo virtual

DI-UM Computação Gráfica 09/10 39

Page 40: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Sistemas de Coordenadas

• Camera Space (Espaço da Câmara)

– Este sistema de coordenadas esta associado ao observador, ou câmara.

– A sua origem é a posição da câmara.

– O seu sistema de eixos é determinado pela orientação da câmara.

DI-UM Computação Gráfica 09/1040

Page 41: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Sistemas de Coordenadas

DI-UM Computação Gráfica 09/10 41

Page 42: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Sistemas de Coordenadas

• Screen Space (Espaço do ecrã)

– Espaço 2D onde é visualizado o mundo virtualo mundo virtual

– Resultado de uma projecção

DI-UM Computação Gráfica 09/10 42

Page 43: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Sistemas de Coordenadas

Object Space

World Space

DI-UM Computação Gráfica 09/10 43

World Space

Screen Space

Camera Space

Page 44: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas

• As transformações mencionadas até agora permitem-nos posicionar os objectos no espaço global.

Demo!!!Demo!!!(transformações geométricas)

DI-UM Computação Gráfica 09/1044

Page 45: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas

• Desenhar um boneco de neve!

DI-UM Computação Gráfica 09/1045

Page 46: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas

Modelar um boneco de neve com esferas e um cone

void drawSnowMan() {

glColor3f(1.0f, 1.0f, 1.0f);

// Draw Body

glTranslatef(0.0f ,0.75f, 0.0f);

glutSolidSphere(0.75f,20,20);

// Draw Head

glTranslatef(0.0f, 1.0f, 0.0f);

glutSolidSphere(0.25f,20,20);

DI-UM Computação Gráfica 09/1046

// Draw Eyes

glPushMatrix();

glColor3f(0.0f,0.0f,0.0f);

glTranslatef(0.05f, 0.10f, 0.18f);

glutSolidSphere(0.05f,10,10);

glTranslatef(-0.1f, 0.0f, 0.0f);

glutSolidSphere(0.05f,10,10);

glPopMatrix();

// Draw Nose

glColor3f(1.0f, 0.5f , 0.5f);

glutSolidCone(0.08f,0.5f,10,2);

}

Page 47: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas

Object Space

World Space

DI-UM Computação Gráfica 09/1047

World Space

Camera Space

Screen Space

Page 48: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas

• Por omissão (em OpenGL) considera-se que a câmara se encontra na origem, a apontar na direcção do Z negativo.

• Como definir uma câmara com posição e orientação arbitrárias?

• Que dados são necessários para definir uma câmara?

DI-UM Computação Gráfica 09/1048

Page 49: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas

• Dados para definir uma câmara:

– posição– direcção– direcção– "este lado para cima"

DI-UM Computação Gráfica 09/10 49

Page 50: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas

• Operações sobre a câmara:

– Definição do sistema de coordenadas

– Translação da posição da câmaradir

cyup

cz

cx

• Podemos facilmente especificar os eixos do sistema de coordenadas da câmara. Assumindo que os vectores fornecidos se encontram normalizados

• É necessário normalizar todos os vectores (cx,cy,cz)

DI-UM Computação Gráfica 09/10 50

dircxcy

updircx

dircz

×=

×=

−=

Page 51: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas

• Podemos então definir uma transformação que permita posicionar a câmara:

−=

PosMF

=

−=

321

321

321

1

czczcz

cycycy

cxcxcx

M

o

PosMF

DI-UM Computação Gráfica 09/10 51

Page 52: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas

• Posicionamento da câmara em OpenGL

– gluLookAt( posx, posy, posz,

atx, aty, atz,

upx, upy, upz)

sendo:

pos – a posição da câmaraat – um ponto para onde a câmara apontaup – a direcção do vector vertical

DI-UM Computação Gráfica 09/1052

Page 53: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas

Object Space

World Space

DI-UM Computação Gráfica 09/1053

World Space

Camera Space

Screen Space

Page 54: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas

• Perspectiva - View Frustum– Pirâmide truncada que define a região visível

DI-UM Computação Gráfica 09/10 54

farplane

Em OpenGL o plano de projecção é o near plane

nearplane

Page 55: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas

• O plano de projecção é um plano perpendicular ao eixo do Z, a uma distância n da origem

• A câmara encontra-se situada na origem, a apontar na direcção do eixo do Z negativodo Z negativo

• Calculo das projecções de um ponto 3D (px ,py ,pz )(no espaço câmara) no plano de projecção

PyPz

ny

PxPz

nx

−=

−=

DI-UM Computação Gráfica 09/10 55

Page 56: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas

• Clip Space

– O clip space é um espaço intermédio entre o espaço câmara e o espaço ecrã.espaço ecrã.

– O view frustum é convertido para um cubo cuja gama de valores nas três coordenadas é [-1,1].

– Desta forma, é extremamente simples determinar qual a geometria que se encontra dentro do view frustum.

DI-UM Computação Gráfica 09/1056

Page 57: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas

• O plano de projecção é definido pelos seus limites de variação • x = [l,r] e y = [t,b]

X

Y

rlb

t

plano de projecção

DI-UM Computação Gráfica 09/1057

1f

-1 1

-1

X

Z

X

Z

nl r

X rl

ViewFrustum => Clip space

limites de variaçãode z = [n,f]

Page 58: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas

• Definição do Frustum em OpenGL

– glFrustum(left,right,bottom,top,near,far);

DI-UM Computação Gráfica 09/1058

Page 59: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas

• O GLU fornece uma alternativa mais simpática:

– gluPerspective(fy, ratio, near,far);

– sendo– sendo• fy – ângulo de visão em y. • ratio – relação fovx/fovy near

bottomtopf y

*2

)arctan(( −=

DI-UM Computação Gráfica 09/10 59

Page 60: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas

• Projecção Ortográfica em OpenGL

– glOrtho(left,right,bottom,top,near,far);

DI-UM Computação Gráfica 09/1060

Page 61: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas

• Screen Space

– Sejam cx e cy as coordenadas normalizadas em clip space de um ponto

2)1(

lcw xx +=

– As coordenadas do viewport, ou janela, (wx , wy ), com uma determinada largura le altura a são definidas da seguinte forma:

2)1(

2acw yy +=

DI-UM Computação Gráfica 09/10 61

Page 62: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas

• Viewport em OpenGL

– glViewport(x,y,width,height);

DI-UM Computação Gráfica 09/1062

Page 63: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas

Demo(projecções - Nate Robbins)

DI-UM Computação Gráfica 09/1063

Page 64: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Transformações Geométricas

• Matrizes em OpenGL

ModelViewGL_MODELVIEW

Object Space

World Space

DI-UM Computação Gráfica 09/1064

GL_MODELVIEW

ProjectionGL_PROJECTION

World Space

Camera Space

Screen Space

Page 65: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

OpenGL

void changeSize(int w, int h) {

// Prevent a divide by zero, when window is too short

// (you cant make a window of zero width).

if(h == 0)

h = 1;

float ratio = 1.0* w / h;Setup da projecção

Necessário quando a // Set the viewport to be the entire window

glViewport(0, 0, w, h);

glMatrixMode(GL_PROJECTION);

// Reset the coordinate system before modifying

glLoadIdentity();

// Set the correct perspective.

gluPerspective(45,ratio,1,1000);

glMatrixMode(GL_MODELVIEW);

}

DI-UM Computação Gráfica 09/1065

Necessário quando a janela sofre modificações, ou ao iniciar a aplicação

Page 66: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

OpenGL

void renderScene(void) {

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glLoadIdentity();

gluLookAt(0.0,0.0,5.0,

0.0,0.0,0.0,0.0,0.0,0.0,

0.0f,1.0f,0.0f);

glRotatef(a,0.1,0);

glutSolidTeapot(1);

a++;

glutSwapBuffers();

}

DI-UM Computação Gráfica 09/1066

Page 67: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Buffers

• Color Buffer

– O OpenGL permite ter 2 buffers distintos.

– Em cada instante visualiza-se um buffer e escreve-se no outro.

– No final da frame trocam-se os buffers.

DI-UM Computação Gráfica 09/1067

Page 68: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Buffers

• Color Buffer em OpenGL

– Na inicialização

• glutDisplayMode(GLUT_DOUBLE | ...);• glutDisplayMode(GLUT_DOUBLE | ...);

– No final de cada frame

• glutSwapBuffers();

DI-UM Computação Gráfica 09/1068

Page 69: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Buffers

• Depth Buffer ou Z-Buffer

– Buffer que armazena os valores de Z dos pixels que já foram desenhados

– Permite assim criar uma imagem correcta sem ser necessário – Permite assim criar uma imagem correcta sem ser necessário ordenar e dividir polígonos

DI-UM Computação Gráfica 09/1069

Page 70: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Buffers

• Depth Buffer em OpenGL

– Na inicialização

• glutInitDisplayMode(GLUT_DEPTH | ... );• glutInitDisplayMode(GLUT_DEPTH | ... );

• glEnable(GL_DEPTH_TEST);

– No início de cada frame• glClear(GL_DEPTH_BUFFER_BIT | ...);

DI-UM Computação Gráfica 09/1070

Page 71: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Buffers

• limitações do Z-Buffer - precisão

near = 0.01far=100.0

near = 0.0001far=100.0

near = 0.000001far=100.0

DI-UM Computação Gráfica 09/1071

Page 72: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Buffers

• limitações do Z-Buffer

– número de bits determina precisão

– Z-Buffer não é linear: mais detalhe perto do near plane

– Muitos bits são usados para distâncias curtas

DI-UM Computação Gráfica 09/1072

Page 73: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Buffers

• A precisão do Z-Buffer é definida por intervalos crescentes desde o near plane até ao far plane

• Exemplo (16 bits):• Exemplo (16 bits):

– zNear = 1; zFar = 1000– z = 10 : intervalo 0.00152– z = 900 : intervalo 12.51

DI-UM Computação Gráfica 09/1073

Page 74: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Buffers

• A precisão do Z-Buffer é dependente da relação entre o near plane e o far plane

• Exemplo (16 bits):

– zFar = 1000; z = 900– zNear = 1 : intervalo 12.51– zNear = 0.01: intervalo 143.25

DI-UM Computação Gráfica 09/1074

Page 75: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Buffers

• Z-Buffer: mais bits => mais precisão

• Exemplo :

– zFar = 1000; z = 900; zNear = 0.01– zFar = 1000; z = 900; zNear = 0.01– 24 bits: intervalo 0.483– 16 bits: intervalo 143.25

DI-UM Computação Gráfica 09/1075

Page 76: Computação Gráfica - necc.di.uminho.ptnecc.di.uminho.pt/wiki/lib/exe/fetch.php?media=ap:3ano:cg:aula_t03... · LEI / LCC Departamento de Informática Universidade do Minho Computação

Referências

• Mathematics for 3D Game Programming & Computer Graphics, Eric Lengyel

• 3D Math Primer for Graphics and Game Development, Fletcher Dunn e Ian ParberryDunn e Ian Parberry

• Interactive Computer Graphics: A Top Down Approach with OpenGL, Edward Angel

• OpenGL Reference Manual, OpenGL Architecture Review Board

• "Learning to love your z-buffer, http://sjbaker.org/steve/omniv/love_your_z_buffer.html

DI-UM Computação Gráfica 09/1076