Académique Documents
Professionnel Documents
Culture Documents
NDICE
1 TCNICAS DE RASTER 7
2 TRANSFORMAES GEOMTRICAS 34
2.1 TRANSFORMAES 2D 34
2.1.1 Translao 34
2.1.2 Mudana de escala 35
2.1.3 Rotao 35
2.1.4 Coordenadas homogneas 36
2.1.5 Translao usando coordenadas homogneas 37
2.1.6 Mudana de escala usando coordenadas homogneas 39
2.1.7 Rotao usando coordenadas homogneas 40
2.1.8 Transformaes de corpo rgido 41
2.1.9 Transformaes afins 42
2.1.10 Composio de transformaes 42
2.1.11 Coordenadas de mundo e coordenadas de dispositivo 46
2.2 TRANSFORMAES 3D 49
2.2.1 Transformaces bsicas 49
2.2.2 Operaes inversas 51
2.2.3 Composio de transformaes 52
2.2.4 Mudana de sistema de coordenadas 57
3 VISUALIZAO 3D 61
3.1 PROJEES 62
3.1.1 Projeo perspectiva 63
3.1.2 Projeo paralela 64
3.2 MATEMTICA DAS PROJEES 67
3.2.1 Projeo perspectiva 67
3.2.2 Projeo paralela 71
3.3 MODELO DE VISUALIZAO 3D 73
3.3.1 Volume de visualizao 73
3.3.2 Coordenadas normalizadas 77
3.3.3 Transformaes de visualizao 79
3.4 RECORTE EM TRS DIMENSES 93
2
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
6 REFERNCIAS 137
3
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
INTRODUO
Visualizao cientfica.
Cartografia.
dispositivos VETORIAIS
4
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
rastreado permanentemente pela controladora de vdeo, linha por linha (Figura 2). Para
cada pixel, a intensidade do canho de eltrons dada por sua cor. Em sistemas coloridos,
trs canhes correspondentes s cores primrias vermelho, verde e azul so controlados de
modo a fornecer a cor desejada. Em sistemas mais simples, como os PCs, o papel
desempenhado pelo processador de controle realizado via software. O termo bitmap
empregado para designar o contedo binrio do buffer de memria. Em sistemas
monocromticos, cada pixel da tela representado por por um bit do buffer (0-apagado ou
1-aceso). Em consequncia, para representar uma tela monocromtica de resoluo
1024x1024 pixels so necessrios 131072 bytes ou 128 Kb. Os sistemas com
representao de 8, 16 e 24 bits por pixel permitem a utilizao simultnea,
respectivamente, de 256 (28), 65536 (216) e 16777216 (224) cores. O termo frame buffer
tambm empregado para designar o buffer de memria.
5
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
CPU
ou servidor
BUFFER
comandos
move (10,20)
line (50,60)
char (...) Processador de Teclado
............ controle Mouse
............
jump
CRT
CPU
ou servidor
BUFFER
001001011000 comandos
001001111111
110101011100
001111110001 Processador de Teclado
111110011000 controle Mouse
001010101010
111100001110
010101010101
001100000000
Controladora de CRT
vdeo
6
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
1 TCNICAS DE RASTER
0 1 2 3 4 5
0 x
7
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
A Figura 1.2 mostra este algoritmo, escrito em linguagem C. A funo line chama a
funo fictcia writepixel, que desempenha o papel de ligar um pixel com uma determinada
cor. Esta funo no faz parte do padro C, e depende do compilador utilizado. As
declaraes de funes (prottipos de funes) e argumentos so feitas seguindo o padro
C++. Assume-se que o atributo cor possa ser representado por uma varivel inteira color.
Para inclinaes | m | > 1 os papis desempenhados por x e y devem ser invertidos. O
algoritmo DDA tem a desvantagem de tratar as variveis y e m como reais.
include <math.h>
/* Declarao de funes: */
dx = x1 - x0;
dy = y1 - y0;
m = dy / dx;
y = y0;
for ( x = x0; x < = x1; x++) {
writepixel(x,round(y),color);
y = y + m;
}
}
int round(float x)
{
return( (int)floor(x+0.5) );
}
8
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
Seja Q o ponto de interseo entre a linha que se deseja traar e a vertical do grid x
= xp + 1. A tcnica do ponto mdio consiste em verificar em que lado da reta o ponto
mdio M se situa. Se o ponto M se encontra acima da linha, ento o pixel E o mais
prximo da linha. Se M est abaixo da reta, ento o pixel NE o mais prximo da reta.
(x1,y 1)
45o
(x0,y 0)
x
NE
Q
M
P E
9
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
F( x, y) = ax + by + c = 0 (1.1)
dy
y = x + B (1.2)
dx
a = dy
b = - dx
c = B dx
Fazendo,
Portanto, o prximo valor de d pode ser calculado de uma forma incremental fazendo-se:
dnew = dold + E = dold + a (1.8)
10
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
e, em consequncia,
= F ( x0, y0 ) + a + b / 2 (1.12)
Para eliminar a frao em (1.13), pode-se multiplicar a funo F(x, y) por 2, observando-se
que a multiplicao de F por uma constante positiva no altera o sinal da varivel de teste:
F( x, y ) = 2 ( a x + b y + c ) (1.14)
dstart = 2 a + b = 2 dy - dx (1.15)
E = 2 a = 2 dy (1.16)
NE = 2 ( a + b ) = 2 ( dy - dx ) (1.17)
11
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
midpoint_line ( int x0, int y0, int x1, int y1, int color )
{
int dx, dy, incrE, incrNE, d, x, y ;
dx = x1 - x0 ;
dy = y1 - y0 ;
d = 2 * dy - dx ;
incrE = 2 * dy ;
incrNE = 2 * ( dy - dx ) ;
y = y0 ;
( x0, y0 )
W
( x1, y1 )
P SW
12
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
(a) 0 m 1 (b) -1 m 0
y y
dx > 0 dx < 0
dy > 0 dy > 0
P1 P1
P0
P0
x x
P0 P0
P1
P1
dx < 0
dy < 0 dx > 0
dy < 0
y P1 P1 y
dx < 0
dx > 0 P0
dy > 0
P0 dy > 0
x x
dx < 0 P0 P0 dx > 0
dy < 0 dy < 0
P1 P1
13
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
YMAX
linha de varredura
YMIN
x
Em seguida, para cada linha de varredura y (YMIN y < YMAX), estas arestas so
ordenadas de acordo com suas coordenadas xmin , em ordem crescente, e so ativados os
pixels dos segmentos de reta horizontais entre pares de arestas de paridade par (Figura
1.10). Os valores de xmin so atualizados a cada incremento em y. Para ordenar as arestas
pode-se utilizar um ordenador do tipo bolha (bubble sort).
p-1
14
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
linha de varredura
0 1 0 1 0
x
15
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
E F G H
y = yC D E C
C y = yE
A B A B C D
y (a) (b)
Figura 1.11 - Exemplos de erros que ocorrem quando os vrtices de valores mximos em y
so considerados. O segmento CD em (a) no seria convertido e o segmento EC em (b)
seria convertido.
16
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
#include <stdlib.h>
#define MAX 100
/* Declarao de funes : */
void OrdenaXmin(int p, float xi[], int ymin[], int ymax[], float m[]);
void horizontal(int x0, int x1, int y);
int round(float x);
17
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
A maneira mais eficiente de fazer com que imagens (cones, menus, etc) apaream e
desapaream da tela rapidamente atravs do armazenamento na memria dos bitmaps (ou
pixmaps) correspondentes a estas imagens.
D ( S op D) (1.18)
REPLACE
OR
XOR
AND
18
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
REPLACE
OR
op =
XOR
= 0 AND
= 1
19
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
k = padro[i][j]; (1.19)
i = x % N; (1.20)
j = y % M; (1.21)
20
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
t/2
t/2
21
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
SEMI-PLANO SUPERIOR
SEMI-PLANO SEMI-PLANO
ESQUERDO DIREITO
SEMI-PLANO INFERIOR
descartad
descartad
22
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
1. Teste de aceitao:
4. Retorna ao passo 1;
BIT
1 acima da aresta superior y > ymax
2 abaixo da aresta inferior y < ymin
3 direita da aresta direita x > xmax
4 esquerda da aresta esquerda x < xmin
23
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
P0 P1 P0 AND P1
0000 0000 0000 segmento no retngulo (convertido)
0 segmento em um semi-plano (rejeitado)
0000 segmento deve ser subdividido
descartado
1001
24
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
y
P1
y = y max
(a) y max
( x1 x 0 )
x = x0 + .( y max y 0 )
( y1 y 0 )
P0
x
y
P1
y min y = y min
(b)
( x1 x 0 )
x = x0 + .( y min y 0 )
( y1 y 0 )
P0
x
y
P1
x = x max
(y 1 y 0 )
(c) y = y0 + . ( x max x 0 )
(x 1 x 0 )
P0
x
xmax
y
P1
x = x min
(d) ( y1 y 0 )
y = y0 + .( x min x 0 )
( x1 x 0 )
P0
x
xmin
Figura 1.27- Coordenadas do ponto de interseo do segmento com a aresta superior (a),
com a aresta inferior (b), com a aresta direita (c) e com a aresta esquerda (d).
25
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
/* Declarao de funes : */
26
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
xa = *x0;
ya = *y0;
xb = *x1;
yb = *y1;
code = code1;
if (code == 0) {
code = code0;
x = xb;
y = yb;
xb = xa;
yb = ya;
xa = x;
ya = y; }
while (bit == 0 && j < 4) {
bit =(mask & code) ? 1 : 0;
mask >>= 1;
j++; }
dx = xb-xa;
dy = yb-ya;
switch(j) {
case 1:
if (dy != 0.0)
xb = xa+dx*(ymax-ya)/dy;
yb = ymax;
break;
case 2:
if (dy != 0.0)
xb = xa+dx*(ymin-ya)/dy;
yb = ymin;
break;
case 3:
if (dx != 0.0)
yb = ya+dy*(xmax-xa)/dx;
xb = xmax;
break;
case 4:
if (dx != 0.0)
yb = ya+dy*(xmin-xa)/dx;
xb = xmin;
}
if (code1 == 0) {
*x0 = xb;
*y0 = yb; }
else {
*x1 = xb;
*y1 = yb; }
}
27
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
(a)
Figura 1.29 - Recorte de um polgono contra um retngulo, aresta por aresta: (a) polgono
antes do recorte, (b) recortado contra a aresta direita, (c) recortado contra a aresta
superior, (d) recortado contra a aresta esquerda e (e) recortado contra a aresta inferior.
28
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
P1
polgono de
recorte
P0
4
3
29
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
S P
interior do polgono
de recorte P
regio externa ao P
polgono de recorte
P S
(d)
aresta de recorte
A funo SHPolygonClip chama trs outras funes, que so a funo inside, para
verificar se um ponto se encontra dentro ou fora do polgono de recorte, a funo
AddVertex, que adiciona um vrtice estrutura vclip[ ], e a funo intersection, que
calcula a interseo da aresta de recorte com a aresta do polgono.
ou simplesmente,
30
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
P1
aresta de
recorte
( PP0 PP1 )z > 0
P0
aresta
indesejvel
(a) (b)
31
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
POINT2D v[MAX],vclip[MAX],edge[2];
/* Declarao de funes : */
nclip = 0;
s = v[n-1];
for (j = 0; j < n; j++) {
p = v[j];
if (inside(p,edge))
if (inside(s,edge))
nclip = addVertex(p,nclip,vclip);
else {
i = intersection(s,p,edge);
nclip = addVertex(i,nclip,vclip);
nclip = addVertex(p,nclip,vclip);
}
else if (inside(s,edge)) {
i = intersection(s,p,edge);
nclip = addVertex(i,nclip,vclip);
}
s = p;
}
return nclip;
}
32
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
dx = edge[1].x-edge[0].x;
if (dx != 0.0) {
dy = edge[1].y-edge[0].y;
m = dy/dx;
c = edge[0].y - m*edge[0].x;
a = p.x - s.x;
b = p.y - s.y;
t = (s.x*dy + (c-s.y)*dx)/(b*dx-a*dy);
i.x = s.x + a*t;
i.y = s.y + b*t; }
else {
dx = p.x-s.x;
dy = p.y-s.y;
m = dy/dx;
c = s.y - m*s.x;
i.x = edge[0].x;
i.y = m*edge[0].x + c;
}
return i;
}
33
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
2 TRANSFORMAES GEOMTRICAS
2.1 TRANSFORMAES 2D
2.1.1 Translao
Se um ponto P(x, y) sofre uma translao T(dx, dy), como mostra a Figura 2.1,
sua nova posio P(x, y) ser dada por:
x = x + dx (2.1a)
y = y + dy (2.1b)
x x dx
y = y + dy (2.2)
P = P + T (2.3)
dy
P dx
34
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
x = sx . x (2.4a)
y = sy . y (2.4b)
x sx 0 x
= 0
y s y y (2.5)
e de forma compacta,
P = S . P
(2.6)
2.1.3 Rotao
x cos sin x
y = sin cos y (2.8)
35
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
De forma compacta,
P = R . P (2.9)
y
P
x x
P P y = t . y
(2.10)
w w
Pelo menos uma das coordenadas homogneas deve ser diferente de zero. O ponto
(0, 0, 0) no faz parte do sistema de coordenadas homogneas. Se w 0, ento:
x y
( x, y , w ) ( , , 1) (2.11)
w w
36
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
y
x
w=1
y
x
x 1 0 dx x
y = 0 1 dy y (2.12)
1 0 0 1 1
37
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
De forma compacta,
Ento,
1 0 dx 2 1 0 dx 1
T(dx 2 , dy 2 ) . T(dx 1 , dy 1 ) = 0 1 dy 2 0 1 dy 1 =
0 0 1 0 0 1
1 0 dx 1 + dx 2
= 0 1 dy 1 + dy 2 (2.17)
0 0 1
Consequentemente,
38
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
x s x 0 0 x
y = 0 sy 0 y (2.19)
1 0 0 1 1
ou de forma compacta,
sx 2 0 0 sx1 0 0
S( sx 2 , sy2 ).S(sx1 , sy1) = 0 sy2 0 0 sy1 0 =
0 0 1 0 0 1
sx1. sx 2 0 0
= 0 sy1. sy2 0 (2.24)
0 0 1
e portanto,
39
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
O resultado acima mostra que uma composio de mudanas de escala produz uma
transformao cujos fatores de escala so os produtos dos fatores de cada transformao
envolvida na composio. Assim como na translao, a transformao resultante independe
da ordem de aplicao das mudanas de escala.
x cos sin 0 x
y = sin cos 0 y (2.26)
1 0 0 1 1
ou,
P = R() . P (2.27)
P = R(1) . P (2.28)
P = R(2) . P (2.29)
40
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
cos( 1 + 2 ) sin( 1 + 2 ) 0
= sin( 1 + 2 ) cos( 1 + 2 ) 0 (2.31)
0 0 1
r11 r12 tx
r r22 ty (2.33)
21
0 0 1
onde a submatriz rij uma matriz ortogonal e tx e ty so reais arbitrrios, preserva ngulos e
comprimentos. Transformaes representadas por matrizes deste tipo denominam-se
transformaes de corpo rgido.
cos sin
sin cos (2.34)
M-1 = M t (2.35)
M t.M = M .M t = I (2.36)
41
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
R() S(sx,sy)
Figura 2.6
42
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
1 0 x1 cos sin 0 1 0 x1
T(x1,y1) . R() .T(-x1,-y1) = 0 1 y1 sin cos 0 0 1 y1 =
0 0 1 0 0 1 0 0 1
s x 0 x1 .( 1 s x )
T(x1,y1) .S(sx,sy) .T(-x1,-y1) = 0 sy y1 .( 1 s y ) (2.38)
0 0 1
43
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
A transformao composta :
44
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
(a) (b)
(c) (d)
r11 r12 tx
M = r 21 r 22 ty (2.40)
0 0 1
45
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
A transformao resultante :
u max u min
sx = (2.44a)
x max x min
v max v min
sy = (2.44b)
y max y min
46
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
1 0 u min sx 0 0 1 0 x min
M wv = 0 1 v min 0 sy 0 0 1 y =
min
0 0 1 0 0 1 0 0 1
sx 0 x min . s x + u min
= 0 sy y min . s y + v min (2.45)
0 0 1
u x ( x x min ). s x + u min
v = M y = ( y y ). s + v (2.46)
wv min y min
1 1 1
objeto
y
(xmax , ymax)
janela de
visualizao
(xmin ,ymin)
x
v
limite fsico do
dispositivo
(umax , vmax)
regio de
visualizao
(viewport)
(umin , vmin)
u
47
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
xmax - xmin
(b)
vmax - vmin
umax - umin
v
(umax , vmax)
(c)
(umin , vmin)
u
48
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
2.2 TRANSFORMAES 3D
(x, y, z, w) (2.47)
x y z
( , , ,1) (2.48)
w w w
Cada ponto do espao representado por uma reta em 4D cuja direo passa pela origem,
e a normalizao de todos os pontos em coordenadas homogneas d origem a um
subespao 3D do espao 4D definido por w = 1.
1 0 0 dx
0 1 0 dy
T( dx, dy , dz) = (2.49)
0 0 1 dz
0 0 0 1
sx 0 0 0
0 sy 0 0
S( s x , s y , s z ) = (2.50)
0 0 sz 0
0 0 0 1
49
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
1 0 0 0
0 cos sin 0
R x () = (2.51)
0 sin cos 0
0 0 0 1
cos 0 sin0
0 1 0 0
R y () = (2.52)
sin 0 cos 0
0 0 0 1
cos sin 0 0
sin cos 0 0
R z () = (2.53)
0 0 1 0
0 0 0 1
Ry
y
Rx
x
Rz z
50
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
-1
. = I (2.54)
1 0 0 dx
0 1 0 dy
T ( dx , dy , dz) =
1 (2.55)
0 0 1 dz
0 0 0 1
1 / s x 0 0 0
0 1 / sy 0 0
S 1 = S( s x , s y , s z ) = (2.56)
0 0 1/ sz 0
0 0 0 1
51
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
1. Translao P1 0.
2. Rotao em torno do eixo y, tal que o segmento P1P2 que fique contido no plano yz.
3. Rotao em torno do eixo x, tal que o segmento P1P2 fique contido no eixo z.
4. Rotao em torno do eixo z, tal que o segmento P1P3 fique contido no plano yz.
y y
P3
P2
P3
P1 P1 O
O P2
x x
z (a) z (b)
52
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
0
0
P1 = T( x 1 ,y 1 ,z 1 ) . P1 = (2.59)
0
1
x 2 x1
y y1
P2 = T( x 1 , y 1 , z 1 ). P2 =
2
(2.60)
z2 z1
1
x 3 x1
y y
P3 = T( x 1 ,y 1 , z 1 ) . P3 =
3 1
(2.61)
z3 z1
1
P3
P2
P1
x
D1
Observando a Figura 2.16 verifica-se que, para o segmento P1P2 ficar contido no plano
yz, uma rotao Ry(-(90-)) deve ser aplicada. Tendo em conta que:
z2 z z1
cos( ( 90 )) = cos( 90) = sin = = 2 (2.62)
D1 D1
53
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
x 2 x x1
sin( 90) = cos = = 2 (2.63)
D1 D1
D1 = x 22 + z 22 = ( x 2 x 1 ) 2 + ( z 2 z1 ) 2 (2.64)
P1 = Ry(-90) . P1 (2.65)
P2 = Ry(-90) . P2 (2.66)
P3 = Ry(-90) . P3 (2.67)
z2 z1 x2 x1
D 0 0
D1
1
0
R y ( 90) = x x 1 0 0 (2.68)
2 z2 z1
1
0 0
D1 D1
0 1
0 0
z 2 z1 x2 x1
D 0 0 0
D1 0
1
P1 = x x 0 1 0 0 = P1 (2.69)
2 z2 z1 0
1
0 0
D1 D1
0 1
0 0 1
z 2 z1 x2 x1
D 0 0 x2 x 1 0
D1 y y y
1 y1
0
P2 = x x 1 0 0 2 = 2 1
(2.70)
2 z2 z1 z2 z1 D1
1
0 0
D1 D1
0 0 0 1 1 1
54
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
z 2 z1 x2 x1
D 0 0 x3 x1 x
3
D1 y
y
1
y1
0
P3 = x x 1 0 0 3 = 3 (2.71)
2 z2 z1 z3 z1 z 3
1
0 0
D1 D1
0 1 1
0 0 1
Para tornar o segmento P1P2 coincidente com o eixo z, deve-se aplicar uma rotao
Rx() em torno do eixo x (Figura 2.17). Considerando as relaes:
z D
cos = 2
= 1 (2.72)
D2 D2
y 2 y y1
sin = = 2 (2.73)
D2 D2
D2 = ( x 2 x1 ) 2 + ( y 2 y1 ) 2 + ( z 2 z 1 ) 2 (2.74)
1 0 0 0
D1 y1 y 2
0 D D2
0
R x ( ) = y 2 y D1
(2.75)
0 2 1
0
D2 D2
0 0 0 1
x 1
y
P1 = R x ( ) . P1 =
1
(2.76)
z1
1
1 0 0 0
D1 y1 y 2 0 0
0 D2 D2
0 y y 0
P2 = R x ( ) . P2 = 2 1
= (2.77)
0 y2 y1 D1 D1 D 2
0
D2 D2
0 1 1
0 0 1
55
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
x 3
y
P3 = R x ( ) . P3 =
3
(2.78)
z 3
1
y 2 P3
P2
D2
P1 O
x
z2
z
Finalmente, para posicionar o segmento P1P3 no plano yz, deve-se aplicar uma
rotao Rz() em torno de z (Figura 2.18). Os elementos desta matriz so dados por:
y 3
cos = (2.79)
D3
x 3
sin = (2.80)
D3
D3 = x 3 2 + y 3 2 (2.81)
56
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
y 3
P3
D3
x3
P1
x
P2
y (i)
y (j)
x(j)
x(i)
z(i)
z(j)
57
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
Exemplo 1
cos sin 0
R j i ( ) = sin cos 0 (2.85)
0 0 1
cos sin 0
R( ) = R j1 i ( ) = R tj i ( ) = R j i ( ) = sin cos 0 (2.86)
0 0 1
y (j) y (i)
x(j)
x(i)
y y y
P = P
x x
-
58
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
Exemplo 2
y y
P3
P3
P2 z
P2
P1
x P1
(a) (b)
x x
y y
= T( x , y , z ) . (2.87)
z z
1 1 1
1 1
59
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
x 2
cos z x = (2.89a)
P1 P2
y 2
cos z y = (2.89b)
P1 P2
z 2
cos z z = (2.89c)
P1 P2
cos z x
w = cos z y (2.90)
cos z z
Como o eixo x perpendicular ao plano formado pelos dois segmentos, o vetor unitrio
na direo x obtido de acordo com a expresso:
u x
P1 P3 P1 P2
u = = u y (2.91)
P1 P3 P1 P2
u z
v x
w u
v = = v y (2.92)
w u
v z
x u x u y uz 0 x
y v v y vz 0 y
= x (2.93)
z cos z x cos z y cos z z 0 z
1 0 0 0 1 1
60
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
3 VISUALIZAO 3D
O modelo de visualizao descrito no item 3.3 utilizado pela maioria dos pacotes
grficos comerciais, e segue o padro PHIGS. Em linhas gerais, este modelo consiste, em
primeiro lugar, no estabelecimento de um sistema de coordenadas (coordenadas de mundo)
utilizado para descrever o objeto espacialmente. Em seguida, deve-se especificar um ponto
de observao (centro de projeo), limitando o campo de viso do observador a uma
regio finita do espao, denominada volume de visualizao. O volume de visualizao
definido por um plano de projeo, pelos planos anterior e posterior de recorte, e pelo tipo
de projeo escolhido (perspectiva ou paralela), como ser visto mais adiante. As partes do
objeto que se situam no interior do volume de visualizao so projetadas no plano de
projeo e da mapeadas para uma regio do dispositivo de sada.
Efeitos de uma cena real, tais como iluminao e transparncia, tambm podem ser
incorporados ao processo de visualizao [1, 2].
61
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
3.1 PROJEES
A A
B
B
A
A
B
B
linhas de
projeo linhas de
centro de projeo
projeo
direo de
projeo
(a) (b)
62
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
projees
vista frontal
ortogrfica vista de topo
vista lateral isomtrica
paralela axonomtrica
outras
gabinete
oblqua cavaleira
outras
ponto de fuga
63
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
ponto de fuga
principal do eixo z
64
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
n
A
Vista de topo
Vista lateral
Vista frontal
65
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
plano de projeo
AB = AB
A B
A
direo de projeo
B 45o
plano de projeo
AB = AB/2
A
B
direo de projeo
A
B 26.57o
66
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
x d 0 0 0 0 x
y 0 d0 0 0 y
= (3.1a)
z 0 0 d0 0 z
w n x ny nz 0 1
ou,
P = M 0per . P (3.1b)
sendo,
d0 = x0 . nx + y0 . ny + z0 . nz (3.2)
R0
n P
67
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
Demonstrao:
P R0 n = 0 (3.3)
x. nx + y. ny + z. nz = d0 (3.5)
Como P e P pertencem a uma reta que passa pela origem pode-se escrever:
x x
y = y (3.6)
z z
. x . nx + . y . ny + . z . nz = d0 (3.7)
d0
= (3.8)
x . nx + y .n y + z . n z
68
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
x d 0 0 0 0 x
y 0 d0 0 0 y
= (3.9)
z 0 0 d0 0 z
w n x ny nz 0 1
Seja agora o mesmo plano de projeo, mas com um centro de projeo C(a, b,
c), como mostra a Figura 3.9. A projeo P(x, y, z, w) de um ponto P(x, y, z, 1)
dada por:
x d + an x an y an z ad 0 x
y bn d + bn y bn z bd 0 y
= x
(3.10a)
z cn x cn y d + cn z cd 0 z
w nx ny nz d1 1
ou,
P = M per . P (3.10b)
sendo,
d0 = x0 . nx + y0 . ny + z0 . nz (3.11)
d1 = a . nx + b . ny + c . nz (3.12)
d = d0 - d1 (3.13)
R0
n P
69
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
Demonstrao:
Aps a translao T(-a, -b, -c), as coordenadas do ponto R0, pertencente ao plano
de projeo, passam a ser (x0-a, y0-b, z0-c). Aplicando a matriz de projeo para centros
de projeo na origem obtm-se:
d 0 0 0
0 d 0 0
M 0per = (3.14)
0 0 d 0
n x ny nz 0
sendo d igual a,
ou,
P = M per . P (3.18)
70
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
1 0 0 a d 0 0 0 1 0 0 a
0 1 0 b 0 d 0 0 0 1 0 b
M per =
0 0 1 c 0 0 d 0 0 0 1 c
0 0 0 1 n x ny nz 0 0 0 0 1
d + an x an y an z ad 0
bn d + bn y bn z bd 0
=
x
(3.19)
cn x cn y d + cn z cd 0
nx ny nz d1
Considere um plano de projeo que contm o ponto R0(x0, y0, z0) de normal n(nx,
ny, nz), e uma direo de projeo dada pela direo do vetor v(a, b, c), como mostra a
Figura 3.10. A projeo paralela P(x, y, z, w) de um ponto P(x,y,z,1) dada pela
expresso:
x d 1 an x an y an z ad 0 x
y bn d 1 bn y bn z bd 0 y
= x (3.20a)
z cn x cn y d 1 cn z cd 0 z
w 0 0 0 d1 1
ou,
P = M par . P (3.20b)
sendo,
71
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
z
R0
n
P
P
v
Demonstrao:
x. nx + y. ny + z. nz = d0 (3.24)
Como P e P formam uma reta de cossenos diretores (a, b, c), so vlidas as relaes:
a
P = P + b . t (3.25a)
c
ou,
x x a
y = y + b . t (3.25b)
z z c
onde t um parmetro escalar. O ponto de interseo desta reta com o plano de projeo
pode ser obtido substituindo a equao acima em (3.24):
d 0 ( x. n x + y. n y + z. n z )
t = (3.27)
d1
72
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
x x a
d 0 ( x. n x + y. n y + z. n z )
y = y + b . d1
(3.28)
z z c
ou em coordenadas homogneas:
x d 1 an x an y an z ad 0 x
y bn d 1 bn y bn z bd 0 y
= x (3.29)
z cn x cn y d 1 cn z cd 0 z
w 0 0 0 d1 1
73
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
z
v
VUP
y VRP
VPN
n
u
x
plano de projeo u
74
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
plano de projeo
(u max , v max )
u
VRP
CW
(u min, v min)
janela de visualizao
75
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
u
janela de visualizao
CW
PRP
u
janela de visualizao
CW
PRP
DOP
76
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
y v
x u
n
B
F
plano posterior
VPD
janela de
visualizao
plano plano de
PRP anterior projeo
77
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
s plano
posterior
1 0.5 1
r ou s
0.5
plano
r anterior
0.5 1
1
1
t t
plano
s posterior
1
1 r ou s
r
1 1
1
t plano
t anterior
78
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
79
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
ux
VUP VPN
R u = uy = (3.30)
VUP VPN
u z
nx
R n = ny =
VPN
(3.31)
VPN
n z
vx
R v = vy = R n R u (3.32)
v z
e a transformao WC VRC dada por:
u x
v y
= R . T( VRP , VRP , VRP ) . (3.33)
n z
x y z
1 1
u x uy uz 0
v vy vz 0
R =
x
(3.34)
n x ny nz 0
0 0 0 1
e T a translao:
1 0 0 VRP x
0 1 0 VRP y
T = (3.35)
0 0 1 VRPz
0 0 0 1
80
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
VUP
x u
VRP
VPN
z n
1 a 0
SH x = 0 1 0 (3.37)
0 0 1
81
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
1 0 0
SH y = b 1 0 (3.38)
0 0 1
y y
SHx
x x
y y
SHy
x x
82
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
Na projeo paralela, a transformao VRC NPC deve ser tal que o volume de
visualizao da Figura 3.22 seja transformado no volume normalizado da Figura 3.18.
Considerando que os eixos r-s-t do sistema NPC sejam inicialmente coincidentes com os
eixos u-v-n de VRC, a transformao desejada pode ser obtida atravs das seguintes
etapas:
1. Translao T(0,0,-B) tal que o plano posterior fique contido no plano r-s.
plano
posterior
DOP
n, t n
PRP PRP
DOPu DOPv
83
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
u min v min
r s
VPD-B
t t
dr ds
Figura 3.23 - Volume de visualizao aps translao T(0, 0, -B) e distoro SHuv.
F-B F-B
t t
1 0 sh u 0
0 1 sh v 0
SH uv = (3.39)
0 0 1 0
0 0 0 1
84
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
DOPu
sh u = (3.40a)
DOPn
DOPv
sh v = (3.40b)
DOPn
1
su = (3.44)
u max u min
1
sv = (3.45)
v max v min
1
sn = (3.46)
FB
85
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
Npar = S(su , sv , sn) . T(-dr, -ds, 0) . SHuv(shu , shv) . T(0, 0, -B) (3.47)
su 0 s u . sh u s u .( B . sh u + dr )
0 sv s v . sh v s v .( B . sh v + ds)
N par = (3.48)
0 0 sn sn . B
0 0 0 1
r u
s v
= N . (3.49)
t n
par
1 1
4. Mudana de escala tal que o volume em VRC (Figura 3.16) seja mapeado para o
volume normalizado (Figura 3.17).
86
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
plano anterior
PRP PRP
n n
u v
dr ds
n n
87
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
h n = PRP n B (3.54)
hu hv
u v
hn
n n
88
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
Finalmente, a mudana de escala S(su, sv, sn) deve ser tal que transforme o volume
da Figura 3.27 no volume normalizado. Portanto, os fatores de escala so:
1
su = (3.55)
hu
1
sv = (3.56)
hv
1
sn = (3.57)
hn
A transformao resultante :
Nper = S(su , sv , sn) . T(-dr, -ds, 0) . SHuv(shu , shv) . T(0, 0, -B) (3.58)
e tem a mesma forma da matriz em (3.48). Cada ponto do sistema de coordenadas VRC
transformado para o sistema NPC atravs da relao:
r u
s v
= N . (3.59)
t n
per
1 1
dt 1 0 0.5 dt / 2
0 dt 1 0.5 dt / 2
M per = (3.60)
0 0 dt dt
0 0 1 1
89
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
sendo dt igual a:
1
r ou s
1
janela de
visualizao
t
0.5 1
r ou s
dt
1
janela de
visualizao
t
r r
s s
= M . (3.62)
t t
per
w 1
90
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
s r 0 r min . s r + X min
M wv = 0 ss s min . s s + Ymin (3.63)
0 0 1
sendo,
X max X min
sr = (3.64)
r max r min
Ymax Ymin
ss = (3.65)
s max s min
X r
Y = M . s (3.66)
wv
1 1
91
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
s
(rmax , s max )
janela de
visualizao
(rmin , s min)
limite fsico
do
dispositivo
(Xmin , Ymin)
X
92
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
( P0 P) n < 0 (3.75)
(x x 0 ) . n x + (y y 0 ) . n y + (z z 0 ) . n z < 0 (3.76)
x. nx + y. ny + z. nz ( x0 .n x + y0 .n y + z 0 . nz ) < 0 (3.77)
Fazendo,
d 0 = x0 .n x + y0 .n y + z0 .nz (3.78)
chega-se expresso:
x .n x + y . ny + z .n z < d 0 (3.79)
que deve ser satisfeita para pontos do lado interno da face. A Figura 3.33 ilustra esta
situao.
93
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
(a) (b)
(c) (d)
(e)
Figura 3.32 - Recorte de um retngulo contra um hexaedro: (a) retngulo antes do recorte,
(b)-(d) polgonos intermedirios, e (e) resultado final.
P0
n
Figura 3.33 - Ponto P no lado interno da face: projeo do vetor P0P negativa na direo
da normal externa n.
94
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
x = x 0 + (x 1 x 0 ) . t (3.80)
y = y 0 + (y 1 y 0 ) . t (0 t 1) (3.81)
z = z 0 + (z 1 z 0 ) . t (3.82)
x .n x + y . ny + z . nz = x p .n x + yp . ny + z p . n z (3.83)
[x 0 + (x 1 x 0 ) . t ] n x + [y 0 + (y 1 x 0 ) . t] n y + [z 0 + (z 1 z 0 ) . t ] n z =
(3.84)
= x p .n x + y p .n y + z p .n z
(x p x 0 ) . n x + ( y p y 0 ) . n y + (z p z 0 ) . n z
t = (3.85)
(x 1 x 0 ) . n x + (y 1 y 0 ) . n y + (z 1 z 0 ) . n z
95
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
z > 0 (3.86)
z0
t = (3.87)
z0 z1
Como foi dito anteriormente, simplificar as operaes de recorte uma das vantagens do
volume de visualizao normalizado.
96
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
POINT3D v[MAX],vclip[MAX],plane[2];
/* Declarao de funes : */
nclip = 0;
s = v[n-1];
for (j = 0; j < n; j++) {
p = v[j];
if (inside(p,plane))
if (inside(s,plane))
nclip = addVertex(p,nclip,vclip);
else {
i = intersection(s,p,plane);
nclip = addVertex(i,nclip,vclip);
nclip = addVertex(p,nclip,vclip);
}
else if (inside(s,plane)) {
i = intersection(s,p,plane);
nclip = addVertex(i,nclip,vclip);
}
s = p;
}
return nclip;
97
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
a = p.x - s.x;
b = p.y - s.y;
c = p.z - s.z;
t = ( (plane[0].x-s.x)*plane[1].x + (plane[0].y-s.y)*plane[1].y +
(plane[0].z-s.z)*plane[1].z ) /
( a*plane[1].x + b*plane[1].y + c*plane[1].z );
i.x = s.x + a*t;
i.y = s.y + b*t;
i.z = s.z + c*t;
return i;
}
98
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
x = x(t)
(a) y = y(t)
z = z(t)
y
x = x(s, t)
(b) y = y(s, t)
x z = z(s, t)
z
x = x(r, s, t)
(c) y = y(r, s, t)
z = z(r, s, t)
99
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
x = x(t) (4.1)
y = y(t) (4.2)
z = z(t) (4.3)
til em muitos casos. Uma curva genrica pode ser representada por segmentos, sendo
cada segmento Q definido por polinmios de grau p no parmetro t. Por exemplo, os
polinmios cbicos que definem um segmento,
so dados por:
x(t) = ax . t3 + bx . t2 + cx . t + dx (4.5)
y(t) = ay . t3 + by . t2 + cy . t + dy (0 t 1) (4.6)
z(t) = az . t3 + bz . t2 + cz . t + dz (4.7)
T = [ t3 t2 t 1] (4.9)
a x ay az
b by b z
C =
x
(4.10)
c x cy cz
d x dy d z
100
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
Q( t ) = Q ( t ) = x( t ) z( t ) =
d d d d
y( t )
dt dt dt dt
(4.11)
=
dT
dt [
. C = 3t 2 2t 1 0 C ]
101
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
C = M.G (4.12)
sendo,
m 11 m 12 m 13 m14
m m 22 m 23 m 24
M =
21
(4.13)
m 31 m 32 m 33 m 34
m 41 m 42 m 43 m 44
g 1x g 1y g 1z
g g 2 z
[ ]
g 2y
=
2x
G = Gx Gy Gz (4.14)
g 3x g 3y g 3z
g 4 x g 4y g 4 z
ou,
102
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
103
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
P1x 0 0 0 1
P 1 1 1 1
2x = G = M .G (4.25)
P3 x 1 / 27 1 / 9 1 / 3 1
Lx L Lx
P4 x 8 / 27 4 / 9 2 / 3 1
Para que a expresso acima seja vlida, a matriz base deve ser igual a:
1
0 0 0 1 9 / 2 9 / 2 27 / 2 27 / 2
1 1 1 1 9 9 / 2 45 / 2 18
ML = = (4.26)
1 / 27 1 / 9 1 / 3 1 11 / 2 1 9 9 / 2
8 / 27 4 / 9 2 / 3 1 1 0 0 0
Fazendo,
BL = T. ML (4.27)
BL = [ L1 L2 L3 L4 ] (4.29)
104
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
f(t)
1.5
L3 L4
1
0.5 L2
L1
t
0
0 1/3 2/3 1
-0.5
L1 + L2 + L3 + L 4 = 1 (0 t 1) (4.34)
1 , t = ti
Li = (4.35)
0, t = t j ( j i)
d
Q ( t ) = [ 3t 0] . M L . G L = B L . G L
2
2t 1 (4.36)
dt
d d d d d
x( t ) = L 1 . P1x + L 2 . P2 x + L 3 . P3x + L 4 . P4 x =
dt dt dt dt dt
105
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
27 2 11 27 2
= t + 18 t . P1x + t 9 t + 1 . P2 x +
2 2 2
(4.37)
81 2 81 2 9
+ t 45 t + 9 . P3x + t 36 t . P4 x
2 2 2
d 27 27 81 81
x( t ) = P1x + P2 x + P3x P4 x t 2 +
dt 2 2 2 2
11 9
P1x + P2 x + 9 P3x P4 x
2 2
Para que esta componente de velocidade seja constante, os termos em t e t2 devem ser
iguais a zero. Isto acontece se os pontos Pi esto igualmente espaados em x (ver Figura
4.5), ou seja:
x = P2 x P1x (4.39)
x
P3 x = P1x + (4.40)
3
x
P4 x = P2 x (4.41)
3
106
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
107
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
ou de modo equivalente,
P1x 0 0 0 1
P 1 1 1 1
2x = G M .G
Hx = (4.49)
R 1x 0 0 1 0
H Hx
R 2 x 3 2 1 0
Para a expresso acima ser satisfeita, a matriz base MH deve ser igual a:
1
0 0 0 1 2 2 1 1
1 1 1 1 3 3 2 1
MH = = (4.50)
0 0 1 0 0 0 1 0
3 2 1 0 1 0 0 0
BH = T. MH (4.51)
108
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
BH = [ H1 H2 H3 H4 ] (4.53)
H1 = 2 t3 - 3 t2 + 1 (4.54)
H2 = -2 t3 + 3 t2 (4.55)
H3 = t3 - 2 t2 + t (4.56)
H4 = t3 - t2 (4.57)
f(t)
1
H1 H2
0.5
H3
0 t
0 0.5 1
H4
-0.5
109
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
P1
P
=
2
G 1H (4.59)
R 1
R 2
P2
P
=
3
G 2H (4.60)
k . R 2
R3
110
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
GH = MHB . GB (4.64)
obtida da relao:
P1 1 0 0 0 P1
P 0 1 0 0 P
= = 2 = M .G
2
GH (4.65)
R 1 3 0 3 0 P3
HB B
R 2 0 3 0 3 P4
111
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
1 1 33
3 0 6 3
M B = M H . M HB = (4.67)
3 0 3 0
1 0 0 0
Q(t) = BB . GB (4.69)
BB = T . MB = [ B1 B2 B3 B4 ] (4.70)
B2 = t3 (4.72)
B3 = 3t (1 - t)2 (4.73)
B4 = 3t2 (1 - t) (4.74)
112
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
Bi 0
( 0 t 1) (4.76)
B +B +B +B = 1
1 2 3 4
f(t)
1
B1 B2
B3 B4
0.5
0 t
0 0.5 1
Exerccio
Seja um polinmio cbico Q(t) em duas dimenses, com as condies P1, P2, R1 =
(P3 - P1) e R2 = (P2 - P4). Sendo P1 = (0, 0), P2 = (3, 0), P3 = (1, 0) e P4 = (2, 0)
(Figura 4.11), mostre que deve ser igual a 3 para que a curva paramtrica Q(t) tenha
velocidade constante.
x
P1 P3 P4 P2
Figura 4.11 - Polinmio cbico com os quatro pontos de controle sobre o eixo x.
113
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
P1x = 0 (4.79)
P2x = 3 (4.80)
chega-se ao resultado:
Portanto, para que a expresso acima seja constante, deve ser igual a 3.
4.1.4 B-splines
B-splines cbicas aproximam uma srie de m+3 pontos de controle, P0, P1, ...,
Pm+2, por uma curva constituda de m segmentos polinomiais cbicos, Q0, Q1,...,Qm-1 . Os
pontos extremos de cada segmento Qi (t), i = 0,..., m-1, so os pontos Qi(ti) e Qi(ti+1), ou
seja, o parmetro t varia no intervalo ti t ti+1 em cada segmento (Figura 4.12).
114
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
A letra B refere-se ao termo base, uma vez que a curva aproximada pode ser
escrita na forma de uma combinao linear de funes de base. Se os intervalos ti = ti+1-ti,
so iguais para todos os segmentos, ento a curva dita uniforme. Pode-se assumir, por
exemplo, t0 = 0 e ti = 1.
Pi
P
=
i+ 1
G BSi , i = 0,..., m 1 (4.84)
Pi+ 2
Pi +3
115
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
Das expresses (4.85) e (4.86) pode-se concluir que, de modo geral, o segmento Qi
comea prximo ao ponto Pi+1 e termina prximo ao ponto Pi+2. Assim como cada
segmento definido por quatro pontos de controle, cada ponto de controle (exceto P0 e
Pm+2) tem efeito sobre quatro segmentos de curva. O deslocamento de um ponto de
controle em uma dada direo provoca movimento das quatro curvas sob a influncia deste
ponto na mesma direo. Os demais segmentos permanecem inalterados. Esta uma
caracterstica que permite um controle local da curva. Definindo,
Q i ( t ) = T . M BS . G BS i , ( 0 t 1) (4.91)
Q i ( 0) = [ 0 0 0 1] . M BS . G BS i (4.93)
Q i ( 0) = [ 0 0 1 0] . M BS . G BSi (4.95)
116
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
ou,
Q i ( 0) 0 0 0 1
Q (1) 1 1 1 1
i = M .G (4.97)
Q i ( 0) 0 0 1 0
BS BSi
Q i (1) 3 2 1 0
Por outro lado, aplicando a mesma mudana de varivel s equaes (4.85)-(4.88), obtm-
se:
Q i ( 0) 1 4 1 0
Q (1) 0 1 4 1
i = 1 G (4.98)
Q i ( 0) 6 3 0 3 0
BSi
Q i (1) 0 3 0 3
0 0 0 1 1 4 1 0
1 1 1 1 4 1
M 1 0 1
= (4.99)
0 0 1 0 6 3 0 3 0
BS
3 2 1 0 0 3 0 3
1
0 0 0 1 1 4 1 0 1 3 3 1
1 1 1 0
1 1 1 0 1 4 1 3 6 3
M BS = = (4.100)
0 0 1 0 6 3 0 3 0 6 3 0 3 0
3 2 1 0 0 3 0 3 1 4 1 0
B BS = [ BS 0 BS1 BS 2 BS 3 ] (4.101)
1
BS 0 = (1 t ) 3 (4.102)
6
1
BS 1 = ( 3t 3 6 t 2 + 4) (4.103)
6
117
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
1
BS 2 = ( 3t 3 + 3t 2 + 3t + 1) (4.104)
6
1 3
BS 3 = t (4.105)
6
Q i ( t t i ) = B BS . G BS i =
(4.106)
= BS 0 . Pi + BS 1 . Pi +1 + BS 2 . Pi +2 + BS3 . Pi+ 3 , ( t i t t i +1 )
BS i 0
( 0 t 1) (4.107)
BS + BS + BS + BS = 1
0 1 2 3
Isto significa que cada segmento Qi (t-ti) deve estar contido no interior do polgono convexo
formado pelos quatro pontos de controle (ver Figura 4.14). Se trs pontos de controle so
coincidentes, o polgono degenera-se em uma reta, e em consequncia o segmento curvo
ter que ser necessariamente tambm uma reta.
f(t')
2/3
BS2 BS1
1/2
1/3
0 t'
0 0.5 1
118
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
Figura 4.14 - Quadriltero formado pelos quatro pontos de controle de uma B-spline
cbica.
d d
x i ( t i +1 ) = x i +1 ( t i +1 ) (4.109)
dt dt
d2 d2
x ( t
i i +1 ) = x i + 1 ( t i+ 1 ) (4.110)
dt 2 dt 2
xi t = 1
= x i +1 t = 0 (4.111)
d d
xi = x i +1 (4.112)
dt t = 1 dt t = 0
d2 d2
xi = x i +1 (4.113)
dt 2 t = 1
dt 2 t = 0
119
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
d
dt
B BS =
1
6
[
3(1 t ) 2 ( 9t 2 12t ) ( 9 t 2 + 6 t + 3) 3t 2 ] (4.114)
d2
BBS = [ 6(1 t ) (18t 12) ( 18 t + 6) 6t ]
1
2
(4.115)
dt 6
BBS t =0
= [1 / 6 2 / 3 1 / 6 0] (4.116)
BBS t =1
= [0 1 / 6 2 / 3 1 / 6] (4.117)
= [ 1 / 2 0 1 / 2 0]
d
B BS (4.118)
dt t = 0
= [ 0 1 / 2 0 1 / 2]
d
B BS (4.119)
dt t =1
d2
B BS = [1 2 1 0] (4.120)
dt 2 t =0
d2
BBS = [0 1 2 0] (4.121)
dt 2 t =1
120
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
Pi ,x
P
x i = B BS . G BSi = B BS i+1, x
(4.122)
Pi +2 ,x
Pi +3, x
Pi +1,x
P
x i+1 = B BS . G BSi +1 = BBS i +2 , x (4.123)
Pi+ 3,x
Pi +4 ,x
pode-se escrever:
1 2 1
xi t = 1
= BBS t = 1
. G BSi = Pi +1,x + Pi+ 2,x + Pi +3,x (4.124)
6 3 6
1 2 1
x i+1 t = 0 = BBS t = 0
. G BSi +1 = Pi+1,x + Pi +2 ,x + Pi+ 3,x (4.125)
6 3 6
d d 1
x = B . G BSi = (P Pi+1,x ) (4.126)
dt i t =1 dt BS t =1 2 i +3,x
d d 1
x i+ 1 = B BS . G BS i+1 = ( Pi +3,x Pi+1,x ) (4.127)
dt t = 0 dt t = 0 2
d2 d2
xi = BBS . G BSi = Pi+1,x 2Pi+ 2,x + Pi +3,x (4.128)
dt 2 t =1
dt 2 t = 1
d2 d2
x i +1 = BBS . G BSi+1 = Pi +1,x 2 Pi +2 ,x + Pi+ 3,x (4.129)
dt 2 t = 0
dt 2 t = 0
121
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
Assim como as curvas, uma superfcie Q pode tambm ser representada de forma
paramtrica (Figura 4.16):
S = [ s3 s2 s 1 ] (4.134)
T = [ t3 t2 t 1] (4.135)
t
y
Q(s, t) 1
x s
0
1
122
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
onde ML a matriz base de Lagrange obtida em (4.26), e GLx , GLy , GLz so as matrizes
geomtricas nas direes x, y e z:
123
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
x( t ) = B L ( s). G Lx . B L t ( t ) (4.144)
y( t ) = B L ( s). G Ly . B L t ( t ) (4.145)
z( t ) = B L ( s). G Lz . B L t ( t ) (4.146)
4 4
x( t ) = L i (s). L j ( t). Pij,x (4.147)
j= 1 i= 1
4 4
y( t ) = L i (s). L j ( t). Pij,y (4.148)
j= 1 i= 1
4 4
z( t ) = L i (s ). L j (t). Pij,z (4.149)
j= 1 i= 1
124
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
i j ( s, t ) = L i ( s). L j ( t ) (4.150)
O mesmo raciocnio vlido para uma superfcie de grau p, com (p+1)2 pontos de controle.
x( s, t ) = S . M H . G Hx . M tH . T t (4.151)
y( s, t ) = S . M H . G Hy . M tH . T t (4.152)
z( s, t ) = S . M H . G Hz . M tH . T t (4.153)
onde MH a matriz base de Hermite da equao (4.50), e GHx , GHy e GHz so as matrizes
geomtricas para x, y e z:
x( 0, 0 ) x ( 0, 1)
t
x ( 0, 0)
t
x ( 0, 1)
x(1, 0) x (1, 1) x (1, 0) x (1, 1)
t s
G Hx = (4.154)
2 2
s x( 0, 0) s x ( 0, 1) s t
x ( 0, 0)
st
x ( 0, 1)
x(1, 0) x(1, 1) 2
x (1, 0)
2
x(1, 1)
s s st st
125
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
y( 0, 0) y (0, 1)
t
y ( 0, 0)
t
y ( 0, 1)
y(1, 0) y (1, 1) y(1, 0) y(1, 1)
t s
G Hy = (4.155)
2 2
s y( 0, 0) s
y (0, 1)
st
y( 0, 0)
st
y ( 0, 1)
y(1, 0)
y (1, 1)
2
y(1, 0)
2
y(1, 1)
s s st st
z( 0, 0 ) z (0 , 1)
t
z( 0, 0)
t
z( 0, 1)
z (1, 0) z (1, 1) z(1, 0) z(1, 1)
t s
G Hz = (4.156)
2 2
s z( 0, 0)
s
z ( 0 , 1)
st
z( 0, 0)
st
z( 0, 1)
z (1, 0) z (1, 1) z(1, 0) 2
2
z(1, 1)
s s st st
x( s, t ) = S . M B . G Bx . M tB . T t (4.157)
y( s, t ) = S . M B . G By . M tB . T t (4.158)
z( s, t ) = S . M B . G Bz . M tB . T t (4.159)
onde MB a matriz base de (4.67), e as matrizes geomtricas GBx GBy e GBz contm os 16
pontos de controle da superfcie (Figura 4.18):
126
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
- lista de polgonos
127
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
z n
Vi = (xi , yi , zi ) (4.165)
Cada polgono definido por uma lista de ndices apontadores da lista de vrtices (Figura
4.20). Neste mtodo, as coordenadas de cada vrtice so armazenadas apenas uma vez, e
podem ser modificadas facilmente. No entanto, algumas dificuldades persistem, como por
exemplo, o problema de traar duas vezes arestas partilhadas.
V1 V5
P1 = (1, 2, 3, 5)
P1 P2
V4 P2 = (5, 3, 4)
V2
V3
128
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
Cada elemento da lista de arestas contm dois apontadores para a lista de vrtices, que
representam suas extremidades, e tambm k apontadores para a lista de polgonos, que
indicam o polgono ou polgonos que contm a aresta:
129
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
130
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
em geral a ordenao pelo centro geomtrico ou por zmin no suficiente para determinar a
visibilidade de uma primitiva. O algoritmo descrito a seguir, desenvolvido por Newell,
Newell e Sancha [9], aplicvel a polgonos planos e realiza, alm da ordenao inicial,
alguns testes para determinar a visibilidade de uma primitiva.
Se algum destes testes for positivo, os demais no so realizados e pode-se afirmar que o
polgono P no interfere na visibilidade de Q. Se os 5 testes forem negativos assume-se que
Q oculto por P e os testes 3 e 4 so aplicados novamente, trocando-se P por Q:
Se algum dos testes acima for positivo, como ocorre no exemplo da Figura 5.3a, ento Q
movido para o incio da lista ordenada e o algoritmo prossegue com Q assumindo o lugar
de P. Em caso contrrio (Figura 5.3b), deve-se particionar um dos polgonos utilizando o
plano do outro como plano de recorte. As novas partes so inseridas na lista ordenada nas
posies apropriadas, conforme suas profundidades mnimas, e o algoritmo prossegue
normalmente.
131
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
Os polgonos que so movidos para o incio da lista devem ser marcados de modo
a evitar um loop infinito, como ocorreria no caso da Figura 5.4. Neste exemplo,
impossvel estabeler uma ordem correta de visibilidade. Assim, quando um polgono P
marcado no passar nos cinco testes, quando comparado com algum polgono Q, os testes
3 e 4 no devem ser repetidos. Quando esta situao ocorre, procede-se como se os testes
3 e 4 fossem ambos negativos, particionando-se um dos polgonos.
extenses em z
de P e Q
P P
Q
Q
z z
(a) (b)
132
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
P
Q
P Q
x
z
(a) (b)
R
Q
133
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
5.3 RAY-TRACING
134
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
x = x 0 + t x (5.1)
y = y 0 + t y (5.2)
z = z 0 + t z (5.3)
sendo x, y e z iguais a:
x = x 1 x 0 (5.4)
y = y 1 y 0 (5.5)
z = z1 z 0 (5.6)
O parmetro t varia no intervalo [0, 1] para pontos situados entre o centro de projeo e o
plano de projeo, assumindo valores maiores que 1 para pontos mais distantes do que o
plano de projeo. Portanto, para determinar o ponto de interseo mais prximo do
observador, basta saber qual a interseo com menor valor de t. Para calcular a
interseo das linhas de projeo com polgonos, deve-se primeiro saber se a reta
intercepta o plano que contm o polgono. Sendo (xp, yp, zp) as coordenadas de um dos
vrtices do polgono, e (nx, ny, nz) os cossenos diretores de sua normal, o valor de t para o
ponto de interseo :
(x p x 0 ) . n x + (y p y 0 ) . n y + ( z p z 0 ) . n z
t = (5.7)
x . n x + y . n y + z . n z
135
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
polgonos
interceptados
centro de
janela de
projeo
visualizao
136
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
6 REFERNCIAS
1. Foley, J. D., van Dam, J., Feiner, S. K. and Hughes, J. F., Computer Graphics -
Principles and Practice, 2nd edition, Addison-Wesley, 1992.
3. Bresenham, J. E., Algorithm for Computer Control of a Digital Plotter, IBM System
Journal, vol. 4(1), pp. 25-30, 1965.
4. Stollnitz, E. J., DeRose, T. D. and Salesin, D. H., Wavelets for Computer Graphics: a
Primer, Part 1, IEEE Computer Graphics and Applications (CG & A), vol. 15(3),
pp. 76-83, 1995.
5. Stollnitz, E. J., DeRose, T. D. and Salesin, D. H., Wavelets for Computer Graphics: a
Primer, Part 2, CG & A, vol. 15(4), pp. 75-85, 1995.
9. Newell, M. E., Newell, R. G. and Sancha, T. L., A Solution to the Hidden Surface
Problem, Proc. of the ACM National Conference, pp. 443-450, 1972.
10. Watkins, C., Sadun, A. and Marenka, S., Modern Image Processing: Warping,
Morphing and Classical Techniques, Academic Press, !993.
11. Young, T. Y. and Fu. K. S., eds., Handbook of Pattern Recognition and Image
Processing, Academic Press, 1968.
12. Young, T. Y., ed., Handbook of Pattern Recognition and Image Processing:
Computer Vision, Academic Press, 1994
13. Faux, I. D. and Pratt, M. J., Computational Geometry for Design and Manufacture,
Ellis Horwood, 1979.
14. Catmull, E., A Subdivision Algorithm for Computer Display of Curved Surfaces,
Ph.D. Thesis, University of Utah, Salt Lake City, UT, USA, December, 1974.
137
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro
15. Appel, A., Some Techniques for Shading Machine Renderings of Solids, Proc. of the
Spring Joint Computer Conference, pp. 37-45, 1968.
16. Goldstein, R. A. and Nagel, R., 3-D Visual Simulation, Simulation, vol. 16(1), pp.
25-31, 1971.
17. Whitted, T., An Improved Illumination Model for Shaded Display, Communications
of the Association for Computing Machinery (CACM), vol. 23(6), pp. 343-349,
1980.
18. Haines, E. A., Essencial Ray Tracing Algorithms, Glasser, A. S., ed., An
Introduction to Ray Tracing, pp. 33-37, Academic Press, 1989.
19. Hanrahan, P., A Survey of Ray-Surface Intersection Algorithms, Glasser, A. S., ed.,
An Introduction to Ray Tracing, pp. 79-119, Academic Press, 1989.
138