Vous êtes sur la page 1sur 138

Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

NDICE

1 TCNICAS DE RASTER 7

1.1 CONVERSO DE SEGMENTOS DE RETA 7


1.1.1 Algoritmo bsico incremental 8
1.1.2 Algoritmo do ponto mdio 9
1.2 PREENCHIMENTO DE POLGONOS 14
1.3 OPERAES COM BLOCOS 18
1.3.1 Modos de escrita 18
1.3.2 Escalonamento de imagem 19
1.4 PADRES DE PREENCHIMENTO 20
1.5 ESPESSURA DE SEGMENTOS DE RETA 21
1.6 RECORTE DE SEGMENTOS DE RETA 22
1.7 RECORTE DE POLGONOS 28

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

4 REPRESENTAO DE CURVAS E SUPERFCIES 99

4.1 CURVAS PARAMTRICAS 100


4.1.1 Polinmios de Lagrange 103

2
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

4.1.2 Polinmios cbicos de Hermite 107


4.1.3 Curvas de Bzier 110
4.1.4 B-splines 114
4.2 SUPERFCIES PARAMTRICAS 122
4.2.1 Superfcies de Lagrange 123
4.2.2 Superfcies cbicas de Hermite 125
4.2.3 Superfcies de Bzier 126
4.3 SUPERFCIES POLIDRICAS 127

5 ELIMINAO DE SUPERFCIES OCULTAS 130

5.1 ALGORITMO DE PRIORIDADES 130


5.2 ALGORITMO Z-BUFFER 134
5.3 RAY-TRACING 134

6 REFERNCIAS 137

3
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

INTRODUO

A computao grfica consiste na sintetizao da imagem de objetos reais ou


imaginrios a partir de seus modelos descritivos. O processamento de imagens, por outro
lado, trata do processo inverso: a reconstruo de modelos 2D ou 3D a partir de suas
imagens. Tcnicas tais como filtragem [10] e reconhecimento de padres [11,12] esto
relacionadas ao processamento de imagem. Embora tenham sido tratadas em separado at
recentemente, a interseo destas duas reas vem aumentando de modo crescente. So
inmeras as aplicaes da computao grfica, como por exemplo:

Desenvolvimento de interfaces grficas (window managers).

Em aplicaes CAD (computer-aided design), a computao grfica utilizada no


projeto de componentes mecnicos, eltricos, incluindo projetos de estruturas,
automveis, avies, navios, plantas de arquitetura, etc.

Visualizao cientfica.

Produo de desenhos animados, comerciais, efeitos especiais na televiso e no cinema.

Cartografia.

Na rea de computao cientfica, onde predominam os mtodos dos elementos


finitos e de diferenas finitas, a utilizao de programas para a visualizao de dados
numricos (visualizao cientfica) tornou-se obrigatria. Estes programas possibilitam a
representao grfica esttica e animada de grandezas escalares, vetoriais e de partculas.

Os principais dispositivos de sada grfica so os monitores de vdeo. Estes


dispositivos podem ser classificados em duas categorias:

dispositivos VETORIAIS

dispositivos tipo RASTER

Tanto na computao grfica propriamente dita quanto no processamento de


imagem, os dispositivos de vdeo mais utilizados hoje so os dispositivos do tipo raster.

Um dispositivo tipicamente vetorial consiste em um processador de controle, um


buffer de memria e um CRT (tubo de raios catdicos). O buffer armazena os comandos
para o traado de pontos, linhas e caracteres. Estes comandos so ciclicamente
interpretados pelo processador de controle e enviados ao CRT, de modo que o canho de
eltrons se mova de um ponto para outro formando segmentos de reta na tela (Figura 1).
Alm dos componentes de um dispositivo vetorial, os sistemas do tipo raster
possuem ainda uma controladora de vdeo. A imagem formada por uma matriz de pixels
representando a tela. A matriz de pixels armazenada no buffer, que por sua vez

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.

Devido representao discreta da tela nos sistemas tipo raster, tornou-se


imprescindvel o desenvolvimento de tcnicas adequadas (tcnicas de raster) para o traado
de primitivas tais como linhas, polgonos, curvas, preenchimento de reas e tambm para a
manipulao de imagens armazenadas sob o formato de bitmap. Este assunto abordado
no captulo 1 do presente texto, onde os algoritmos discutidos so implementados em
linguagem C de programao. No captulo 2 so estudadas transformaes geomtricas em
duas e trs dimenses, introduzindo-se o conceito de coordenadas homogneas, que
permitem uma padronizao das operaes matriciais de transformao essenciais para a
representao grfica dos objetos. As ferramentas descritas neste captulo so utilizadas no
captulo 3, que trata da visualizao tridimensional de objetos. Este captulo inicia com um
breve estudo sobre projees, apresentando em seguida um modelo de visualizao
tridimensional. O modelo apresentado similar ao do padro PHIGS (Programmers
Hierarchical Interactive Graphics System), e compreende a definio de um volume de
visualizao e a caracterizao das transformaes necessrias para a representao de um
objeto qualquer em um dispositivo de sada grfica, seja este vetorial ou do tipo raster. Ao
final do captulo apresenta-se um algoritmo clssico para o recorte de polgonos em trs
dimenses. O captulo 4 apresenta as principais formas de representao paramtrica de
curvas e superfcies, encerrando com a descrio de estruturas de dados para o tratamento
de superfcies polidricas. Finalmente, o captulo 5 aborda o tema da eliminao de
superfcies ocultas, descrevendo os algoritmos de prioridades, Z-buffer e ray-tracing.

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

Figura 1 - Dispositivo de vdeo vetorial.

CPU
ou servidor
BUFFER
001001011000 comandos
001001111111
110101011100
001111110001 Processador de Teclado
111110011000 controle Mouse
001010101010
111100001110
010101010101
001100000000

Controladora de CRT
vdeo

Figura 2 - Dispositivo do tipo raster.

6
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

1 TCNICAS DE RASTER

1.1 CONVERSO DE SEGMENTOS DE RETA

A converso de segmentos de reta (ou simplesmente linhas) em um grid 2D de


pixels consiste em determinar quais os pixels que fornecem a melhor aproximao do
segmento (ver Figura 1.1). Este processo chamado converso por varredura.

As caractersticas essenciais de um algoritmo de converso de linhas devem ser, em


primeiro lugar, que o segmento convertido comece e termine exatamente sobre as
extremidades P0(x0, y0) e P1(x1, y1). Esta caracterstica implica que as coordenadas (x0, y0)
e (y0, y0) devem ser definidas como inteiros. Em segundo, que os pixels selecionados
quando o segmento tem orientao P0 P1 sejam os mesmos selecionados no caso em
que o segmento tem orientao inversa, ou seja, os pixels ligados devem independer da
orientao da reta.

A seguir so descritos dois algoritmos, o algoritmo bsico incremental [1,2] e o


algoritmo do ponto mdio [1], sendo este ltimo equivalente ao algoritmo de Bresenham
[2,3].

0 1 2 3 4 5
0 x

Figura 1.1 - Converso de segmentos de reta em pixels.

7
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

1.1.1 Algoritmo bsico incremental

O algoritmo bsico incremental, tambm conhecido como DDA (digital differencial


analyzer), assume as seguintes hipteses:

a) O ponto extremo (x0, y0) encontra-se esquerda de (x1,y1).

b) A inclinao m = (y1-y0) / (x1-x0) tal que : |m| 1.

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: */

int round(float x);

/* Rotina para a converso de linhas pelo mtodo DDA : */

void line (int x0,int y0,int x1,int y1,int color)


{
int x, round( );
float dx, dy, y, m;

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;
}
}

/* Rotina para o arredondamento de um nmero real: */

int round(float x)
{
return( (int)floor(x+0.5) );
}

Figura 1.2 - Algoritmo para converso de linhas pelo mtodo DDA.

8
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

1.1.2 Algoritmo do ponto mdio

O algoritmo do ponto mdio utiliza apenas aritmtica inteira e produz o mesmo


resultado, ou seja, gera os mesmos pixels, que o algoritmo de Bresenham.

Considere inicialmente uma reta de inclinao 0 m 1, sendo (x0,y0) o


ponto extremo esquerdo inferior e (x1,y1) a extremidade direita superior (Figura 1.3).
Assumindo que o pixel P(xp,yp) tenha sido selecionado, o prximo passo consiste em
escolher entre os pixels E (um incremento direita de P) e NE (um incremento direita e
um incremento acima de P), como mostra a Figura 1.4.

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

Figura 1.3 - Reta no 10 octante.

NE
Q
M

P E

Figura 1.4 - Critrio de seleo de um pixel.

9
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

A linha pode passar entre NE e E, ou ambos os pixels podem estar de um mesmo


lado da linha, mas, em qualquer das hipteses, o teste do ponto mdio seleciona o pixel
mais prximo. O erro, ou seja, a distncia vertical entre o pixel e a linha, ser sempre
1/2. Representando a reta na forma,

F( x, y) = ax + by + c = 0 (1.1)

e comparando com a equao:

dy
y = x + B (1.2)
dx

pode-se verificar que os coeficientes de (1.1), a, b e c so iguais a:

a = dy

b = - dx

c = B dx

sendo dx = x1 - x0 e dy = y1 - y0. A funo F(x,y) igual a zero para os pontos da reta,


positiva para os pontos abaixo da reta, e negativa para os pontos acima da reta. Para
aplicar o critrio do ponto mdio deve-se, portanto, utilizar uma varivel de teste d igual a:

d = F( M ) = F( xp+1, yp+1/2 ) (1.3)

Utilizando a expresso (1.1) obtm-se :

d = a . ( xp+1) + b . ( yp+1/2 ) + c (1.4)

Se d > 0, seleciona-se o pixel NE, e se d 0 seleciona-se o pixel E. O ponto mdio M e o


valor de d para a linha vertical seguinte do grid, x = xp + 2, dependem ambos da escolha
entre E e NE. Se E foi escolhido, o ponto M incrementado em 1 na direo x:

dnew = F( xp+2, yp+1/2 ) = a . ( xp+2 ) + b . ( yp+1/2 ) + c (1.5)

Fazendo,

dold = a . ( xp+1 ) + b . (yp+1/2) + c (1.6)

e subtraindo dold de dnew obtm-se a diferena incremental E:

E = dnew - dold = a . [(xp+2)-(xp+1)] = a = dy (1.7)

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

Se o pixel NE foi o escolhido, o ponto M incrementado em uma unidade em ambas as


direes x e y, e ento:

dnew = F( xp + 2, yp + 3/2 ) = a . ( xp + 2 ) + b . ( yp + 3/2 ) + c (1.9)

Neste caso, a diferena incremental NE dada por:

NE = dnew - dold = a + b = dy - dx (1.10)

e, em consequncia,

dnew = dold + NE = dold + a + b (1.11)

Em resumo, o algoritmo do ponto mdio seleciona, em cada passo, um entre dois


pixels, dependendo do sinal da varivel de teste. A varivel de teste ento atualizada
somando-se E ou NE, conforme o pixel escolhido no passo anterior. O primeiro pixel
simplesmente a extremidade ( x0, y0 ), e o primeiro valor de d calculado atravs da
expresso:

dstart = F ( x0+1, y0+1/2 ) = a ( x0+1 ) + b ( y0+1/2 ) + c =

= F ( x0, y0 ) + a + b / 2 (1.12)

Como ( x0, y0 ) um ponto da reta, ento a expresso acima se reduz a:

dstart = a + b/2 = dy - dx/2 (1.13)

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)

Pode-se ento escrever:

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)

O algoritmo da Figura 1.5 sintetiza o desenvolvimento acima. Na generalizao do


algoritmo do ponto mdio para qualquer inclinao deve-se assegurar que o segmento de
reta P0P1 contm os mesmos pixels que o segmento P1P0. A nica situao em que a
escolha do pixel depende da direo da reta quando a linha passa exatamente pelo ponto

11
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

mdio M, ou seja, quando d = 0. Portanto, quando se caminha da direita para a


esquerda, deve-se selecionar o pixel SW para d = 0, como mostra a Figura 1.6. A Figura
1.7 ilustra as oito possibilidades a serem consideradas na generalizao do algoritmo.

/* Rotina para converso de linhas pelo mtodo do ponto mdio : */

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 ;

for ( x = x0 ; x < x1 ; x++ ) {


writepixel ( x, y, color );
if ( d > 0 ) {
d = d + incrNE ;
y++; }
else
d = d + incrE ;
}
writepixel ( x, y, color ) ;
}

Figura 1.5 - Converso de linhas pelo mtodo do ponto mdio.

( x0, y0 )
W

( x1, y1 )

P SW

Figura 1.6 - Sentido direita-esquerda na converso de linhas.

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

(c) m >1 (d) m < -1

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

Figura 1.7 - Inclinao de retas nos oito octantes.

13
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

1.2 PREENCHIMENTO DE POLGONOS

O algoritmo descrito a seguir permite a converso por varredura de polgonos


cncavos e convexos [1,2]. O algoritmo opera calculando os intervalos das linhas de
varredura que residem no interior do polgono, como mostra a Figura 1.8.

YMAX

linha de varredura

YMIN
x

Figura 1.8 - Linhas de varredura para preenchimento de polgonos.

Seja um polgono de n arestas, das quais somente p arestas no so horizontais.


Deve-se inicialmente construir uma tabela contendo, para cada aresta no horizontal, os
valores mnimos e mximos de y, o valor de x correspondente ao ponto de y mnimo (xmin),
e o inverso da inclinao (Figura 1.9).

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).

aresta ymin ymax x de ymin = xmin m = x / y


0
1

p-1

Figura 1.9 - Lista de arestas no horizontais.

14
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

linha de varredura

0 1 0 1 0
x

Figura 1.10 - Paridade de segmentos de reta horizontais entre arestas.

Este algoritmo representado pela funo fillarea da Figura 1.13. So chamadas


as funes ordena_xmin, que ordena as arestas, e horizontal, que ativa os pixels de um
segmento de reta horizontal entre pares de arestas. A funo writepixel, j comentada
antes, utilizada pela funo horizontal. Os parmetros de entrada da funo fillarea so
dois arranjos, x e y, contendo as coordenadas dos vrtices do polgono, e o nmero de
vrtices nv. A nica restrio que os vrtices do polgono devem ser armazenados em um
determinado sentido, horrio ou anti-horrio, formando uma poligonal fechada. Assim como
na rasterizao de linhas, os vrtices so especificados atravs de variveis inteiras. As
coordenadas x das extremidades dos segmentos horizontais a serem rasterizados so
tratadas como variveis reais, que so arredondadas para inteiros na chamada da funo
horizontal.

Inicialmente, o algoritmo percorre todas as arestas, formando a tabela da Figura


1.9. Em seguida, verifica as arestas que interceptam cada linha de varredura, marcando a
paridade de cada segmento horizontal entre intersees. Os vrtices correspondentes aos
valores mximos de y no so levados em conta nesta verificao, para evitar os erros que
ocorreriam em situaes como as da Figura 1.11. Na Figura 1.11a, se o vrtice C da aresta
BC fosse considerado como interseo da linha de varredura de coordenada yC, o
segmento CD teria paridade mpar e no seria convertido. Na Figura 1.11b, o vrtice E
seria interpretado como um segmento de paridade mpar, e o segmento EC seria
convertido, na linha de varredura yE.

Pelo fato de no considerar os vrtices com valores mximos em y como


intersees, os pontos e segmentos pertencentes linha de varredura y = YMAX no so
convertidos por este algoritmo, tal como este se encontra implementado. Portanto, as
arestas EF e GH das Figuras 1.11a e 1.11b no so convertidas. Este problema pode ser
resolvido tratando-se a linha de varredura y = YMAX isoladamente. Para esta linha, os
vrtices das arestas seriam considerados como intersees.

15
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Outro inconveniente deste algoritmo a ordenao de todas as arestas, a cada linha


de varredura. A eficincia do algoritmo pode ser melhorada construindo-se uma lista de
arestas ativas, ou seja, uma lista que fornea para cada linha de varredura as arestas que a
interceptam [1, 2].
Em cantos formados por arestas com inclinaes menores que 1, em valor absoluto,
o preenchimento fica comprometido, como mostra a Figura 1.12. Como os incrementos so
feitos em y, as inclinaes mais adequadas so maiores que 1. No entanto, este problema
corrigido se os contornos so convertidos por um algoritmo de segmentos de reta.

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.

Figura 1.12 - Exemplo de falha no preenchimento de cantos: os pixels correspondentes s


intersees das trs verticais subsequentes ao vrtice esquerdo com as arestas no so
convertidos.

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);

/* Rotina para preenchimento de polgonos : */


void fillarea(int nv,int x[],int y[])
{
int YMIN, YMAX, yi, ymin[MAX], ymax[MAX], i, j, p = 0;
float xi[MAX], m[MAX];
char par, MASK = 1;

YMIN = YMAX = y[0];


i = nv-1;
for (j = 0; j < nv; j++) {
YMIN = min(YMIN,y[j]);
YMAX = max(YMAX,y[j]);
if (y[j] > y[i]) {
ymin[p] = y[i];
ymax[p] = y[j];
xi[p] = x[i];
m[p] = (float)(x[j]-x[i])/(y[j]-y[i]);
p++; }
else if (y[i] > y[j]) {
ymin[p] = y[j];
ymax[p] = y[i];
xi[p] = x[j];
m[p] = (float)(x[i]-x[j])/(y[i]-y[j]);
p++; }
i = j;
}
for (yi = YMIN; yi < YMAX; yi++) {
OrdenaXmin(p,xi,ymin,ymax,m);
par = 0;
for (j = 0; j < p; j++) {
if (yi >= ymin[j] && yi < ymax[j]) {
if (!par)
i = j;
else {
horizontal(round(xi[i]),round(xi[j]),yi);
xi[i] = xi[i] + m[i];
xi[j] = xi[j] + m[j]; }
par = MASK^par; }
}
}
}
void horizontal(int x0, int x1, int y)
{
int x;

for (x = x0; x <= x1; x = x++) writepixel(x, y, interior_color);


}
Figura 1.13 - Algoritmo para preenchimento de polgonos.

17
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

1.3 OPERAES COM BLOCOS

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.

Na medida em que as imagens so requisitadas na tela, os blocos de pixels so


copiados na posio e tamanho adequados. Frequentemente, utiliza-se a palavra canvas
para designar uma estrutura de dados que armazena uma imagem na forma de uma matriz
de pixels. Tais estruturas contm tambm informaes a respeito do tamanho e atributos da
imagens. Para operaes com estas matrizes so necessrias funes que realizam a
transferncia de blocos de pixels de uma regio para outra (Figura 1.14).

regio de destino (D)

regio de origem (S)

Figura 1.14 - Transferncia de bitmaps.

1.3.1 Modos de escrita

As funes de transferncia de blocos de pixels executam operaes lgicas entre


os pares de pixels correspondentes da regio de origem (S) e da regio de destino (D).
Estas operaes so simbolizadas por:

D ( S op D) (1.18)

onde op um operador booleano que representa o modo de escrita dos pixels. Os


operadores mais utilizados so:

REPLACE
OR
XOR
AND

18
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Os efeitos produzidos por estes modos so ilustrados na Figura 1.15.

REPLACE

OR

op =

XOR

= 0 AND

= 1

Figura 1.15 - Efeitos produzidos pelos modos de escrita.

O modo REPLACE um modo destrutivo, uma vez que as imagens so excritas


sobre o que j se encontra na tela. o modo normal para o traado de primitivas e menus.
Pode tambm ser utilizado para deletar primitivas, redesenhando-as com a cor de fundo. O
modo OR parte destrutivo e parte no-destrutivo. O modo XOR muito usado na
implementao de objetos dinmicos, tais como cursores, janelas deslizantes, etc. Uma
primeira operao XOR inverte a imagem da regio de destino, e uma segunda operao
XOR restaura o pixel original. O modo AND pode ser utilizado para desativar
seletivamente pixels da regio de destino.

1.3.2 Escalonamento de imagem

O modo mais simples de mudar a escala de uma imagem armazenada no formato de


bitmap atravs da replicao de pixels. Esta tcnica consiste em substituir cada pixel por
um bloco NxN de pixels. Consequentemente, a imagem ampliada por um fator inteiro N
(Figura 1.16). medida em que as imagens aumentam, tornam-se cada vez mais pobres
visualmente. Para reduzir a imagem so necessrias tcnicas mais sofisticadas [1, 4, 5].

Figura 1.16 - Replicao de pixels.

19
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

1.4 PADRES DE PREENCHIMENTO

Os padres de preenchimento so definidos em um pequeno bitmap MxN.


Considerando-se, por exemplo, um determinado padro armazenado na matriz
padro(M,N), o pixel padro(0,0) considerado coincidente com a origem da tela, e a
repetio do padro obtida atravs do emprego de aritmtica modular. Sendo assim, o
pixel (x, y) de uma primitiva ter uma cor k igual a:

k = padro[i][j]; (1.19)

Os ndices i e j da matriz acima so calculados atravs das expresses:

i = x % N; (1.20)

j = y % M; (1.21)

onde % o operador aritimtico de C que retorna o resto da diviso de dois inteiros.

A Figura 1.17b mostra o preenchimento de uma mesma rea atravs de dois


padres diferentes, utilizando o algoritmo da Figura 1.13. Alm da definio da matriz
padro(M, N), a nica modificao feita no algoritmo foi a incluso, na funo horizontal,
das trs linhas de cdigo acima.

(a) padres de preenchimento

(b) efeito produzido

Figura 1.17 - Exemplos de padres de preenchimento.

20
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

1.5 ESPESSURA DE SEGMENTOS DE RETA

A converso de segmentos de reta com a considerao do atributo espessura pode


ser implementada atravs de 3 mtodos:

mtodo da replicao de pixels


mtodo da pena
mtodo de preenchimento de reas entre contornos

No algoritmo de replicao, os pixels so replicados em colunas, para segmentos


de reta com inclinaes m tais que, -1 m 1, e em linhas para as demais inclinaes. O
mtodo da pena consiste em posicionar o centro de uma pena imaginria de determinada
seo transversal sobre os pixels convertidos (Figura 1.18). Pode-se por exemplo, utilizar
penas de seo transversal retangular ou circular. A pena circular produz melhores
resultados, uma vez que no depende da orientao da linha.

Figura 1.18 - Converso de segmentos de reta com pena quadrada.

No mtodo de preenchimento, os contornos externo e interno so traados a uma


distncia t/2 do segmento, sendo t a espessura. O polgono resultante ento preenchido
utilizando-se um algoritmo de preenchimento de polgonos (Figura 1.19).

t/2

t/2

Figura 1.19 - Mtodo de preenchimento.

21
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

1.6 RECORTE DE SEGMENTOS DE RETA

Um algoritmo bastante eficiente para o recorte (clipping) de segmentos de reta


contra um retngulo de recorte (clip rectangle) o algoritmo de Cohen-Sutherland [1,2]. O
algoritmo testa, de incio, os pontos extremos e verifica se o segmento se situa inteiramente
em um dos 4 semi-planos externos ao retngulo (Figura 1.20) ou inteiro dentro do retngulo
de recorte. Na primeira hiptese, o segmento rejeitado e nenhuma converso efetuada.
Na segunda hiptese, o segmento convertido sem recortes. Caso nenhuma das hipteses
acima ocorra, a reta dividida em dois segmentos, descartando-se o que se situa
inteiramente em um dos 4 semi-planos (Figura 1.21). O novo segmento ento submetido
ao teste inicial, procedendo-se desta maneira at que o segmento remanescente esteja
situado inteiramente em um dos 4 semi-planos ou esteja inteiramente contido no retngulo
de recorte. O algoritmo da Figura 1.22 descreve este procedimento.

SEMI-PLANO SUPERIOR

SEMI-PLANO SEMI-PLANO
ESQUERDO DIREITO

SEMI-PLANO INFERIOR

Figura 1.20 - Retngulo de recorte e os 4 semi-planos externos.

descartad

descartad

Figura 1.21 - Diviso dos segmentos.

22
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

1. Teste de aceitao:

se (os dois pontos extremos se situam em um dos 4 semi-planos)


{
fim;
}
se (segmento inteiramente contido no retngulo)
{
converte segmento;
fim;
}

2. Divide o segmento em dois, tomando a interseo do segmento com uma


das arestas (ou prolongamento) do retngulo;

3. Descarta o segmento situado inteiramente em um dos 4 semi-planos;

4. Retorna ao passo 1;

Figura 1.22 - Teste de aceitao de segmento.

Para implementar o teste de aceitao deve-se considerar as nove regies formadas


pelos prolongamentos das arestas do retngulo de recorte (Figura 1.23). A cada regio
atribudo um cdigo de 4 bits, que determina a posio de cada regio em relao aos 4
semi-planos externos ao retngulo. Considerando 1 = TRUE e 0 = FALSE, a Figura 1.24
indica o significado destes bits. Os bits so numerados da esquerda para a direita.

1001 1000 1010

0001 0000 0010

0101 0100 0110

Figura 1.23 - Cdigos das regies.

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

Figura 1.24 - Significados dos bits.

23
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

A cada ponto extremo do segmento atribudo um cdigo, conforme a regio


qual pertence. Se os dois pontos extremos possuem o cdigo 0000, ento o segmento est
inteiramente contido no retngulo. Por outro lado, se o resultado da operao AND entre
os dois cdigos no for igual a zero, o segmento rejeitado, ou seja, o segmento se situa
inteiramente em um mesmo semi-plano (Figura 1.25). Se o segmento no passa no teste
inicial, ou seja, no convertido e nem rejeitado, deve-se ento efetuar a subdiviso do
segmento. Para isto utiliza-se uma aresta que intercepta o segmento, descartando-se o
segmento que se situa inteiramente no semi-plano correspondente a esta aresta (Figura
1.26).

P0 P1 P0 AND P1
0000 0000 0000 segmento no retngulo (convertido)
0 segmento em um semi-plano (rejeitado)
0000 segmento deve ser subdividido

Figura 1.25- Operao AND entre os dois pontos extremos do segmento.

descartado
1001

Figura 1.26- Diviso do segmento.

O loop nas arestas para a determinao da interseo com o segmento feito na


ordem superior-inferior, direita-esquerda, observando-se que os bits diferentes de zero dos
pontos extremos indicam quais arestas interceptam o segmento (Figura 1.26). O algoritmo
seleciona ento um dos pontos extremos que se situa fora do retngulo (cdigo diferente de
zero), e toma o primeiro bit diferente de zero. A posio deste bit indica a aresta que
intercepta o segmento, dividindo-o em dois, e o trecho que se situa inteiramente no semi-
plano correspondente a esta aresta descartado. As coordenadas dos pontos de interseo
so calculadas de acordo com a aresta interceptada (Figura 1.27).

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

A Figura 1.28 apresenta uma implementao em C do algoritmo acima descrito. A


funo principal LineClip tem como argumentos os ponteiros para as extremidades do
segmento (x0 , y0), (x1 , y1) e os cantos inferior esquerdo e superior direito do retngulo de
recorte (xmin , ymin) e (xmax , ymax). Ponteiros so utilizados como argumentos porque os
valores das variveis que armazenam as coordenadas das extremidades do segmento so
alterados, se o segmento recortado. Neste caso, as extremidades (x0, y0) e (x1, y1)
mantm a orientao original. A funo LineClip, declarada como sendo do tipo char,
pode retornar trs valores, que so 1, no caso de segmentos situados total ou parcialmente
no interior do retngulo de recorte, 0 no caso de segmentos localizados totalmente fora do
retngulo, e -1 em casos excepcionais de erro. Este erro ocorre quando quatro passadas no
lao principal da funo no so suficientes para recortar o segmento.

Duas funes so chamadas pela funo principal. A funo Ptcode atribui um


cdigo de quatro bits a um ponto, como foi explicado anteriormente, e a funo Divide
divide o segmento em dois, descartando o que se situa inteiramente em um mesmo semi-
plano.

/* Declarao de funes : */

int round(float x);


char Ptcode(float x,float y,float xmin,float ymin,float xmax,float ymax);
void Divide(float *x0,float *y0,float *x1,float *y1,char code0,char code1,
float xmin,float ymin,float xmax,float ymax);

/* Recorte de linhas pelo mtodo de Cohen-Sutherland. */

char LineClip(float *x0,float *y0,float *x1,float *y1,float xmin,


float ymin,float xmax, float ymax)
{
char code0,code1,i;

for (i = 0; i < 4; i++) {


code0 = Ptcode(*x0,*y0,xmin,ymin,xmax,ymax);
code1 = Ptcode(*x1,*y1,xmin,ymin,xmax,ymax);
if (code0 == 0 && code1 == 0) {
/* Segmento total ou parcialmente contido no retangulo ! */
return(1);
}
if ((code0 & code1)!= 0) {
/* Segmento totalmente fora do retangulo ! */
return(0);
}
/* Divide o segmento: */
Divide(x0,y0,x1,y1,code0,code1,xmin,ymin,xmax,ymax);
}
/* Erro: */
return(-1);
}

Figura 1.28 - Implementao em C do algoritmo de Cohen-Sutherland.

26
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

/* Divide um segmento em dois, descartando o que situa em um mesmo semi-plano: */

void Divide(float *x0,float *y0,float *x1,float *y1,char code0,char code1,


float xmin,float ymin,float xmax,float ymax)
{
char code,mask=8,bit=0,j=0;
float x,y,xa,ya,xb,yb,dx,dy;

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; }
}

Figura 1.28 (Continuao).

27
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

/* Determina o cdigo de um ponto de acordo com a sua posicao em relao


a um retngulo. */

char Ptcode(float x,float y,float xmin,float ymin,float xmax,float ymax)


{
char code = 0,sup = 8,inf = 4,right = 2,left = 1;

if (y > ymax) code = sup | code;


if (y < ymin) code = inf | code;
if (x > xmax) code = right | code;
if (x < xmin) code = left | code;
return(code);
}

Figura 1.28 (Continuao).

1.7 RECORTE DE POLGONOS

O algoritmo de Sutherland-Hodgman [1,2,6], descrito a seguir, aplicvel ao


recorte de polgonos convexos ou cncavos contra um polgono convexo de recorte. A
idia bsica do algoritmo efetuar o recorte do polgono considerando uma nica aresta
por vez. Desta forma, so obtidos polgonos recortados intermedirios, como mostra a
Figura 1.29.

(a)

(b) (c) (d) (e)

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

A Figura 1.35 mostra uma implementao deste algoritmo. A funo principal a


funo SHPolygonClip, cujo valor de retorno o nmero de vrtices do polgono aps o
recorte. Os argumentos desta funo tem o seguinte significado:

v[ ] - estrutura que armazena em sequncia (horria ou anti-horria) os


vrtices do polgono.

n - nmero de vrtices do polgono.

edge[2] - estrutura que contm as extremidades da aresta de recorte.

vclip[ ] - estrutura para receber os vrtices do novo polgono recortado.

A aresta de recorte, de extremidades P0 e P1 , deve ser orientada de tal forma que


o interior do polgono esteja sua esquerda, considerando-se o sentido P0 P1 (Figura
1.30).

P1
polgono de
recorte

P0

Figura 1.30 - Orientao das arestas do polgono de recorte.

O algoritmo percorre em sequncia os vrtices do polgono a ser recortado, comeando


pelo ltimo, seguindo pelo primeiro, at retornar ao ltimo novamente (Figura 1.31).

4
3

Figura 1.31 - Sequncia em que o algoritmo percorre os vrtices do polgono.

29
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Para cada vrtice S percorrido, o algoritmo verifica a posio da aresta formada


por S e pelo vrtice subsequente P em relao aresta de recorte. A Figura 1.32 ilustra as
4 possibilidades que podem ocorrer. Dependendo do caso, dois, um ou zero vrtices so
armazenados na estrutura vclip[ ]. Na situao (a), o vrtice P adicionado ao novo
polgono, em (b) a interseo das duas arestas adicionada como novo vrtice, e em (c) a
interseo e P so armazenadas em vclip[ ]. Na hiptese(d) nenhum vrtice adicionado.

(a) (b) (c)

S P
interior do polgono
de recorte P

regio externa ao P
polgono de recorte
P S
(d)
aresta de recorte

Figura 1.32 - Vrtices adicionados ao polgono recortado.

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.

Verificar se um ponto P(x, y) se situa no interior do polgono equivale a saber se o


ponto est esquerda da aresta de recorte P0(x0 , y0) P1(x1 , y1). Isto pode ser feito
calculando-se o produto vetorial PP0 PP1 (Figura 1.33). A componente z deste produto
positiva, no caso em que o ponto P est esquerda da aresta, negativa quando P est
direita, e zero quando P est localizado sobre a aresta. Considerando a aresta como sendo
externa ao polgono, a condio para que o ponto P esteja contido no interior do polgono
ento:

( PP0 PP1 ) z > 0 (1.22)

ou simplesmente,

(x1 - x) . (y0 - y) < (x0 - x) . (y1 - y) (1.23)

30
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Portanto, caso a expresso acima se verifique, o ponto P se situa no interior do polgono de


recorte.

P1

aresta de
recorte
( PP0 PP1 )z > 0

P0

Figura 1.33 - Ponto P esquerda da aresta de recorte.

Para recortes contra um polgono convexo qualquer, a funo SHPolygonClip


deve ser chamada seguidamente, uma vez para cada aresta do polgono de recorte.

No recorte de polgonos cncavos, algumas dificuldades ainda persitem com este


algoritmo. Por exemplo, quando do recorte resultam mltiplos polgonos, estes permanecem
ligados por arestas localizadas sobre o contorno do polgono de recorte, como mostra a
Figura 1.34. necessrio um ps-processamento para corrigir este problema.

aresta
indesejvel

(a) (b)

Figura 1.34 - (a) Polgono antes do recorte e (b) depois do recorte.

31
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

#define MAX 100


#define TRUE 1
#define FALSE 0

typedef char BOOL;


typedef struct {
float x;
float y;
} POINT2D;

POINT2D v[MAX],vclip[MAX],edge[2];

/* Declarao de funes : */

POINT2D intersection(POINT2D s,POINT2D p,POINT2D edge[]);


int addVertex(POINT2D i,int nclip,POINT2D vclip[]);
BOOL inside(POINT2D p,POINT2D edge[]);

/* Recorte de um polgono contra uma aresta infinita pelo mtodo de Sutherland-Hodgman : */

int SHPolygonClip(POINT2D v[],int n,POINT2D edge[],POINT2D vclip[])


{
int j,nclip;
POINT2D s,p,i;

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;
}

Figura 1.35 - Recorte de polgonos contra uma reta infinita.

32
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

/* Determina se um ponto est localizado dentro ou fora do polgono de recorte : */

BOOL inside(POINT2D p,POINT2D edge[])


{
if (((edge[1].x-p.x)*(edge[0].y-p.y)) < ((edge[0].x-p.x)*(edge[1].y-p.y)))
return TRUE;
return FALSE;
}

/* Calcula a interseo de duas retas no paralelas entre si : */

POINT2D intersection(POINT2D s,POINT2D p,POINT2D edge[])


{
float dx,dy,m,c,a,b,t;
POINT2D i;

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;
}

/* Adiciona um vrtice ao polgono recortado : */

int addVertex(POINT2D i,int nclip,POINT2D vclip[])


{
vclip[nclip].x = i.x;
vclip[nclip].y = i.y;
return (nclip+1);
}

Figura 1.35 (Continuao)

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)

Matricialmente pode-se escrever:

x x dx
y = y + dy (2.2)

ou, de forma compacta:

P = P + T (2.3)

dy

P dx

Figura 2.1 - Translao de um ponto.

34
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

2.1.2 Mudana de escala

Uma mudana de escala aplicada a um ponto isolado produz o efeito de alongar ou


encurtar as componentes do vetor posio do ponto. Considerando uma mudana de
escala S(sx, sy), sendo sx e sy os fatores de escala nas direes x e y respectivamente, as
novas coordenadas de um ponto P(x, y) so dadas por:

x = sx . x (2.4a)

y = sy . y (2.4b)

Matricialmente se tem que:

x sx 0 x
= 0
y s y y (2.5)

e de forma compacta,

P = S . P
(2.6)

2.1.3 Rotao

Aplicar uma transformao de rotao R() a um ponto P(x, y) significa rotacionar


de um ngulo o vetor posio do ponto em relao origem (Figura 2.2). As
coordenadas do ponto aps a rotao so iguais a:

x = x . cos - y . sin (2.7a)

y = x . sin + y . cos (2.7b)

Matricialmente, a transformao representada por:

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

Figura 2.2 - Rotao de um ponto.

2.1.4 Coordenadas homogneas

Em coordenadas homogneas [7, 8], cada ponto representado pelas coordenadas


(x, y, w). Dois pontos, P = (x, y, w) e P = (x, y, w) representam o mesmo ponto se e
somente se as coordenadas de um so proporcionais s coordenadas do outro:

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

Para w 0, x/w e y/w representam as coordenadas cartesianas de (x, y, w). Os


pontos para os quais w = 0 representam pontos no infinito. Os pontos (tx, ty, tw), para t
0, representam uma reta em 3D. Consequentemente, cada ponto do sistema de
coordenadas homogneas representa uma reta em 3D cuja direo passa pela origem
(Figura 2.3).

36
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

y
x

Figura 2.3 - Representao de um ponto em coordenadas homogneas.

Os pontos em coordenadas homogneas so normalizados dividindo-se suas


coordenadas por w, obtendo-se pontos na forma (x, y, 1). O conjunto de todos os pontos
normalizados forma o plano definido por w = 1, no espao x-y-w (Figura 2.4).

w=1

y
x

Figura 2.4 - Representao geomtrica da normalizao de pontos.

2.1.5 Translao usando coordenadas homogneas

A transformao de translao, em coordenadas cartesianas, expressa por uma


operao de adio de vetores. Entretanto, atravs do uso de coordenadas homogneas
normalizadas possvel representar a translao por um produto de matrizes, da mesma
forma que as transformaes de mudana de escala e rotao:

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,

P = T(dx, dy) . P (2.13)

Se duas translaes, T(dx1, dy1) e T(dx2, dy2), so aplicadas nesta ordem a um


ponto P(x, y), pode-se escrever que:

P = T(dx1, dy1) . P (2.14)

P = T(dx2, dy2) . P (2.15)

Ento,

P = T (dx2, dy2) . (T(dx1, dy1) . P) =

= T (dx2, dy2) .T(dx1, dy1) . P (2.16)

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,

T(dx2, dy2) . T(dx1, dy1) = T(dx1+dx2, dy1+dy2) (2.18)

Ou seja, a aplicao de uma sequncia de translaes resulta em uma translao cujos


deslocamentos so a soma dos deslocamentos de cada translao aplicada. A matriz
resultante T(dx1+dx2, dy1+dy2) denomina-se composio de T(dx1, dy1) e T(dx2, dy2). A
ordem de aplicao das translaes no altera o resultado.

38
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

2.1.6 Mudana de escala usando coordenadas homogneas

Mudanas de escala em coordenadas homogneas so representadas


matricialmente por:

x s x 0 0 x
y = 0 sy 0 y (2.19)

1 0 0 1 1

ou de forma compacta,

P = S(sx, sy) . P (2.20)

Se duas mudanas de escala S(sx1, sy1) e S(sx2, sy2) so aplicadas consecutivamente a um


ponto P(x, y) obtm-se as expresses:

P = S(sx1, sy1) . P (2.21)

P = S(sx2, sy2) . P (2.22)

Substituindo (2.21) em (2.22) se tem que:

P = S(sx2, sy2) . ( S(sx1, sy1).P ) = S(sx2, sy2) . S(sx1, sy1) . P (2.23)

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,

S (sx2, sy2). S (sx1, sy1) = S (sx1.sx2, sy1.sy2) (2.25)

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.

2.1.7 Rotao usando coordenadas homogneas

A rotao de um ponto P(x, y) representada matricialmente por:

x cos sin 0 x
y = sin cos 0 y (2.26)

1 0 0 1 1

ou,

P = R() . P (2.27)

Aplicando uma sequncia de rotaes R(1) e R(2) a um ponto P(x, y) obtm-se:

P = R(1) . P (2.28)

P = R(2) . P (2.29)

Introduzindo (2.28) em (2.29):

P = R(2) . ( R(1) . P ) = R(2) . R(1) . P (2.30)

cos 2 sin 2 0 cos 1 sin 1 0


R ( 2 ) . R ( 1 ) = sin 2 cos 2 0 sin cos 1 0 =
1
0 0 1 0 0 1

(cos 2 .cos 1 sin 2 . sin 1 ) ( cos 2 . sin 1 sin 2 .cos 1 ) 0


= (sin 2 .cos 1 + cos 2 . sin 1 ) ( sin 2 . sin 1 + cos 2 .cos 1 ) 0 =

0 0 1

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

Da expresso acima conclui-se que:

R(2) . R(1) = R(1 + 2) (2.32)

Ou seja, a transformao resultante de uma composio de rotaes pode ser obtida


somando-se os ngulos das rotaes envolvidas. Mais uma vez, a ordem de aplicao das
rotaes no altera o resultado final.

2.1.8 Transformaes de corpo rgido

Uma matriz de transformao do tipo,

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.

A submatriz de R() em (2.26),

cos sin
sin cos (2.34)

ortogonal e, portanto, a matriz de rotao representa uma transformao de corpo rgido.


Uma matriz M ortogonal se as seguintes relaes se verificam:

M-1 = M t (2.35)

M t.M = M .M t = I (2.36)

sendo I a matriz identidade.

41
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Uma sequncia arbitrria de rotaes e translaes tem a forma da matriz em


(2.33), e portanto d origem a uma transformao de corpo rgido.

2.1.9 Transformaes afins

Sequncias de rotaes, translaes e mudanas de escala do origem a


transformaes afins, e tm a propriedade de preservar paralelismo de retas. No entanto,
no preservam ngulos e comprimentos (Figura 2.5).

R() S(sx,sy)

Figura 2.5 - Transformao afim.

2.1.10 Composio de transformaes

A composio de transformaes tem por objetivo ganhar eficincia com a


aplicao de uma nica matriz composta, ao invs de uma srie de transformaes.
Considere, por exemplo, o problema de rotacionar o objeto da Figura 2.6 em torno de um
ponto P1(x1, y1). O efeito desejado pode ser obtido atravs da seguinte sequncia de
transformaes:

1. Translao do objeto tal que P1 0 (Figura 2.7a).


2. Rotao (Figura 2.7b).
3. Translao do objeto tal que P1 retorne posio original (Figura 2.7c).

Figura 2.6

42
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

A transformao composta correspondente sequncia de transformaes dada


por:

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

cos sin ( x1 (1 cos ) + y1 sin )


= sin cos ( y1 (1 cos ) x1 sin ) (2.37)

0 0 1

(a) (b) (c)

Figura 2.7 - Sequncia de transformaes para rotacionar o objeto em torno de um ponto.

Da mesma forma, a seguinte sequncia de transformaes pode ser utilizada para


mudar a escala do mesmo objeto em relao a um ponto P1(x1,y1):

1. Translao tal que P1 0 (Figura 2.8a).


2. Mudana de escala (Figura 2.8b).
3. Translao tal que P1 retorne posio original (Figura 2.8c).

Neste caso, a transformao resultante dada por:

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) (b) (c)

Figura 2.8 - Sequncia de transformaes para mudana de escala do objeto em relao a


um ponto.

Outro exemplo de composio de transformaes o problema da mudana de


escala e rotao de um objeto em relao a um ponto P1(x1,y1) e reposicionamento do
objeto atravs da translao P1 P2(x2, y2) (Figura 2.9). Neste caso, a seguinte sequncia
pode ser empregada:

1. Translao P1 0 (Figura 2.10a).


2. Mudana de escala (Figura 2.10b).
3. Rotao (Figura 2.10c).
4. Translao P1 P2 (Figura 2.10d).

A transformao composta :

T(x2, y2) . R() . S(sx, sy) .T(-x1, -y1) (2.39)

Figura 2.9 - Mudana de escala e rotao em relao a P1 e translao P1 P2.

44
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

(a) (b)

(c) (d)

Figura 2.10 - Sequncia de transformaes para mudana de escala e rotao em relao a


um ponto e reposicionamento do objeto.

Uma transformao composta incluindo transformaes de rotao, mudana de


escala e translao produz uma matriz M na forma:

r11 r12 tx
M = r 21 r 22 ty (2.40)

0 0 1

A submatriz rij uma composio de rotaes e mudanas de escala, enquanto tx e ty so


translaes compostas.

O produto da matriz M por um ponto P(x, y) implica em nove multiplicaes e seis


adies:

x = r11 . x + r12 . y + tx .1 (2.41a)

y = r21 . x + r22 . y + ty .1 (2.41b)

1 = 0.x + 0.y + 1.1 (2.41c)

45
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

A estrutura de M permite, no entanto, a seguinte simplificao,

x = r11 . x + r12 . y + tx (2.42a)

y = r21 . x + r22 . y + ty (2.42b)

reduzindo o nmero de operaes para quatro multiplicaes e quatro adies, o que


representa uma significativa reduo, considerando-se que milhares de pontos podem ser
transformados.

2.1.11 Coordenadas de mundo e coordenadas de dispositivo

Coordenadas de mundo so aquelas com as quais os objetos so inicialmente


representados. O mapeamento de uma janela do sistema de coordenadas de mundo (Figura
2.11) em uma regio do dispositivo de sada grfica (Figura 2.12) pode ser obtido atravs
da seguinte sequncia de transformaces:

1. Translao da janela para a origem do sistema de coordenadas de mundo (Figura


2.13a).

2. Mudana de escala para enquadrar a janela de WCS na regio de visualizao do


dispositivo (Figura 2.13b).

3. Translao T(umin ,vmin) no sistema de coordenadas de dispositivo (Figura 2.13c).

A transformao resultante :

Mwv = T(umin ,vmin) . S(sx , sy) .T(-xmin , -ymin) (2.43)

sendo sx e sy dados por:

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

Efetuando os produtos matriciais em (2.43) obtm-se:

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

As coordenadas (u, v) no dispositivo de sada de um ponto P(x, y) so ento dadas por:

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

Figura 2.11 - representao de um objeto em coordenadas de mundo (world coordinates


system, WCS).

v
limite fsico do
dispositivo

(umax , vmax)
regio de
visualizao
(viewport)
(umin , vmin)
u

Figura 2.12 - Sistema de coordenadas de dispositivo (device coordinates system, DCS).

47
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

(a) ymax - ymin

xmax - xmin

(b)
vmax - vmin

umax - umin

v
(umax , vmax)

(c)

(umin , vmin)
u

Figura 2.13 - Transformaes necessrias para representao de um objeto no dispositivo


de sada.

48
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

2.2 TRANSFORMAES 3D

Assim como as transformaes 2D podem ser representadas por matrizes 3x3


usando coordenadas homogneas, as transformaes 3D podem ser representadas por
matrizes 4x4. As coordenadas homogneas de pontos do espao so dadas por:

(x, y, z, w) (2.47)

Assim como em duas dimenses, os pontos (x, y, z, w), para w 0, so representados na


forma:

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.

2.2.1 Transformaces bsicas

Em trs dimenses, as transformaes de translao T(dx,dy,dz) e mudana de


escala S(sx, sy, sz) so representadas pelas matrizes:

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

Considerando os sentidos da Figura 2.14, as rotaes Rx, Ry e Rz , em torno


respectivamente dos eixos x, y, z, so dadas pelas seguintes transformaes:

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

Como pode-se verificar, as matrizes Rx, Ry e Rz so ortogonais.

Ry
y

Rx
x

Rz z

Figura 2.14 - Sentidos positivos das rotaes em torno dos eixos x, y, z.

50
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

2.2.2 Operaes inversas

Se um ponto sofre uma determinada transformao , a operao inversa desta


transformao retorna o ponto sua posio original, ou seja:

-1
. = I (2.54)

As operaes inversas das transformaes de translao, mudanca de escala e rotao so


dadas pelas expresses:

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

Rx-1() = Rxt() = Rx(-) (2.57a)

Ry-1() = Ryt() = Ry(-) (2.57b)

Rz-1() = Rzt() = Rz(-) (2.57c)

51
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

2.2.3 Composio de transformaes

A matriz resultante de uma sequncia arbitrria de transformaes de translao,


mudana de escala e rotao tem a forma:

r11 r12 r13 t x


r r22 r 23 t y
M =
21
(2.58)
r31 r32 r 33 tz

0 0 0 1

onde a submatriz rij refere-se composio de rotaes e mudanas de escala, e o vetor


coluna (tx, ty, tz, 1)t representa uma composio de translaes.

Como exemplo de composio de transformaes, seja o problema de transformar


os segmentos de reta P1P2 e P1P3 de sua posio original (Figura 2.15a) para a posio da
Figura 2.15b. Para obter o efeito desejado, as seguintes transformaes devem ser
empregadas:

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)

Figura 2.15 - (a) Posio original. (b) Posio final.

52
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Aplicando a translao T(-x1, -y1, -z1) o ponto P1 translada-se para a origem


(Figura 2.16), obtendo-se as novas coordenadas:

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

Figura 2.16 - Posio dos segmentos aps translao de P1 para a origem.

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)

as coordenadas dos pontos transformados P1, P2 e P3 so iguais a:

P1 = Ry(-90) . P1 (2.65)

P2 = Ry(-90) . P2 (2.66)

P3 = Ry(-90) . P3 (2.67)

sendo a matriz Ry dada por:

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

Efetuando os produtos em (2.65), (2.66) e (2.67) obtm-se:

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)

a matriz Rx() ser dada por:

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

Aplicando esta rotao aos pontos P1, P2 e P3 obtm-se:

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

Figura 2.17 - Posio dos segmentos aps rotao Ry.

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)

A transformao composta resultante ser ento igual a:

M = Rz() . Rx() . Ry(-90) . T(-x1, -y1, -z1) (2.82)

56
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

y 3

P3
D3
x3
P1
x
P2

Figura 2.18 - Posio dos segmentos aps rotao Rx.

2.2.4 Mudana de sistema de coordenadas

Seja M ji a transformao que converte a representao de um ponto em um


sistema de coordenadas i em sua representao no sistema j:

P(j) = M ji . P(i) (2.83)

A matriz que transforma as coordenadas de um sistema i em coordenadas de um sistema j


(Figura 2.19) dada pela seguinte expresso:

x ( j) cos x ( j) x (i ) cos x ( j) y (i) cos x ( j) z ( i) 0 x (i)


( j) ( j) ( i ) ( i)
y = cos y x cos y ( j) y (i) cos y ( j) z ( i) 0 y (2.84)
z ( j) cos z ( j) x ( i) cos z ( j) y (i ) cos z ( j) z (i ) 0 z (i )

1 0 0 0 1 1

y (i)
y (j)

x(j)

x(i)

z(i)

z(j)

Figura 2.19 - Mudana de sistema de eixos.

57
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

A transformao de um ponto em um sistema de coordenadas a matriz inversa da


transformao correspondente a uma mudana de sistema de coordenadas.

Exemplo 1

Em duas dimenses, a matriz que transforma um sistema de coordenadas i em outro


sistema j rotacionado de um ngulo (Figura 2.20) dada por:

cos sin 0
R j i ( ) = sin cos 0 (2.85)

0 0 1

Ento, a transformao correspondente a uma rotao de um ponto (Figura 2.21) dada


por:

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)

Figura 2.20 - Rotao do sistema de eixos.

y y y

P = P

x x
-

Figura 2.21 - Rotao de um ponto.

58
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Exemplo 2

O exemplo de transformao composta do item 2.2.3 pode ser resolvido mais


facilmente atravs de duas mudanas de sistema, uma translao e uma rotao, como
mostram as Figuras 2.22a e b.

y y

P3
P3
P2 z
P2

P1
x P1

(a) (b)

Figura 2.22 - (a) Translao e (b) rotao do sistema de eixos.

A primeira mudana de eixos uma translao, posicionando o ponto P1 na origem:

x x
y y
= T( x , y , z ) . (2.87)
z z
1 1 1


1 1

A outra mudana uma rotao de eixos, dada pela relao:

x cos x x cos x y cos x z 0 x


y cos y x cos y y cos y z 0 y
= (2.88)
z cos z x cos z y cos z z 0 z

1 0 0 0 1 1

Da Figura 2.22 conclui-se que os cossenos diretores do eixo z so:

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

e portanto, o unitrio na direo z :

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

E, finalmente, o vetor unitrio na direo y pode ser obtido em funo de x e z:

v x
w u
v = = v y (2.92)
w u
v z

Substituindo (2.90), (2.91) e (2.92) em (2.88) obtm-se os eixos rotacionados:

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 primeiro passo para a visualizao de um objeto tridimensional em um dispositivo


grfico a definio de um modelo de visualizao. O modelo de visualizao deve ser
construdo de tal forma que a imagem bidimensional do objeto, representada no dispositivo
de sada, reproduza o mais fielmente possvel suas verdadeiras formas.

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.

A definio do modelo de visualizao resulta, portanto, na caracterizao de uma


srie de transformaes geomtricas, necessrias para transformar um objeto tridimensional
em uma imagem bidimensional descrita pelo sistema de coordenadas do dispositivo. Pelo
fato de envolver apenas transformaes geomtricas, o modelo de visualizao aplicvel a
pontos, e independe de como o objeto modelado geometricamente. Em outras palavras, o
modelo de visualizao no depende dos elementos ou primitivas, tais como segmentos de
reta e faces planas, utilizadas para compor o objeto.

As demais etapas do processo de visualizao so as seguintes:

Identificao das primitivas, ou partes destas, que se situam no interior do volume


de visualizao.

Determinao da visibilidade das primitivas, sob o ponto de vista do observador.

Converso das primitivas.

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

Em geral, projees transformam pontos de um sistema de coordenadas n-


dimensional em pontos representados em um sistema de dimenso inferior. Neste item,
sero estudadas as projees de um sistema 3D em um sistema 2D.

As projees podem ser classificadas em dois grupos principais, perspectiva e


paralela, como mostra a Figura 3.1. Nas projees perspectivas, as linhas de projeo
convergem para um ponto, denominado centro de projeo, enquanto nas projees
paralelas, as linhas de projeo so paralelas entre si.

plano de projeo plano de projeo

A A

B
B

A
A

B
B
linhas de
projeo linhas de
centro de projeo
projeo

direo de
projeo

(a) (b)

Figura 3.1 - (a) Projeo perspectiva. (b) Projeo paralela.

62
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Os principais tipos de projees perspectiva e paralela so os seguintes:

1 ponto de fuga principal


perspectiva 2 pontos de fuga principais
3 pontos de fuga principais

projees
vista frontal
ortogrfica vista de topo
vista lateral isomtrica
paralela axonomtrica
outras

gabinete
oblqua cavaleira
outras

3.1.1 Projeo perspectiva

Em uma projeo perspectiva, um conjunto de retas paralelas no paralelas ao


plano de projeo converge para um ponto chamado ponto de fuga. Como retas paralelas
s se encontram no infinito, um ponto de fuga pode ser interpretado como a projeo de
um ponto do infinito (Figura 3.2).

ponto de fuga

Figura 3.2 - Ponto de fuga.

63
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

ngulos so preservados somente nas faces do objeto paralelas ao plano de projeo. Se


um conjunto de retas paralelo a um dos eixos principais do sistema, o ponto de fuga dito
ponto de fuga principal (Figura 3.3).

ponto de fuga
principal do eixo z

Figura 3.3 - Ponto de fuga principal.

Existem no mximo 3 pontos de fuga principais em uma projeo perspectiva,


correspondendo ao nmero de eixos principais interceptados pelo plano de projeo. Por
exemplo, se o plano de projeo intercepta apenas o eixo z (paralelo ao plano xy), somente
o eixo z conter um ponto de fuga principal, porque as linhas paralelas ao eixo x ou y so
tambm paralelas ao plano de projeo. As projees perspectiva, portanto, classificam-se
de acordo com o nmero de pontos de fuga principais: um, dois ou trs pontos de fuga
principais.

3.1.2 Projeo paralela

Assim como as perspectivas, as projees paralelas preservam ngulos somente


nas faces do objeto paralelas ao plano de projeo. As projees paralelas dividem-se em
dois grupos, dependendo da relao entre a direo de projeo e a normal ao plano de
projeo. Nas projees paralelas ortogrficas, a normal ao plano de projeo e a
direo de projeo so paralelas. Nas projees paralelas oblquas, a normal ao plano de
projeo oblqua direo de projeo.

64
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

3.1.2.1 Projees paralelas ortogrficas

As projees ortogrficas caracterizam-se pelo fato de a normal n ao plano de


projeo ser paralela direo de projeo, ou seja, as linhas de projeo so
perpendiculares ao plano de projeo (Figura 3.4).

n
A

Figura 3.4 - Projeo paralela ortogrfica.

As principais projees ortogrficas so a vista frontal, vista de topo e vista lateral.


Estas trs vistas representam projees paralelas ortogrficas nas quais o plano de projeo
perpendicular a um dos trs eixos do sistema de coordenadas (Figura 3.5).

Vista de topo

Vista lateral

Vista frontal

Figura 3.5 - Projees ortogrficas: vistas frontal, lateral e de topo.

65
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

As projees paralelas ortogrficas axonomtricas usam planos de projeo no


perpendiculares aos eixos principais. A projeo ortogrfica isomtrica um caso
particular da axonomtrica, na qual a normal ao plano de projeo forma ngulos iguais
com os trs eixos principais do sistema de coordenadas.

3.1.2.2 Projees paralelas oblquas

As projees paralelas oblquas diferem das ortogrficas pelo fato de a normal ao


plano de projeo no ser paralela direo de projeo. Os principais tipos de projees
oblquas so as projees cavaleira e de gabinete.

Nas projees cavaleiras, a direo de projeo forma um ngulo de 45o com a


normal ao plano de projeo, de modo que as projees segmentos de reta
perpendiculares ao plano de projeo mantenham seus comprimentos verdadeiros (Figura
3.6).

plano de projeo

AB = AB
A B

A
direo de projeo

B 45o

Figura 3.6 - Projeo cavaleira.

Projees de gabinete so aquelas em que as projees de segmentos de reta


perpendiculares ao plano de projeo apresentam um comprimento igual metade do
comprimento verdadeiro (Figura 3.7).

plano de projeo

AB = AB/2

A
B
direo de projeo
A

B 26.57o

Figura 3.7 - Projeo de gabinete.

66
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

3.2 MATEMTICA DAS PROJEES

3.2.1 Projeo perspectiva

Seja a projeo perspectiva em um plano de projeo que contm o ponto R0(x0,


y0, z0) e cuja normal dada pelo vetor unitrio n, de cossenos diretores (nx, ny, nz). O
centro de projeo est localizado na origem do sistema de coordenadas (Figura 3.8). Em
coordenadas homogneas, a projeo P(x, y, z, w) de um ponto P(x, y, z, 1) dada
por:

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

Figura 3.8 - Projeo perspectiva com centro de projeo na origem.

67
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Demonstrao:

Como os vetores PR0 e n so perpendiculares entre si, a equao do plano de


projeo dada por:

P R0 n = 0 (3.3)

Efetuando o produto obtm-se:

(x0 - x).nx + (y0 - y).ny + (z0 - z).nz = 0 (3.4)

Introduzindo (3.2) na equao acima:

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

e substituindo este resultado em (3.5):

. x . nx + . y . ny + . z . nz = d0 (3.7)

O valor de ento dado por:

d0
= (3.8)
x . nx + y .n y + z . n z

68
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Em consequncia, em coordenadas homogneas pode-se escrever:

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

Figura 3.9 - Projeo perspectiva com centro de projeo C(a, b, c).

69
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Demonstrao:

A transformao desejada pode ser obtida a partir da seguinte sequncia de


transformaes:

1. Translao T(-a, -b, -c), trazendo o centro de projeo para a origem.


2. Projeo do ponto usando a matriz de projeo em (3.1), para centros de projeo na
origem.
3. Translao T(a, b, c), retornando o centro de projeo para a posio original.

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,

d = (x0 - a).nx + (y0 - b).ny + (z0 - c).nz (3.15)

Reagrupando os termos da expresso acima, pode-se escrever:

d = (x0 . nx + y0 . ny + z0 . nz) - (a . nx + b . ny + c . nz) = d0 - d1 (3.16)

Finalmente, aplicando a translao T(a, b, c) obtm-se a transformao desejada:

P = T( a , b , c). M 0per . T( a , b,c) . P (3.17)

ou,

P = M per . P (3.18)

70
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

sendo a matriz M per igual a:

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

3.2.2 Projeo paralela

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,

d0 = x0.nx + y0.ny + z0.nz (3.21)

d1 = a.nx + b.ny + c.nz (3.22)

71
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

z
R0

n
P
P
v

Figura 3.10 - Projeo paralela.

Demonstrao:

Equao do plano de projeo:

(x0-x) . nx + (y0-y) . ny + (z0-z) . nz = 0 (3.23)

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):

(x + a.t) . nx + ( y + b.t ) . ny + ( z + c.t) . nz = d0 (3.26)

e obtendo-se ento o valor de t para a interseo:

d 0 ( x. n x + y. n y + z. n z )
t = (3.27)
d1

72
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Com o valor de t acima, a projeo Ppode ser expressa por:

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

3.3 MODELO DE VISUALIZAO 3D

Em termos conceituais, o modelo de visualizao especificado atravs de uma


projeo (perspectiva ou paralela) em um plano de projeo, um volume de visualizao
(view volume), e uma regio de visualizao (viewport) do dispositivo de sada, como ser
visto a seguir.

3.3.1 Volume de visualizao

Para a especificao do volume de visualizao necessrio definir, alm do


sistema de coordenadas de mundo (world coordinates - WC), um outro sistema de
coordenadas, o sistema de referncia de visualizao (viewing reference coordinates -
VRC). A origem deste sistema o ponto de referncia VRP (view reference point),
fornecido em coordenadas de mundo (Figura 3.11).
Um dos eixos do sistema de referncia o eixo n, definido pelo vetor VPN (view
plane normal) normal ao plano de projeo. O eixo v determinado pela projeo do vetor
VUP (view up vector), paralela a VPN, em um plano paralelo ao plano de projeo. O
outro eixo, o eixo u, ento determinado de modo que o sistema u-v-n forme um triedro
direto (Figura 3.11).

73
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

coordenadas de mundo (WC) coordenadas de referncia (VRC)

z
v

VUP

y VRP
VPN

n
u
x

Figura 3.11 - Sistema de coordenadas de referncia de visualizao.

O plano de projeo (view plane), por definio paralelo ao plano u-v,


determinado por sua distncia VPD (view plane distance) origem de VRC, medida em
coordenadas n (Figura 3.12). Uma janela de visualizao (view window) do plano de
projeo deve ser especificada em termos de coordenadas u e v, como mostra a Figura
3.13.

plano de projeo u

VPD (view plane distance)

Figura 3.12 - Plano de projeo.

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

Figura 3.13 - Janela de visualizao.

O centro de projeo e a direo de projeo DOP (direction of projection) so


definidos pelo ponto de referncia de projeo PRP (projection reference point) e um
indicador do tipo de projeo. Se a projeo perspectiva, PRP o prprio centro de
projeo. Se a projeo paralela, a direo de projeo DOP definida pela direo da
reta PRP-CW, sendo CW o centro da janela de visualizao. O ponto PRP especificado
no sistema VRC, e consequentemente sua posio em relao a VRP independe da
posio e orientao do sistema VRC em relao ao sistema WC.

Na projeo perspectiva, o volume de visualizao a pirmide semi-infinita com


vrtice em PRP e faces passando pelos limites da janela de visualizao (Figura 3.14). Nas
projees paralelas, o volume de visualizao o paraleleppedo infinito com faces
paralelas direo de projeo, passando pelos limites da janela de visualizao (Figura
3.15).

O volume de visualizao deve ser tornado finito atravs da considerao de dois


planos paralelos ao plano de projeo, o plano anterior de recorte (front plane) e o plano
posterior de recorte (back plane). Assim como o plano de projeo, estes dois planos so
especificados atravs de suas distncias F e B origem de VRC, dadas em coordenadas n
(Figura 3.16).

75
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

u
janela de visualizao

CW

PRP

Figura 3.14 - Volume de visualizao na projeo perspectiva.

u
janela de visualizao

CW

PRP

DOP

Figura 3.15 - Volume de visualizao na projeo paralela.

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

Figura 3.16 - Volume de visualizao finito na projeo perspectiva.

3.3.2 Coordenadas normalizadas

Antes de ser mapeado para a regio de visualizao do dispositivo de sada, o


volume de visualizao deve ser transformado em um volume de visualizao normalizado,
definido em um sistema r-s-t de coordenadas normalizadas (NPC - normalized projection
coordinates).

77
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Os volumes de visualizao normalizados so convenientes, em especial porque


simplificam as operaes de recorte. As Figuras 3.17 e 3.18 ilustram os dois volumes
normalizados adotados no padro PHIGS, utilizados respectivamente para as projees
perspectiva e paralela.

s plano
posterior

1 0.5 1
r ou s

0.5
plano
r anterior
0.5 1
1
1

t t

Figura 3.17 - Volume de visualizao normalizado - projeo perspectiva.

plano
s posterior

1
1 r ou s

r
1 1
1

t plano
t anterior

Figura 3.18 - Volume de visualizao normalizado - projeo paralela.

78
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

3.3.3 Transformaes de visualizao

O procedimento de visualizao 3D de um objeto consiste nas seguintes etapas:

1. Definio do objeto em coordenadas de mundo.

2. Especificao do sistema de coordenadas de referncia de visualizao VRC, atravs do


ponto de referncia VRP e dos vetores VUP e VPN.

3. Especificao do tipo de projeo (perspectiva ou paralela), do ponto de referncia de


projeo PRP, do plano de projeo, da janela de visualizao, e dos planos anterior e
posterior de recorte, definido assim o volume de visualizao.
4. Especificao da regio de visualizao no dispositivo de sada grfica.

5. Transformao das coordenadas do objeto de coordenadas de mundo para


coordenadas de referncia (WC VRC).

6. Transformao de coordenadas do sistema VRC para o sistema de coordenadas


normalizadas NPC, de tal modo que o volume de visualizao definido em VRC se
transforme no volume normalizado definido em NPC.

7. Operaes de recorte 3D efetuadas no volume de visualizao normalizado.

8. Determinao da visibilidade das primitivas que descrevem o objeto.

9. Projeo do objeto no plano de projeo.

10. Transformao de coordenadas de tal modo que a janela de visualizao definida no


plano de projeo se enquadre na regio de visualizao do dispositivo de sada.

11. Converso das primitivas.

Dependendo do algoritmo utilizado, o problema da determinao da visibilidade das


primitivas pode ser resolvido durante a fase de rasterizao. As transformaes envolvidas
nas etapas 5, 6 e 10 so descritas a seguir, e as operaes de recorte so discutidas no
item 3.7.

3.3.3.1 Transformao coordenadas de mundo-coordenadas de referncia

Dados os pontos VRP(VRP x,VRPy,VRPz) e os vetores VPN e VUP (Figura 3.19),


os vetores unitrios Ru, Rv e Rn nas direes u, v e n so calculados atravs das seguintes
expresses:

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

sendo R a matriz de rotao:

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

Figura 3.19 - Definio do sistema de coordenadas de referncia de visualizao.

No padro PHIGS, o produto R.T corresponde matriz denominada view


orientation matrix (VOM):

u x uy uz ( u x . VRP x + u y . VRPy + u z . VRPz )


v vy vz ( v x . VRP x + v y . VRPy + v z . VRPz )
VOM = R . T = (3.36)
x
n x ny nz ( n x . VRP x + n y . VRPy + n z . VRPz )

0 0 0 1

3.3.3.2 Transformao coordenadas de referncia-coordenadas normalizadas

A transformao do sistema de coordenadas de referncia de visualizao (VRC)


para o sistema de coordenadas normalizadas deve ser tal que o volume de visualizao
definido em VRC se transforme em um volume normalizado pr-definido. Para isto, so
necessrias transformaes de translao, mudana de escala e distoro linear (shear
transformation).

Em duas dimenses, uma matriz de distoro linear na direo x tem a seguinte


forma:

1 a 0
SH x = 0 1 0 (3.37)

0 0 1

81
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

onde a o coeficiente de distoro linear na direo x. A Figura 3.20 mostra o efeito


produzido por uma transformao deste tipo. Da mesma forma, uma matriz de distoro
linear na direo y tem a forma:

1 0 0
SH y = b 1 0 (3.38)

0 0 1

onde b o coeficiente de distoro na direo y (Figura 3.21).

y y

SHx

x x

Figura 3.20 - Distoro linear na direo x, em duas dimenses.

y y

SHy

x x

Figura 3.21 - Distoro linear na direo y.

82
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

3.3.3.2.1 Projeo paralela

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.

2. Transformao de distoro linear em u e v, tal que a direo de projeo seja paralela


ao eixo t (Figura 3.23).

3. Translao T(-dr, -ds, 0).

4. Mudana de escala de forma a normalizar o paraleleppedo da Figura 3.24.

plano
posterior

u min u max v min v max


u, r v
B plano de
VPD projeo
F
cw cw
plano
anterior

DOP
n, t n
PRP PRP

DOPu DOPv

Figura 3.22 - Volume de visualizao em VRC - projeo paralela.

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.

u max - u min v max - v min


r s

F-B F-B

t t

Figura 3.24 - Volume de visualizao aps translao T(-dr, -ds, 0).

A matriz de distoro linear tem a forma:

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

onde os coeficientes shu e shv so iguais a:

DOPu
sh u = (3.40a)
DOPn

DOPv
sh v = (3.40b)
DOPn

sendo as componentes da direo de projeo dadas por:

DOPu PRPu ( u max + u min ) / 2


DOP = PRP CW = DOPv = PRPv ( v max + v min ) / 2
(3.41)

DOPn PRPn VPD
As translaes dr e ds so obtidas a partir das expresses:

dr = umin + (VPD-B) . shu (3.42)

ds = vmin + (VPD-B) . shv (3.43)

Finalmente, comparando as Figuras 3.24 e 3.18 conclui-se que os fatores da


mudana de escala S(su , sv , sn) devem ser iguais a:

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

Com estes resultados, a transformao composta resultante pode ser escrita na


forma:

Npar = S(su , sv , sn) . T(-dr, -ds, 0) . SHuv(shu , shv) . T(0, 0, -B) (3.47)

Efetuando o produto acima, obtm-se:

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

Cada ponto do sistema de coordenadas VRC transformado para o sistema NPC


atravs da relao:

r u
s v
= N . (3.49)
t n
par


1 1

No padro PHIGS, a matriz Npar corresponde matriz denominada view mapping


matrix, responsvel pela transformao do sistema VRC para o sistema NPC.

3.3.3.2.2 Projeo perspectiva

Na projeo perspectiva, o volume de visualizao da Figura 3.25 deve ser


transformado no volume normalizado da Figura 3.17. A transformao VRC NPC,
neste caso, pode ser obtida seguindo-se as etapas:

1. Translao T(0, 0, -B), trazendo o plano posterior para o plano rs.

2. Transformao de distoro linear em u e v, de modo que a direo PRP-CW fique


paralela ao eixo n (Figura 3.26).

3. Translao T(-dr, -ds, 0).

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

u min u max v min v max


u v
B plano posterior
VPD
F CW CW
plano de projeo

plano anterior

PRP PRP
n n

Figura 3.25 - Volume de visualizao no sistema VRC.

u v

dr ds

n n

Figura 3.26 - Volume de visualizao aps translao e distoro linear.

87
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

As duas primeiras transformaes so idnticas s suas correpondentes na projeo


paralela, enquanto que os deslocamentos da translao T(-dr, -ds, 0) so dados por:

( B PRPn ) . u min + PRPu .( VPD B)


dr = (3.50)
VPD PRPn

( B PRPn ) . v min + PRPv . ( VPD B)


ds = (3.51)
VPD PRPn

Aps estas trs transformaes, o volume de visualizao tem a forma de uma


pirmide de base retangular de lados hu , hv, e de altura hn (Figura 3.27):

( u max u min ) .( PRPn B)


hu = (3.52)
PRPn VPD

( v max v min ) .( PRPn B)


hv = (3.53)
PRPn VPD

h n = PRP n B (3.54)

hu hv

u v

hn

n n

Figura 3.27 - Volume de visualizao aps translao T(-dr, -ds, 0).

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

No padro PHIGS, a matriz Nper corresponde matriz denominada view mapping


matrix, responsvel pela transformao do sistema VRC para o sistema NPC para
projees perspectivas.

3.3.3.3 Transformao coordenadas normalizadas - coordenadas de dispositivo

Os objetos so visualizados no dispositivo de sada atravs do mapeamento da


projeo do volume de visualizao normalizado em uma regio de visualizao (viewport)
do dispositivo. No caso da projeo paralela, a projeo imediata, bastando considerar
as coordenadas normalizadas r e s (Figura 3.28). Na projeo perspectiva (Figura 3.29), a
projeo das primitivas no plano de projeo dada pela matriz:

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:

dt = (VPD - B) / (PRP n - B) (3.61)

1
r ou s

1
janela de
visualizao
t

Figura 3.28 - Projeo paralela: janela de visualizao em NPC.

0.5 1
r ou s
dt

1
janela de
visualizao
t

Figura 3.29 - Projeo perpspectiva: janela de visualizao em NPC.


A projeo perspectiva ento obtida a partir de :

r r
s s
= M . (3.62)
t t
per


w 1

obtendo-se as coordenadas projetadas (r/w, s/w, t/w, 1).

Efetuada a projeo, paralela ou perspectiva, a janela de visualizao definida em


coordenadas r e s (Figura 3.30) ento mapeada na regio de visualizao do dispositivo
(Figura 3.31). Como foi estudado anteriormente, isto feito atravs da matriz Mwv :

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

Um ponto P(X,Y) da regio de visualizao tem ento as seguintes coordenadas:

X r
Y = M . s (3.66)
wv
1 1

sendo r e s as coordenadas projetadas.


Tendo em vista que na projeo paralela a janela de visualizao dada por:

rmin = smin = 0 (3.67)

rmax = smax = 1 (3.68)

Os fatores de escala se reduzem a:

sr = Xmax - Xmin (3.69)

ss = Ymax - Ymin (3.70)

Na projeo perspectiva tem-se que:

91
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

rmin = smin = dt/2 (3.71)

rmax = smax = 1-dt/2 (3.72)

e os fatores de escala so:

sr = (Xmax - Xmin) / (1 - dt) (3.73)

ss = (Ymax - Ymin) / (1 - dt) (3.74)

s
(rmax , s max )
janela de
visualizao

(rmin , s min)

Figura 3.30 - Limites da janela de visualizao em NPC.

(Xmax , Ymax ) regio de


visualizao

limite fsico
do
dispositivo
(Xmin , Ymin)
X

Figura 3.31 - Regio de visualizao.

92
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

3.4 RECORTE EM TRS DIMENSES

O algoritmo de Sutherland-Hodgman, descrito no captulo 1, pode ser estendido,


em trs dimenses, para o recorte de polgonos convexos ou cncavos contra um poliedro
convexo. Anlogo ao caso bidimensional, o recorte feito considerando cada face do
poliedro isoladamente, uma por vez. A Figura 3.32 mostra o recorte de um retngulo contra
um hexaedro.

O interior do volume de recorte identificado pelas normais externas aos planos


que definem o contorno do poliedro. Portanto, o problema agora saber se um ponto se
situa no lado interno ou externo de cada face do poliedro. Conhecendo-se um ponto P0(x0,
y0, z0) da face e o vetor unitrio n(nx, ny, nz), que representa a normal externa, um ponto
P(x, y, z) est situado no lado interno se:

( P0 P) n < 0 (3.75)

Desenvolvendo o produto acima, obtm-se:

(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

No algoritmo 2D, a funo intersection calculava a interseo entre duas retas.


Aqui, as intersees a serem determinadas so entre uma aresta e um plano infinito. Seja,
por exemplo, uma aresta de extremidades P0(x0 , y0 , z0) e P1(x1 , y1 , z1), e um plano que
contm o ponto P(xp , yp , zp), de normal externa n(nx , ny , nz). As equaes paramtricas
da reta so:

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)

e a equao do plano dada por:

x .n x + y . ny + z . nz = x p .n x + yp . ny + z p . n z (3.83)

Substituindo (3.80)-(3.82) na equao acima obtm-se a expresso:

[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

de onde se tira o valor de t para o ponto de interseo da reta com o plano:

(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

Essencialmente, a verso tridimensional do algoritmo de Sutherland (Figura 3.34)


difere do algoritmo bidimensional descrito no item 1.7 apenas no contedo das funes
inside e intersection. O argumento de entrada edge, correspondente aresta de recorte
naquele algoritmo, agora substitudo por um plano de recorte, especificado atravs de um
ponto e pelo vetor normal unitrio, que so armazenados na estrutura plane. No lugar da
estrutura POINT2D, que antes representava pontos em duas dimenses, utiliza-se a
estrutura POINT3D. A funo SHPolygonClip3D da Figura 3.34 deve ser chamada em
sequncia, uma vez para cada face do poliedro de recorte.

95
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Para o caso particular de recorte contra os volumes de visualizao normalizados


descritos no item 3.3.2, conveniente usar uma rotina que contenha funes inside e
intersection especficas para cada uma das 6 faces do volume, reduzindo assim o nmero
de operaes de ponto flutuante. Por exemplo, o plano posterior de recorte, tanto na
projeo perspectiva como na paralela, pode ser especificado atravs do ponto (0, 0, 0) e
pela normal (0, 0, -1). Isto reduz as expresses (3.79) e (3.85) a:

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

#define MAX 100


#define TRUE 1
#define FALSE 0

typedef char BOOL;


typedef struct {
float x;
float y;
float z;
} POINT3D;

POINT3D v[MAX],vclip[MAX],plane[2];

/* Declarao de funes : */

POINT3D intersection(POINT3D s,POINT3D p,POINT3D plane[]);


int addVertex(POINT3D i,int nclip,POINT3D vclip[]);
BOOL inside(POINT3D p,POINT3D plane[]);

/* Recorte de um polgono contra um plano infinito pelo mtodo de Sutherland-Hodgman : */

int SHPolygonClip3D(POINT3D v[],int n,POINT3D plane[],POINT3D vclip[])


{
int j,nclip;
POINT3D s,p,i;

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;

Figura 3.34 - Recorte de polgonos contra um plano infinito

97
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

/* Determina se um ponto est localizado no lado interno de um plano: */

BOOL inside(POINT3D p,POINT3D plane[])


{
if ((p.x*plane[1].x+p.y*plane[1].y+p.z*plane[1].z) <
(plane[0].x*plane[1].x+plane[0].y*plane[1].y+plane[0].z*plane[1].z))
return TRUE;
return FALSE;
}

/* Calcula a interseo de uma aresta com um plano : */

POINT3D intersection(POINT3D s,POINT3D p,POINT3D plane[])


{
float a,b,c,t;
POINT3D i;

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;
}

/* Adiciona um vrtice ao polgono recortado : */

int addVertex(POINT3D i,int nclip,POINT3D vclip[])


{
vclip[nclip].x = i.x;
vclip[nclip].y = i.y;
vclip[nclip].z = i.z;
return (nclip+1);
}

Figura 3.34 (Continuao)

98
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

4 REPRESENTAO DE CURVAS E SUPERFCIES

Antes de serem visualizados, os objetos devem ser modelados geometricamente, ou


discretizados por elementos ou primitivas. Estes elementos podem ser de uma, duas, ou trs
dimenses, conforme o nmero de parmetros necessrios para descrev-los (Figura 4.1).
Podem tambm ser lineares ou de grau superior, dependendo do grau p de suas equaes
paramtricas. Frequentemente utiliza-se o termo wire-frame para designar a representao
de um objeto por meio de elementos unidimensionais, que so segmentos de reta (lineares)
ou segmentos de curva (p > 1). Os elementos bidimensionais so superfcies curvas, quando
o grau dos polimios em s e t maior do que 1, ou faces planas ou polgonos, quando as
equaes paramtricas so lineares. Como as operaes de converso so tipicamente
bidimensionais, os objetos slidos devem ser representados por pequenos volumes vazios,
definidos por uma associao de elementos de superfcie. Poliedros so um exemplo de
elementos slidos lineares.

A utilizao de elementos lineares na visualizao de um objeto facilita as operaes


de converso, de recorte e de determinao da visibilidade dos elementos. No entanto, a
representao paramtrica de elementos de ordem superior se constitui em uma ferramenta
poderosa na gerao de elementos lineares. Assim, uma forma geomtrica pode ser
inicialmente representada por equaes paramtricas cbicas, por exemplo, e
posteriormente subdividida em vrios elementos lineares, conforme a preciso desejada. Os
conceitos bsicos sobre a representao paramtrica de curvas e superfcies [13] so
apresentados a seguir.

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)

Figura 4.1 - Elementos unidimensionais (a), bidimensionais (b) e tridimensionais (c).

99
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

4.1 CURVAS PARAMTRICAS

A representao paramtrica de curvas,

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,

Q(t) = [x(t) y(t) z(t)] (4.4)

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)

Matricialmente, o segmento Q representado pela expresso:

Q(t) = [ x(t) y(t) z(t) ] = T . C (4.8)

onde T e a matriz de coeficientes C so iguais a:

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

A derivada de Q(t) representa o vetor tangente curva:

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 ]

Uma curva formada simplesmente pela conexo de dois segmentos tem


continuidade geomtrica G0. Se as direes (mas no necessariamente as magnitudes) dos
dois vetores tangentes so iguais no ponto de conexo, ento a curva tem continuidade
geomtrica G1. Se os dois vetores tangentes curva no ponto de conexo so iguais em
direo e magnitude, ento a curva tem continuidade C1 (continuidade paramtrica).
Generalizando, se as direes e magnitudes das derivadas at a ordem n so iguais, ento
diz-se que a curva de continuidade Cn. O vetor Q(t) corresponde velocidade de um
ponto da curva em relao ao parmetro t, e a segunda derivada Q(t) representa a
acelerao. Em geral continuidade C1 implica em continuidade geomtrica G1, mas a
recproca no verdadeira, isto , uma curva pode ter continuidade G1 e no ter
continuidade C1. A exceo ocorre quando os dois vetores tangentes curva no ponto de
conexo so iguais a (0, 0, 0). Neste caso, por definio, a curva apresenta continuidade
C1, mas as tangentes no ponto de conexo podem ser diferentes, como mostra a Figura
4.2.

Um polinmio cbico tem quatro coeficientes e, portanto, so necessrias quatro


condies para determin-los. Por exemplo, nos polinmios cbicos de Hermite, as
condies impostas so os dois pontos extremos e seus dois vetores tangentes. Os
polinmios cbicos de Bzier, por outro lado, so definidos pelos dois pontos extremos e
mais dois pontos no pertencentes curva que definem as tangentes nas extremidades.

Figura 4.2 - Caso especial de continuidade paramtrica maior do que continuidade


geomtrica.

101
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

A matriz de coeficientes C de um polinmio cbico pode ser escrita sob a forma de


um produto de uma matriz base M, de ordem 4x4, por outra outra matriz G (matriz
geomtrica), que representa as condies geomtricas impostas:

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

As colunas Gx, Gy e Gz da matriz G representam as condies geomtricas que


correspondem a x, y e z, respectivamente, e os coeficientes mij da matriz M dependem
destas condies. Deste modo, um segmento de curva Q(t) pode ser representado por:

Q(t) = [ x(t) y(t) z(t) ] = T . C = T. M .G (4.15)

ou,

x(t) = T . M .Gx (4.16)

y(t) = T . M .Gy (4.17)

z(t) = T . M .Gz (4.18)

102
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

4.1.1 Polinmios de Lagrange

Os polinmios cbicos de Lagrange so definidos pelos pontos extremos e mais


dois pontos pertencentes curva (Figura 4.3). Matricialmente, so representados pela
expresso:
Q(t) = T . ML. GL (0 t 1) (4.19)

onde ML a matriz base e GL a matriz geomtrica de Lagrange:

P1x P1y P1z


P P2 z
[ ]
P2 y
=
2x
G L = G Lx G Ly G Lz (4.20)
P3 x P3 y P3 z

P4 x P4 y P4 z

Figura 4.3 - Polinmios cbicos de Lagrange.

Considerando a direo x, as condies geomtricas so:

x(0) = P1x = [ 0 0 0 1 ] ML . GLx (4.21)

x(1) = P2x = [ 1 1 1 1 ] ML . GLx (4.22)

x(1/3) = P3x = [ 1/27 1/9 1/3 1 ] ML . GLx (4.23)

x(2/3) = P4x = [ 8/27 4/9 2/3 1 ] ML . GLx (4.24)

103
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

ou de forma mais compacta:

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)

e introduzindo este resultado em (4.19), obtm-se:

Q(t) = BL . GL = [ BL.GLx BL.GLy BL.GLz ] (4.28)

onde BL representa as funes de interpolao de Lagrange:

BL = [ L1 L2 L3 L4 ] (4.29)

Estas funes, representadas graficamente na Figura 4.4, so iguais a:

L1 = (-9/2) t3 + 9 t2 -(11/2) t + 1 (4.30)

L2 = (9/2) t3 - (9/2) t2 + t (4.31)

L3 = (27/2) t3 - (45/2) t2 + 9 t (4.32)

L4 = -(27/2) t3 + 18 t2 - (9/2) t (4.33)

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

Figura 4.4 - Funes de interpolao de Lagrange.

Inspecionando as equaes (4.30)-(4.33), conclui-se que as funes de interpolao


satisfazem as relaes:

L1 + L2 + L3 + L 4 = 1 (0 t 1) (4.34)

1 , t = ti
Li = (4.35)
0, t = t j ( j i)

onde ti representa o valor de t nos pontos Pi (i = 1,..,4). A derivada Q(t) igual a:

d
Q ( t ) = [ 3t 0] . M L . G L = B L . G L
2
2t 1 (4.36)
dt

e, portanto, a componente do vetor velocidade na direo x dada por:

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

Reagrupando os termos da expresso acima, obtm-se:

d 27 27 81 81
x( t ) = P1x + P2 x + P3x P4 x t 2 +
dt 2 2 2 2

+ (18 P1x 9 P2 x 45 P3 x 36 P4 x ) t + (4.38)

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

P1x P3x P4x P2x


x
x / 3 x / 3 x / 3

Figura 4.5 - Espaamento uniforme em x.

106
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

De fato, para que a velocidade ao longo de uma curva seja constante, o


espaamento entre os pontos Pi deve ser uniforme ou, em outras palavras, a intervalos
constantes t devem corresponder distncias iguais ao longo da curva.

Para um polinmio genrico de grau p, as condies geomtricas so dadas por


p+1 pontos pertencentes curva, e as funes de interpolao so obtidas atravs da
expresso:

( t t 1 )......( t t i 1 ) ( t t i+1 )...... ( t t p +1 )


Li =
p
(4.42)
( t i t 1 ).... ( t i t i 1 ) ( t i t i +1 )..... ( t i t p+1 )

4.1.2 Polinmios cbicos de Hermite

Um polinmio cbico de Hermite determinado pelos pontos extremos P1, P2 e por


seus vetores tangentes R1 e R2 (ver Figura 4.6), sendo representado pela expresso:

Q(t) = T . MH. GH (0 t 1) (4.43)

onde MH a matriz base de Hermite e GH a matriz geomtrica associada:

P1x P1y P1z


P P2 z
[ ]
P2 y
=
2x
G H = G Hx G Hy G Hz (4.44)
R 1x R 1y R 1z

R 2 x R 2y R 2 z

Figura 4.6 - Polinmios cbicos de Hermite.

107
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Considerando por simplicidade a direo x, as condies nos pontos extremos so


dadas por:

x(0) = P1x = [ 0 0 0 1 ] MH . GHx (4.45)

x(1) = P2x = [ 1 1 1 1 ] MH . GHx (4.46)

x(0) = R1x = [ 0 0 1 0 ] MH . GHx (4.47)

x(1) = R2x = [ 3 2 1 0 ] MH . GHx (4.48)

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

A matriz MH utilizada para a determinao de x(t) sob as condies impostas no


vetor GHx. O mesmo vlido para as direes y e z. Fazendo

BH = T. MH (4.51)

e introduzindo este resultado em (4.43), obtm-se:

Q(t) = BH . GH = [ BH.GHx BH.GHy BH.GHz ] (4.52)

108
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

onde BH representa as funes de interpolao de Hermite:

BH = [ H1 H2 H3 H4 ] (4.53)

Efetuando o produto em (4.51) obtm-se estas funes:

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)

e expandindo o polinmio x(t) obtm-se:

x(t) = BH .GHx = H1 .P1x + H2 .P2x + H3 .R1x + H4 . R2x (4.58)

A Figura 4.7 mostra as funes de Hermite H1, H2, H3 e H4.

f(t)
1
H1 H2

0.5

H3

0 t
0 0.5 1
H4

-0.5

Figura 4.7 - Funes de interpolao cbicas de Hermite.

109
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Para que dois segmentos cbicos de Hermite Q1 e Q2 partilhem um mesmo vrtice


com continuidade geomtrica G1 (Figura 4.8), necessrio que os vetores geomtricos dos
dois segmentos sejam iguais a:

P1
P
=
2
G 1H (4.59)
R 1

R 2

P2
P
=
3
G 2H (4.60)
k . R 2

R3

com k > 0. Se k = 1 tem-se continuidade C1 .

Figura 4.8 - Conexo de dois segmentos cbicos de Hermite.

4.1.3 Curvas de Bzier

Os polinmios cbicos de Bzier so especificados atravs dos pontos extremos e


de dois pontos no pertencentes curva que controlam as tangentes nas extremidades
(Figura 4.9). Os vetores tangentes das extremidades so determinados pelos vetores P1P3 e
P4P2 , que esto relacionados a R1 e R2 por:

110
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

R1 = Q(0) = 3 (P3 - P1) (4.61)

R2 = Q(1) = 3 (P2 - P4) (4.62)

A matriz geomtrica de Bzier dada por:

P1 P1x P1y P1z


P P P2 y P2 z
=
2 2x
GB = (4.63)
P3 P3x P3 y P3z

P4 P4 x P4 y P4 z

e, em consequncia, a matriz MHB que transforma a matriz geomtrica de Bzier na matriz


geomtrica de Hermite,

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

Figura 4.9 - Polinmio cbico de Bzier.

111
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Sendo assim, pode-se escrever:

Q(t) = T . MH . GH = T . MH . MHB . GB (4.66)

e, portanto, a matriz base de Bzier igual a:

1 1 33
3 0 6 3
M B = M H . M HB = (4.67)
3 0 3 0

1 0 0 0

A curva paramtrica de Bzier pode ento ser escrita na forma:

Q(t) = T . MB .GB (4.68)


ou

Q(t) = BB . GB (4.69)

onde BB representa as funes de interpolao de Bzier:

BB = T . MB = [ B1 B2 B3 B4 ] (4.70)

Estas funes so:

B1 = (1- t)3 (4.71)

B2 = t3 (4.72)

B3 = 3t (1 - t)2 (4.73)

B4 = 3t2 (1 - t) (4.74)

Expandindo o produto BB .GB , obtm-se:

Q(t) = B1.P1 + B2.P2 + B3.P3 + B4.P4 (4.75)

112
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

As funes de interpolao em BB so chamadas polinmios de Bernstein (Figura


4.10). Pode-se verificar que:

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

Figura 4.10 - Funes de interpolao de Bernstein.

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

Como os quatro pontos de controle se situam sobre o eixo x, as componentes y do


polinmio e de sua derivada so nulas:

Q(t) = [ x(t) y(t) ] = [ x(t) 0 ] (4.77)

Escrevendo a funo x(t) na forma de Hermite obtm-se:

x(t) = (6t2 - 6t) P1x + (-6t2 + 6t) P2x + (3t2 - 4t + 1) R1x +

+ (3t2 - 2t) R2x (4.78)

e substituindo nesta expresso as condies impostas,

P1x = 0 (4.79)

P2x = 3 (4.80)

R1x = (P3x - P1x) = (4.81)

R2x = (P2x - P4x) = (4.82)

chega-se ao resultado:

x(t) = 3 (-6t2 + 6t) + (3t2 - 4t + 1) + (3t2 - 2t) =

= 3(-6t2 + 6t) + (6t2 - 6t) + = (6t2-6t) (-3) + (4.83)

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

Figura 4.12 - B-spline cbica com m = 7.

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.

Cada segmento da curva determinado por quatro pontos de controle. Em


particular, o segmento Qi definido pelos pontos Pi, Pi+1, Pi+2, Pi+3. Consequentemente, o
vetor geomtrico de cada segmento Qi representado por:

Pi
P
=
i+ 1
G BSi , i = 0,..., m 1 (4.84)
Pi+ 2

Pi +3

A posio e os vetores tangentes das extremidades de cada segmento relacionam-


se aos pontos de controle atravs das expresses:

Qi(ti) = (Pi + 4Pi+1 + Pi+2) / 6 (4.85)

Qi(ti+1) = (Pi+1 + 4Pi+2 + Pi+3) / 6 (4.86)

Qi(ti) = (Pi+2 - Pi) / 2 (4.87)

Qi(ti+1) = (Pi+3 - Pi+1) / 2 (4.88)

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,

Ti = [ (t - ti)3 (t - ti)2 (t - ti) 1 ] (4.89)

cada segmento pode ser escrito na forma,

Q i ( t t i ) = Ti . M BS . G BSi , ( t i t t i+1 ) (4.90)

onde MBS a matriz base. Fazendo t = t - ti e assumindo ti = 1, a expresso acima pode


ser reescrita na forma:

Q i ( t ) = T . M BS . G BS i , ( 0 t 1) (4.91)

com o produto T.MBS representando as funes de interpolao:

BBS = T.MBS = [ t3 t2 t 1 ] MBS (4.92)

Com a mudana de varivel acima, a posio e os vetores tangentes das


extremidades de cada segmento Qi podem ser obtidos de acordo com:

Q i ( 0) = [ 0 0 0 1] . M BS . G BS i (4.93)

Q i (1) = [1 1 1 1] . M BS . G BSi (4.94)

Q i ( 0) = [ 0 0 1 0] . M BS . G BSi (4.95)

Q i (1) = [ 3 2 1 0] . M BS . G BSi (4.96)

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

Comparando as equaes (4.97) e (4.98), conclui-se que:

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

e obtm-se ento a matriz base MBS para uma B-spline uniforme:

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

Substituindo o resultado acima em (4.92), obtm-se as funes de base ou funes


de interpolao:

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

Utilizando as expresses acima, cada segmento pode ser escrito na forma:

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 )

Observando as funes BS i (Figura 4.13), pode-se verificar que:

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

1/6 BS0 BS3

0 t'
0 0.5 1

Figura 4.13 - Funes de base de uma B-spline uniforme cbica.

118
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Figura 4.14 - Quadriltero formado pelos quatro pontos de controle de uma B-spline
cbica.

Pode-se mostrar que os segmentos Qi possuem continuidade C2 nos pontos de


conexo. Para isto, suficiente mostrar que para dois segmentos adjacentes Qi e Qi+1
(Figura 4.15) so vlidas as relaes (considerando-se, por simplicidade, somente a
direo x):

x i ( t i+1 ) = x i+1 ( t i +1 ) (4.108)

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

ou equivalentemente (como as funes de interpolao so definidas no intervalo 0 t


1):

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

As derivadas das funes de interpolao so:

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

e para t = 0 e t = 1 pode-se escrever:

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

Figura 4.15 - Dois segmentos de curva adjacentes Qi e Qi+1 .

120
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Sendo xi e xi+1 dados por:

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

demonstrando-se a continuidade C2 nos pontos de conexo dos segmentos.

121
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

4.2 SUPERFCIES PARAMTRICAS

Assim como as curvas, uma superfcie Q pode tambm ser representada de forma
paramtrica (Figura 4.16):

Q(s,t) = [ x (s, t) y (s, t) z (s, t) ] (4.130)

Matricialmente, uma superfcie cbica representada por:

x(s, t) = S .Cx .Tt (4.131)

y(s, t) = S .Cy .Tt (4.132)

z(s, t) = S .Cz .Tt (4.133)

onde Cx , Cy e Cz so as matrizes 4x4 de coeficientes nas direes x, y e z,


respectivamente, e S e T so iguais a:

S = [ s3 s2 s 1 ] (4.134)

T = [ t3 t2 t 1] (4.135)

t
y

Q(s, t) 1

x s
0
1

Figura 4.16 - Superfcie paramtrica.

122
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

4.2.1 Superfcies de Lagrange

Uma superfcie cbica de Lagrange definida por 16 pontos de controle


pertencentes superfcie, como mostra a Figura 4.17, sendo descrita pelas expresses:

x(s, t) = (S.ML).GLx.(T.ML) t (4.136)

y(s, t) = (S.ML).GLy.(T.ML) t (0 s 1), (0 t 1) (4.137)

z(s, t) = (S.ML).GLz.(T.ML) t (4.138)

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:

P11,x P12 ,x P13,x P14 ,x


P P22, x P23 ,x P24, x
=
21, x
G Lx (4.139)
P31,x P32, x P33 ,x P34, x

P41,x P42, x P43 ,x P44, x

P11,y P12 ,y P13,y P14 ,y


P P22, y P23 ,y P24, y
=
21, y
G Ly (4.140)
P31,y P32, y P33 ,y P34, y

P41,y P42, y P43 ,y P44, y

P11,z P12 ,z P13,z P14, z


P P22 ,z P23 ,z P24 ,z
=
21, z
G Lz (4.141)
P31,z P32 ,z P33 ,z P34 ,z

P41,z P42 ,z P43 ,z P44 ,z

Os produtos (S.ML) e (T.ML) das equaes acima representam as funes


unidimensionais cbicas de Lagrange nas direes s e t, respectivamente:

S.ML = BL(s) = [ L1(s) L2(s) L3(s) L4(s) ] (4.142)

T.ML = BL(t) = [ L1(t) L2(t) L3(t) L4(t) ] (4.143)

123
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Figura 4.17 - Pontos de controle de uma superfcie cbica de Lagrange.

Da substituio destas expresses em (4.136)-(4.138) resultam:

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)

e efetuando os produtos, obtm-se:

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

Portanto, pode-se concluir que as funes de interpolao bidimensionais de Lagrange


ij(s,t), correspondentes aos pontos Pij, so iguais aos produtos das funes
unidimensionais nas direes s e t:

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.

4.2.2 Superfcies cbicas de Hermite

Nas superfcies cbicas de Hermite, as componentes x, y e z so representadas


pelas expresses:

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

4.2.3 Superfcies de Bzier

Da mesma forma que as superfcies de Hermite, as superfcies de Bzier so obtidas


atravs de expresses do tipo:

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):

P11,x P12 ,x P13,x P14 ,x


P P22 ,x P23,x P24 ,x
=
21, x
G Bx (4.160)
P31,x P32 ,x P33,x P34 ,x

P41,x P42 ,x P43,x P44 ,x

126
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

P11,y P12 ,y P13,y P14 ,y


P P22 ,y P23,y P24 ,y
=
21, y
G By (4.161)
P31,y P32 ,y P33,y P34 ,y

P41,y P42 ,y P43,y P44 ,y

P11,z P12 ,z P13,z P14 ,z


P P22 ,z P23,z P24 ,z
=
21, z
G Bz (4.162)
P31,z P32 ,z P33,z P34 ,z

P41,z P42 ,z P43,z P44 ,z

Figura 4.18 - Pontos de controle de uma superfcie cbica de Bzier.

4.3 SUPERFCIES POLIDRICAS

Uma superfcie polidrica representada por um conjunto de arestas, vrtices e


polgonos. Os vrtices esto ligados por arestas e os polgonos, designados faces, so
sequncias fechadas de arestas pertencentes a um mesmo plano. A seguir so examinados
trs mtodos de representao de uma superfcie ou malha polidrica:

- lista explcita de vrtices

- lista de polgonos

- lista explcita de arestas

Na lista explcita de vrtices, cada polgono representado por uma lista de


coordenadas dos vrtices:

P = [ (x1 , y1 , z1 ), (x2 , y2 , z2 ), ....... , (xn , yn , zn ) ] (4.163)

127
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Os vrtices so armazenados em um sentido pr-estabelecido. Por exemplo, pode-


se estabelecer um sentido que identifique a face externa da superfcie, como mostra mostra
a Figura 4.19. Apesar de ser funcional para um polgono isolado, esta forma de
representao bastante ineficiente para uma malha completa, em que vrtices partilhados
so repetidos vrias vezes.

z n

Figura 4.19 - Sentido de numerao de um polgono, identificando o sentido da normal


externa superfcie.

Na lista de polgonos, cada vrtice armazenado em uma lista V de vrtices:

V = (V1 , V2 , ..... , Vn ) (4.164)

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

Figura 4.20 - Lista de polgonos.

128
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

No mtodo da lista explcita de arestas so mantidas uma lista V de vrtices e uma


lista E de arestas:

V = (V1 , V2 , ..... , Vn ) (4.166)

E = (E1 , E2 , ..... , Em ) (4.167)

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:

Ei = (v1 , v2 , p1 , ... , pk ) (4.168)

Sendo ei apontadores da lista de arestas, um polgono com q arestas definido por:

Pi = (e1 , ....., eq ) (4.169)

Superfcies polidricas podem ser geradas ou obtidas a partir de superfcies


paramtricas de grau superior. A subdiviso da superfcie feita no domnio regular definido
pelos parmetros s e t, onde a topologia da malha, ou seja, as relaes de conetividade
entre vrtices, arestas e polgonos, facilmente determinada. Em seguida, a malha criada no
domnio regular mapeada para o espao tridimensional, atravs das equaes
paramtricas da superfcie.

129
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

5 ELIMINAO DE SUPERFCIES OCULTAS

A determinao da visibilidade de um objeto consiste em eliminar as partes de sua


superfcie que so ocultas por outras, sob o ponto de vista do observador. Este processo
conhecido por eliminao de superfcies ocultas, ou eliminao de linhas ocultas, se as
linhas so consideradas como sendo as arestas das superfcies.

Os algoritmos de eliminao de superfcies ocultas classificam-se em duas


categorias principais. Na primeira categoria esto os algoritmos que trabalham diretamente
com o objeto (object-precision algorithms), sem levar em conta a sua imagem
representada por pixels. Nesta categoria inclui-se o algoritmo de prioridades. Estes
algoritmos operam, convenientemente, sobre o volume de visualizao normalizado, aps as
operaes de recorte terem sido realizadas. A tarefa destes algoritmos geomtrica, e
consiste em determinar as partes do objeto visveis ao observador, levando em conta as
profundidades das partes e verificando suas intersees.

A segunda categoria compreende os mtodos que trabalham diretamente com a


imagem convertida do objeto (image-precision algorithms). A idia destes algoritmos
determinar, para cada pixel da tela, quais os pontos do espao normalizado que, aps
transformados em coordenadas de dispositivo, produzem a sua converso. Dentre estes, o
mais prximo ao observador escolhido, e o pixel convertido com a cor de sua primitiva
de origem. Os algoritmos Z-buffer e ray-tracing so exemplos de algoritmos pertencentes
a esta categoria.

5.1 ALGORITMO DE PRIORIDADES

A idia bsica do algoritmo de prioridades ordenar as primitivas de acordo com


suas profundidades z, ou distncias em relao ao ponto de observao. As primitivas so
convertidas na ordem decrescente de suas profundidades, fazendo com que as mais
prximas ao observador se sobreponham s mais distantes. Considerando o modelo de
visualizao do item 3.3, a ordenao de profundidades feita no sistema de coordenadas
normalizadas r-s-t, tendo em conta que a distncia de um ponto ao observador (1- t) na
projeo perspectiva e ( - t) na projeo paralela. Portanto, as primitivas devem ser
ordenadas no sentido crescente de t.

Na verso mais simples deste algoritmo, denominada algoritmo do pintor, as


primitivas so ordenadas de acordo com as profundidades de seus centros geomtricos ou
de acordo com seus valores mnimos de z (zmin). Para alguns casos, esta verso simplificada
produz bons resultados, como por exemplo no caso de superfcies suaves (superfcies sem
grandes variaes locais da normal superfcie), aproximadas por faces planas. Entretanto,

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.

Seja um conjunto de polgonos ordenados em ordem decrescente de acordo com


suas profundidades mnimas. A posio inicial do arranjo ordenado aponta para o polgono
P, sendo este, portanto, o polgono mais distante do observador. Antes de ser convertido,
este polgono deve ser comparado com todos os polgonos Q cujas extenses, na direo
z, se sobreponham extenso de P, como o caso da Figura 5.1. Se no h interseo
entre as extenses em z de P e Q, pode-se afirmar que o polgono Q no oculto por P.
Caso contrrio, cinco testes adicionais, comparando P e Q, devem ser realizados nesta
ordem:

1. A interseo entre as extenses de P e Q na direo x nula ?

2. A interseo entre as extenses de P e Q na direo y nula ?

3. P est inteiramente situado do lado oposto do plano de Q, em relao ao


observador (Figura 5.2a) ?

4. Q est inteiramente situado entre o observador e o plano de P (Figura 5.2b)?

5. A interseo entre as projees de P e Q no plano de projeo nula ?

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:

3. Q est inteiramente situado do lado oposto do plano de P, em relao ao


observador ?

4. P est inteiramente situado entre o observador e o plano de 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.

A implementao dos testes para verificar a interseo das extenses de dois


polgonos nas direes x, y e z trivial. Os testes 3 e 4 consistem em saber se um
determinado polgono se situa em um mesmo lado de um plano. Isto pode ser feito
aplicando-se a expresso (3.84), que considera a equao de um plano e a posio de um
ponto, para cada vrtice do polgono. No teste 5, as arestas de um polgono so
comparadas com todas as arestas do outro, no plano de projeo. Se houver cruzamento
de arestas, ento as projees dos polgonos se sobrepoem.

extenses em z
de P e Q

Figura 5.1 - Extenses em z de dois polgonos P e Q.

P P

Q
Q
z z
(a) (b)

Figura 5.2 - (a) P inteiramente no lado oposto do plano de Q, em relao ao observador.


(b) Q inteiramente entre o observador e o plano de P.

132
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

P
Q

P Q

x
z

(a) (b)

Figura 5.3- (a) Q situado inteiramente no lado oposto de P, em relao ao observador.


(b) Dois polgonos P e Q, um interferindo na visibilidade do outro.

R
Q

Figura 5.4 - Entrelaamento de polgonos.

133
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

5.2 ALGORITMO Z-BUFFER

Para implementar o algoritmo Z-buffer [14] necessrio dispor de um arranjo


bidimensional, denominado Z-buffer, onde cada elemento Z-buffer(i, j) corresponde ao
pixel de coordenadas (i, j) no dispositivo grfico. Portanto, para um dispositivo de NxM
pixels, necessita-se de um arranjo com NxM elementos.

Inicialmente, a profundidade correspondente ao plano posterior de recorte (t=0)


atribuda a todos os elementos do arranjo Z-buffer. Durante a fase de converso o
algoritmo calcula, para cada pixel a ser convertido, a profundidade do ponto no espao de
coordenadas normalizadas correspondente a este pixel Se esta for menor do que a
profundidade corrente, ento o pixel convertido com a cor de sua primitiva, e o elemento
do arranjo Z-buffer atualizado com a nova profundidade, como mostram as linhas de
cdigo abaixo:

if ( z(i, j) < Z-buffer(i, j) )


{
writepixel(i, j, color);
Z-buffer(i, j) = z(i, j);
}

As funes de converso especficas de cada primitiva devem ser modificadas de


modo que a profundidade de cada ponto convertido seja calculada. Assim, este algoritmo
pode ser aplicado a qualquer primitiva, desde que as profundidades de todos os pontos
possam ser determinadas. Outra vantagem deste mtodo que as primitivas podem ser
convertidas em qualquer ordem, no sendo necessria nenhuma ordenao. Por outro lado,
para representar uma matriz de 800 x 600 pixels, so necessrios 800 x 600 x P bytes para
armazenar as profundidades, sendo P o nmero de bytes do tipo de varivel do arranjo Z-
buffer. Utilizando reais de 4 bytes (P = 4) so necessrios 1.831 Mb de memria.

5.3 RAY-TRACING

Neste mtodo [15-19], a janela de visualizao definida no plano de projeo


dividida em uma malha regular, onde cada clula corresponde a um pixel da tela (Figura
5.5). Para cada clula obtm-se as equaes paramtricas da reta que passa pelo seu
centro e pelo centro de projeo, ou da linha de projeo que passa pelo centro da clula.
O pixel correspondente a esta clula ter a cor da primitiva mais prxima do observador
(centro de projeo) que intercepta a reta.

134
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

Os clculos efetuados por este algoritmo resumem-se aos clculos de intersees


de retas com as primitivas. Assumindo que o centro de projeo tenha coordenadas (x0, y0,
z0) e que o centro de uma clula seja dado por (x1, y1, z1), as equaes paramtricas da
reta so:

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

A reta s no intercepta o plano do polgono se o denominador da equao acima for igual


a zero.

Se a reta intercepta o plano, o prximo passo verificar se o ponto de interseo


pertence ao interior do polgono. Isto feito projetando ortograficamente o ponto e o
polgono na direo do eixo principal que corresponde ao cosseno diretor da equao do
plano de maior valor absoluto. O plano normal a este eixo o que ter a maior projeo do
polgono. Em consequncia, as projees do ponto e do polgono so obtidas ignorando-se

135
Introduo Computao Grfica Fernando Luiz Bastos Ribeiro

a coordenada correspondente ao cosseno diretor de maior valor absoluto. Com as


projees obtidas, utiliza-se um algoritmo adequado para determinar se um ponto pertence
ao interior de um polgono. Para um polgono convexo, um ponto pertence ao seu interior se
estiver situado esquerda de todas as arestas, quando os vrtices so percorridos no
sentido anti-horrio.

polgonos
interceptados

centro de
janela de
projeo
visualizao

Figura 1.5 - Janela de visualizao transformada em uma malha regular correspondente


matriz de pixels da tela.

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.

2. Rogers, D. F., Procedural Elements for Computer Graphics, McGraw-Hill, 1988.

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.

6. Sutherland, I. E. and Hodgman, G. W., Reentrant Polygon Clipping,


Communications of the Association for Computing Machinery (CACM), vol. 17(1),
pp. 32-42, 1974.

7. Maxwell, E. A., Methods of Plane Projective Geometry Based on the use of


General Homogeneous Coordinates, Cambridge University Press, 1946.

8. Maxwell, E. A., General Homogeneous Coordinates in Space of Three Dimensions,


Cambridge University Press, 1951.

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

Vous aimerez peut-être aussi