Você está na página 1de 5

15/04/2019

Coordenadas Homogêneas
Também chamado de coordenadas projetivas;
Introduzidas por August F. Möbius em 1827;
Sistema de coordenadas utilizado em geometria projetiva;
Possui a vantagem de que as coordenadas de pontos, incluindo
pontos no infinito, podem ser representados usando
coordenadas finitas;
Fórmulas usando coordenadas homogêneas são
frequentemente mais simples e compactas;
Sistemas de Coordenadas
Aplicações:
Computação Gráfica
GBC204 – Computação Gráfica Visão Computacional 3D
Prof. Dr. rer. nat. Daniel Duarte Abdala
Facilita a representação matricial de transformações afins e
projetivas.
1 2

Coordenadas Homogêneas Transformações de Perspectiva


Coordenadas homogêneas requerem uma dimensão a mais que o
espaço sendo representado:
y y
1D → 2CH
2D → 3CH
P*
3D → 4CH P
Todas as transformações excetuando-se a translação,
resumem-se a multiplicação de uma matriz. Q
z x
DEF: um ponto x=<x1,x2>/x∈ℝ2 (2D) no sistema de
coordenadas cartesianas é representado em coordenadas
homogêneas por [x,y,w] onde x=x1/w e y = x2/w.
Deste modo, o ponto cartesiano x corresponde a uma W
infinidade de triplas [x1/w, x2/w,w].
w é chamado de peso. Próximo ao fim do pipeline gráfico, cenas 3D devem ser
Este sistema permite representação de pontos e direções convertidas para 2D de modo a ser apresentada em tela;
que tendem ao infinito. Também permite regularizar todas as A forma como a projeção 3D→2D determina quão
transformações geométricas vistas até então. realística a cena será;
3 4

Transformações de Perspectiva Transformações de Perspectiva


A ideia básica refere-se a definir um ponto de observação Tal resultado permite a identificação da posição
E. A partir de E projeta-se uma linha de visão de E até (coordenadas) de P* na janela de visualização pois se sabe
cada ponto visível da imagem. O ponto em que a linha de a distância de P* até W.
visão intersecciona a janela de visualização W indica o Convenções:
ponto de projeção. a) A origem coincide com o centro (W) da janela de
Na figura a linha EW está idealmente posicionada visualização;
perpendicular ao plano de visão. b) O ponto de vista E é por definição posicionando na parte
O triângulo ∆EWP* é reto e também o é ∆EQP positiva do eixo-z olhando para a origem. Assim as
coordenadas de E são definidas como (0, 0, e);
PQ EQ PQ × EW Os eixos x e y são orientados de modo que o eixo x esteja
= ⇒ P *W = c)
P *W EW EQ saindo da figura e o eixo y aponte para cima;

5 6

1
15/04/2019

Transformações de Perspectiva Transformações de Perspectiva


Assuma que as coordenadas do ponto P sejam (x,y,z); Em suma, a transformação de perspectiva simplesmente
Então EW = e divide as coordenadas x e y por (1-z/e);
PQ = y Note que se z=0 (2D) a coordenada já está na janela de
EQ = e − z visualização.
1 0 0 0  x   x 
Deseja-se identificar o ponto P* na janela de visualização.     
0 1 0 0  y   y 
A distância P*W é na realidade a coordenada y do ponto Pers ( p ) = MP =     = 
0 0 1 0 z z
    
P* na janela de visualização 0 0 −1 1  1  1 − z = w 
 e   e 
y×e y x
y' = = x' ==
e − z 1− z 1−
z
e e

7 8

Translação 2D em Coordenadas Homogêneas Rotação 2D em Coordenadas Homogêneas


〈 〉
Assuma p = px, py o ponto a ser transladado, e o 〈 〉
Assuma p = px, py o ponto a ser rotacionado, e θ o
〈 〉
T = tx, ty vetor de translação. ângulo (em readianos) de rotação:
Linearmente, representa-se: Linearmente, representa-se:
 1 0 t x  px   px + t x w   cosθ − sin θ 0  px   px cosθ − p y sin θ 
         
T ( p ) =  0 1 t y  p y  =  p y + t y w  = p ' R ( p) =  sin θ cosθ 0  p y  =  p x sin θ + p y cos θ  = p'
 0 0 1  w   w   0 0  
1  w    w 
      

p' = p x + t x w, p y + t y w p' = p x cosθ − p y sin θ , px sin θ + p y cos θ

p‘ possui coordenadas cartesianas: ( p x / w) + t x , ( p y / w) + t y Esta operação rotaciona o ponto em relação a origem;


p‘ possui coordenadas cartesianas: ( p x / w) + t x w, ( p y / w) + t y

9 10

Encadeamento Rotação↔Translação Exemplo


Rotação seguida de translação: Desc: Rotação ao redor de um ponto arbitrário em 2D;
 1 0 t x  cosθ − sin θ 0   cosθ − sin θ tx  ∆ = { 3,2 , 4,7 , 6,1 } , θ=25o
ao redor do primeiro ponto <3,2>;
    
RT =  0 1 t y  sin θ cosθ 0  =  sin θ cosθ ty 
 0 0 1  0 1º Transladar o triângulo de modo que <3,2> coincida com a
  0 1   0 0 1 
origem 0=<0,0>;
Translação seguida de Rotação: 2o Rotacionar ao redor da origem em 25o;
 cosθ − sin θ 0  1 0 t x   cosθ − sin θ t x cosθ − t y sin θ  3º Transladar de volta para <3,2>;
    
TR =  sin θ cosθ 0  0 1 t y  =  sin θ cosθ t x sin θ + t y cosθ 
Tu −1R25Tu
 0 0 1  0 0 1   0
 0 1 
  u = t x , t y = − Apx ,− Ap y = − 3,−2

A ordem do encadeamento de transformações importa!

11 12

2
15/04/2019

Exemplo Escalonamento em Coordenadas Homogêneas


 1 0 3  0.91 − 0.42 0  1 0 − 3   0.91 − 0.42 1.11 
     
〈 〉
Assuma p = px, py o ponto a ser rotacionado, e k a
 0 1 2  0.42 0.91 0  0 1 − 2  =  0.42 0.91 − 1.08  escala de escalonamento:
 0 0 1  0 1  0 0 1   0 1 
  0 0 Linearmente, representa-se:
 0.91 − 0.42 1.11  3   2.73 − 0.84 + 1.11  3   k 0 0  p x   kpx 
           
3,2 ' =  0.42 0.91 − 1.08  2  =  1.26 + 1.82 − 1.08  =  2  S ( p) =  0 k 0  p y  =  kp y  = p '
 0 0 1  1   1  1  0 0 1  w   w 
           

∆ '= { 3 ,2 , 1 . 81 , 6 . 97 , 6 . 15 , 2 . 35 } p' = kpx , kp y

Esta operação escalona o ponto em relação a origem;


p‘ possui coordenadas cartesianas: ( p' x / w), ( p' y / w)

13 14

Convenções do Sistema de Coordenadas Sistema de Coordenadas


Em OpenGL, quando uma janela é criada para desenho,
z z faz-se necessário que se especifique o sistema de
coordenadas desejado e o método de mapeamento das
y coordenadas do sistema para pixels físicos na tela.
Coordenadas Cartesianas 2D
x x
Mão esquerda Mão direita x
y (2, 2)

y
(0, 0)

Convernsiona-se utilizar sempre o sistema de coordenadas


de mão-direita!
15 16

Coordenadas de Clipping Coordenadas de Clipping


No domínio do modelo não há necessariamente nenhum Ex:
limite para quais coordenadas são utilizadas. No entanto, x x

o computador é uma máquina finita e o número de pixels (150, 100)

(75,50)
no monitor é igualmente finito.
y y
(0, 0)
Uma janela é medida fisicamente em pixels; (-75,-50)

Antes que qualquer primitiva seja desenhada, faz-se


necessário que se especifique qual a parcela do sistema (xmin, ymin)=(0,0) (xmin, ymin)=(-75,-50)
de coordenadas deve ser mapeada para os pixels da (xmax, ymax)=(150,100) (xmax, ymax)=(75,50)

janela;
Está região de mapeamento é chamada de região de
clipping.

17 18

3
15/04/2019

Viewports Viewports
Mapeamento de coordenadas do modelo para Caso a proporção de
coordenadas da janela. tamanhos entre a janela do
x modelo (window) e a janela
– X
(150, 100) do monitor (viewport) seja
1 (aspect ratio = 1) o
y mapeamento se dá de
(0, 0)

forma direta;
x
– X Caso AR ≠ 1 a
(150, 100)
transformação deverá
y
executar uma operação de
(0, 0)
interpolação.

19 20

Sistemas de Projeção Projeção Ortográfica


Dois tipos de sistema de projeção Principais: z F – Frente (x–z)
A. Projeção Ortográfica (Ortogonal) (2D) L – Lateral (y–z)
B. Projeção de Perspectiva (3D) T T – Topo (x–y)
L x
F void gluOrtho2D(left, right, bottom, top)

y
void glViewport(x, y, width, height)

gluOrtho2D – define uma matriz de projeção ortográfica 2D;


glViewport – especifica uma transformação afim de x e y das
coordenadas normalizadas do modelo para coordenadas de
janela
21 22

Projeção Ortográfica Projeção de Perspectiva


Seja (xnd, ynd) as coordenadas normalizadas do modelo. As A projeção de perspectiva é usada já a muito tempo por
coordenadas de janela (xw, yw) são computadas como artistas e engenheiros para induzir o efeito de
segue: tridimensionalidade em desenhors inerentemente
x w = ( xnd + 1)
 width  bidimensionais;
+ x
 2  A ideia básica é simples. Define-se um ponto de
 height 
y w = ( y nd + 1) + y observação. Objetos próximos ao ponto de observação
 2 
são desenhados com seu tamanho original e objetos mais
distantes são desenhados em tamanho menor.

23 24

4
15/04/2019

Matriz de Transformação
distante
próximo

Volume de visualização
 fovy 
(fustrum) f = cot 
 2 

void gluPerspective(fovy, aspect, znear, zfar)  f / aspect 0 0 0 


 
 0 f 0 0 
A= zFar + zNear 2 × zFar × zNear 
gluPerspective – especifica um tronco de visualização no 0 0
 zNear − zFar zNear − zFar 
 
sistema de coordenadas do mundo. Em geral, o aspect ratio  0 0 −1 0 
em gluPerspective deve ser o mesmo que o aspect ratio do
viewport associado.
25 26

Você também pode gostar