You are on page 1of 94

´ – UFG

UNIVERSIDADE FEDERAL DE GOIAS
˜ – CaC
CAMPUS CATALAO
˜ – DCC
ˆ
DEPARTAMENTO DE CIENCIA
DA COMPUTAC
¸ AO
Bacharelado em Ciˆencia da Computac¸a˜ o
Projeto Final de Curso

Pipeline de Visualizac¸a˜ o Gr´afica

Autor: Alex Fernando de Ara´ujo
Orientador: Prof. Acr´ısio Jos´e do Nascimento J´unior

Catal˜ao - 2007

´
Alex Fernando de Araujo

Pipeline de Visualizac¸a˜ o Gr´afica
Monografia apresentada ao Curso de
Bacharelado em Ciˆencia da Computac¸a˜ o da
Universidade Federal de Goi´as Campus Catal˜ao
como requisito parcial para obtenc¸a˜ o do t´ıtulo de
Bacharel em Ciˆencia da Computac¸a˜ o
´
Area
de Concentrac¸a˜ o: Visualizac¸a˜ o de S´olidos
Orientador: Prof. Acr´ısio Jos´e do Nascimento J´unior

Catal˜ao - 2007

Ara´ujo, A. F.
´
Pipeline de Visualizac¸a˜ o Gr´afica/Prof. Acr´ısio Jos´e do Nascimento JuniorCatal˜ao 2007
N´umero de paginas: 79
Projeto Final de Curso (Bacharelado) Universidade Federal de Goi´as, Campus Catal˜ao,
Curso de Bacharelado em Ciˆencia da Computac¸a˜ o, 2007.
Palavras-Chave: 1. Projec¸a˜ o. 2. Cˆamera. 3. Clipping e Detecc¸a˜ o/Remoc¸a˜ o de Superf´ıcies
Escondidas

Ms.Avaliador .´ Alex Fernando de Araujo Pipeline de Visualizac¸a˜ o Gr´afica Monografia apresentada e aprovada em de Pela Banca Examinadora constitu´ıda pelos professores. Acr´ısio Jos´e do Nascimento J´unior – Presidente da Banca Prof.Avaliador Prof. Ver´ıssimo Guimar˜aes J´unior . Prof. M´arcio Antˆonio Duarte .

criticaram a linha de pesquisa e os m´etodos que escolhi para o desenvolvimento desta monografia. por ser o est´ımulo que me faz crescer sempre. . Dedico tamb´em a todas aquelas pessoas. e por abrir m˜ao da minha companhia. que por n˜ao me conhecerem direito e/ou por terem pouco conhecimento sobre computac¸a˜ o gr´afica. buscando uma vida melhor.Dedico este trabalho a` minha fam´ılia por estar sempre disposta a me ajudar nos momentos que mais preciso. concedendo a mim a oportunidade de ir atr´as dos meus objetivos.

que al´em de ser muito especial na minha vida e A uma grande incentivadora para a conclus˜ao deste trabalho. A todos os professores do departamento de Ciˆencia da Computac¸a˜ o e de outros departamentos que de alguma forma contribu´ıram com a minha formac¸a˜ o. pelo incentivo e agrad´avel recepc¸a˜ o durante os simp´osios e congressos que tivemos a oportunidade de participar juntos. e´ a minha revisora particular. que sempre foi fundamental na minha vida. Especialmente ao Professor CARLOS ALBERTO MORENO BARBOSA. presteza no aux´ılio a` s atividades e discuss˜oes sobre o andamento e normatizac¸a˜ o desta monografia de conclus˜ao de curso. Aos colegas de classe pela espontaneidade e alegria na troca de informac¸o˜ es e materiais numa rara demonstrac¸a˜ o de amizade e solidariedade. ´ Ao meu orientador Prof. A todos os demais professores. pois sem ele eu n˜ao estaria aqui e vocˆes n˜ao teriam a oportunidade de ver este trabalho. ` NATHASA RODRIGUES PIMENTEL. me apoiando e incentivando o tempo todo. Ao grande amigo LEONARDO GARCIA MARQUES. Ao Professor FERNANDO GOULART. funcion´arios e colaboradores da Universidade Federal de Goi´as pela dedicac¸a˜ o e entusiasmo demonstrado ao longo do curso. aux´ılio a` s atividades desenvolvidas durante esta monografica e pelas dicas sobre a importˆancia da computac¸a˜ o gr´afica e sobre a quantidade de boas pesquisas que podem ser desenvolvidas nesta a´ rea. ACR´ISIO JOSE´ DO NASCIMENTO JUNIOR pelo incentivo.AGRADECIMENTOS Em primeiro lugar a Deus. E a` minha fam´ılia. sem a qual esta monografia n˜ao teria a mesma qualidade. . pelo apoio. pelo aux´ılio no uso do LaTex para a formatac¸a˜ o desta monografia e dos artigos produzidos.

“De nada adianta correr: e´ preciso partir no momento preciso.”(Jean de la Fontaine) .

Brasil. que e´ pouco conhecida pela literatura. Catal˜ao. vantagens e desvantagens. pus Catal˜ao. Tamb´em trata mais especificamente de clipping com a utilizac¸a˜ o de janelas de recorte (ou viewport no formato circular. Pipeline de Visualizac¸a˜ o Gr´afica. Este trabalho apresenta um pouco do pipeline de visualizac¸a˜ o gr´afica. mostrando que a a´ rea de visualizac¸a˜ o de s´olidos e´ pouco explorada na computac¸a˜ o gr´afica e permite muitas pesquisas neste segmento. CamAraujo. Curso de Ciˆencia da Computac¸a˜ o. Cˆamera. que e´ composta pelo sistema de cˆameras virtuais. Palavras-Chaves: Projec¸a˜ o. F. 79p. UFG. apresentando seus fundamentos. clipping e detecc¸a˜ o e remoc¸a˜ o de superf´ıcies ocultas. 2007. Clipping e Detecc¸a˜ o/Remoc¸a˜ o de Superf´ıcies Escondidas i .RESUMO ´ A. aplicac¸o˜ es. projec¸a˜ o.

. 6 2. 6 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2. . . . . . .5 Composic¸a˜ o de Transformac¸o˜ es em 3D . . . .1 Introduc¸a˜ o . . . . .6 A Cˆamera Virtual . . 18 2. . . . . . 20 Projec¸a˜ o 3. . . . . . . . .4 Simulando Efeitos de Foco em Cˆamera . . . . . . . . . 5 Cˆamera 2. .2 Tipos de Projec¸o˜ es . . . . . . . . . . . . . . . .3. . . 7 Especificac¸a˜ o das Coordenadas de Visualizac¸a˜ o . . . . . . . 16 2. . . . . . . .3 Clipping . . .1 Uma Analogia com a Cˆamera Real . . . . . . .2. 6 2. 21 3. .1 21 Introduc¸a˜ o . . . . . . . . . . . 3 1. 9 2. . . . . . . . . . . . . . . . . . . . . . . . .1 3 6 Transformac¸a˜ o do Sistema de Coordenadas Global para o Sistema de Coordenadas de Visualizac¸a˜ o . . . . . . . . . . . . . 21 3. . . . . . . . . . . . . .1. . . . . . . . . . . . . 3 1. . . . . . . . . 2 1. . . . . . . . . . .6 Conclus˜ao . . . . . . 10 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 Cˆamera . .1. . . . . . . . . . . . . . . . . . . . . .2 O sistema de Lentes . . . . . . . . . . . . . . .3. . . . . . . 13 2. . . . . . . . . . . . . . . .3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 Remoc¸a˜ o de Superf´ıcies Ocultas . . . . . . 15 2. . . . . . . . . . . . . . . . . . . . . . 22 ii . . . . . 4 1. . . . . . . . . . . . . . . .1. . . . . .5 Manipulando a Cˆamera . . . . . . . . . . . .2 Projec¸a˜ o . . . . . . . . .2 Transformac¸a˜ o entre Sistemas de Coordenadas .3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2. . . .3. . . . . . . . . . . . . . . . . 4 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . 11 2. . . . . . . .2 Caracter´ısticas da Cˆamera Virtual .1 Para que serve . . 2 1. . . . . . . . . . . . . . . . . . .1 Contexto . . . . . . . . . . .Sum´ario 1 2 Introduc¸a˜ o 1 1.3 Composic¸a˜ o de Transformac¸o˜ es . . . . . . . . . . . . . . . . .4 Transformac¸o˜ es em 3D . . . . . . . . . . .3 2. . .3 Organizac¸a˜ o da Monografia . . . .1. . . . . . . . . . . . . . . . . .3. . . . . . . . . . . . . . . . . . .1. . . . .2. . . . . . . . . . .2 Objetivos . . . . . . . . . . . . . . . .

. . . .1 4. . . . . . . . . . . . . . . .2. . . 32 Clipping Introduc¸a˜ o . . . . . . . 29 Projec¸a˜ o Perspectiva . . . . . . . . . . . . . . . . . . . . . . 29 3. . .3 Os algoritmos de visibilidade . . . . . . . . . . .3 Os Principais Algoritmos . . .3. . . . . . . . . . . . . . . .2. . . . . . . . . .4. . 31 3. .1 4. . . . . . . . . 34 Breve Descric¸a˜ o do Processo de Raster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5. . . . . . . . . . . . .3 Projec¸a˜ o Axonom´etrica Isom´etrica .2 Recorte de Pol´ıgonos n˜ao Rasterizados . . . . . . . . . . . . . . . 43 4. . . . . . .6 Conclus˜ao . . . . . . . . . 26 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 6. .3. . . . . . . .1 54 Clipping Circular . . . . . . . . . . . . . . . . . . . . . 35 4. . . . . . 37 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 5. . 29 3. . . . . . . . . .2 M´etodo BSP-Tree . . . . . . . . .3. . . 23 3. . 37 4. . . . . . .2 O problema de determinar a visibilidade de uma superf´ıcie . . . . . . . . . . . . 25 3. . . .3. . . . . . . . . . . . . . .2. . . . . . . . . . . . . . . . . . . . . . . .4 5 Detecc¸a˜ o e Remoc¸a˜ o de Superf´ıcies Escondidas 45 5. . . . . . . . . 49 5. . . . . . . . 35 4. . . .1. . . . . . 39 4. . . . . . . . . . . . . . . . . . .1 M´etodo Back-Face .1 Os Principais Algoritmos . . .5 Visibilidade de Superf´ıcies Curvas . . . .3. . . .2 Clipping de Pontos . . . . . . 48 5. . . .1 Projec¸a˜ o Paralela Ortogr´afica . . . . . . . 31 Conclus˜ao . . . . . . . . . . . . . . . . . . . . . .3 3.3. . . . . . . . . . . . . . . . 24 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4. . . . .4 4 Projec¸a˜ o Paralela . . . . . .4 6 34 Montando um Pipeline de Visualizac¸a˜ o Gr´afica 6. . . . . . . . . . . . . . . . . . . . . . . . . 40 4.2. . . . . . . . . . . . . . . 29 3. . . . . . . . . . .3. . . . . . . .3 Clipping de Linhas . . .6 Projec¸a˜ o Paralela Obl´ıqua . . . . . . . .4. . . . . . . . . . . . . . . . . . . . . . . .3.1. 52 Conclus˜ao . . . 35 4. . 44 4. . . .3 M´etodo Depth-Buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 3. . .1 Abordagem Matem´atica para Projec¸a˜ o Perspectiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5. . . . . . .4 M´etodo Scan-Line . . . . . . . . . . . . . . . . . . iii . . . . . . . . . .2. . . . . . . . . .5 Projec¸a˜ o Axonom´etrica Trim´etrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 Clipping Tridimensional .1 Introduc¸a˜ o . . . . .4 Projec¸a˜ o Axonom´etrica Dim´etrica . . . . . . . . . . . . . . . . . 53 5. . . . . . . . . . . . . . . . .1 54 Introduc¸a˜ o .2 Pontos de fuga .2. . . . . . .2 Projec¸o˜ es Ortogr´aficas de Vis˜ao Planar . . . . . . . . . . . . . . . . . . . . . .1 Recorte de Pol´ıgonos Rasterizados . . . 51 5. . . . . . . . . . .3. . . . . . 36 Clipping de Superf´ıcies . . . . . . . . . . . . . . . . . . . . . 46 5.

. . . 62 Os Resultados . . . 60 6. . . . . .2 Biblioteca formasgeo. . . . . . . . . . . . . . . . . . . . . . . . . .3. . 7 Conclus˜ao 66 8 Trabalhos Futuros 69 Referˆencias 70 Apˆendices 72 A C´odigo Fonte 73 A. .7 Algoritmo z-Buffer .2 Descric¸a˜ o do Algoritmo . . . . . . . . . . . . . . . . . . . 55 6. . . . . . . . . . . . . . . .1 C´ odigo Fonte do Prot´ otipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 Encontrando os Pontos de Intersec¸a˜ o . . 59 6. 73 A. . . . . . . . . .6 Recorte de Superf´ıcies . . . .1 6. . . . . . . . . . . . .3 Recorte de Linhas . . .6. . . . . . . 61 Considerac¸o˜ es Importantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 6. . . . . . . .1. . . . . .2 6. . .1. . . . . 61 Junc¸a˜ o dos Algoritmos . . . . . . . . . . . . . . . . . . . . . . 77 iv . . . . . . . .1. . . . . . . . . . . .1. . . . .1 64 6. . .5 Desenhando a linha . . . . 57 6. . .2. . . . . 62 6. . . . . . . . . . . . . . . .3 Conclus˜ao . . . .1. . . . . . . . . . . . . . .1. . .h . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .1 Pipeline de Visualizac¸a˜ o gr´afica . . . . . . . . . . . .2 Um SCV baseado no sistema de coordenadas global. . . .7 Atributos da cˆamera [Rogers. . . . . . 1. . . . . . . onde XV . . .2 (a) Cena renderizada sem a remoc¸a˜ o de pontos escondidos e (b) cena render- 1 izada ap´os a remoc¸a˜ o dos pontos escondidos. . . . . . . . .8 Esquema de uma lente convexa. . . . . . . 30 3. . . . . 36 4. . . . . . . . . . . . . . . . . 27 3. . . 1998] 19 3. . . . . . . . . . . . . 31 3.6 Rotac¸a˜ o em relac¸a˜ o ao eixo z. . . . . . . . 18 2. . 23 3. . . . . . . . . . . . . . . . . . . . . .1 Clipping de linhas. . . . . . . . . 13 2.3 Projec¸a˜ o paralela ortogr´afica cavalier (a) e cabinet (b) de um cubo. . P2 e P3 da posic¸a˜ o inicial em (a) para a origem (b). . . . . . 14 2. . 14 2. . . . . . . . . Yg e Zg s˜ao do sistema global. . . . . . 15 2. . . . . . . . . . . . . . . .4 Rotac¸a˜ o do segmento de reta P2 P3 . . .7 Representac¸a˜ o da projec¸a˜ o perspectiva de um ponto. . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2. . . . . .6 Projec¸a˜ o perspectiva de uma cena. . . . 32 4. . . . . . . . . . . . . . 1985]. . . . . . . . . .Lista de Figuras 1. . . . . . . . . . . . . . . . 39 v . . 4 2. . . . . .8 Gr´afico de execuc¸a˜ o dos algoritmos de projec¸a˜ o perspectiva e paralela obl´ıqua. . . . 36 4. . . . . . . . . . . . . . . . . . . . . .3 Pol´ıgono de dif´ıcil recorte. . . . . . . . . . . . . . . . . . . . . .5 Projec¸a˜ o ortogr´afica frontal e axonom´etrica isom´etrica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3. . . . .4 Projec¸o˜ es ortogr´aficas frontal. . . . . . . 22 3. . . . . . . . . . . . . . . . . . . . . . . . . . . .9 Esquema de uma lente convexa considerando a distˆancia at´e os planos do objeto e da imagem. . . 23 3. . . . . . . . . . . . . . . . . . . YV e ZV s˜ao coordenadas do sistema de coordenadas de visualizac¸a˜ o e Xg . . . . . . . . . . .3 Transladando P1 . . . . . . lateral e superior. . . . . 14 2. . . . 8 2. . . . . . . . . . .1 Projec¸a˜ o de uma linha. . . . .2 C´odigos para o recorte de linhas de Cohen e Sutherland. .10 Os sete graus de liberdade na especificac¸a˜ o da cˆamera virtual [Gomes e Velho.2 Tipos de projec¸o˜ es. . . . pelo aˆ ngulo positivo φ. . . . . . . P1 e P2 de comprimento D2 e´ rotacionado em direc¸a˜ o ao eixo z. . . . . . . . . . . . . . . .1 Arquitetura da lente de uma cˆamera. . . . . . .5 Rotac¸a˜ o em relac¸a˜ o ao eixo x. . . . . . . . 17 2. . . . . . . . . . . . . .

. . . 45 5. . . . . . .7 Clipping de uma superf´ıcie cˆoncava. . . . . .5 Objetivo do algoritmo scan-line (retorna o pixel que for interceptado primeiro). . . . . . . . . . . . 49 5. . . . . . .cgmax. . . . . . 52 6. . .2 Vetores que determinam a visibilidade de uma superf´ıcie. . . . . . . . . . . . . . . . .4 Imagem onde uma intersec¸a˜ o e´ inv´alida . . . . .6 Clipping de pol´ıgono cˆoncavo. . . . . . . . . . . . . .2 . . . . . 59 6. . . . . . 63 vi . . . . . . . . . 48 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 Imagem gerada pela execuc¸a˜ o do Algoritmo 6. . . . . .6 Resultados gerados pelo prot´otipo . . . . . . . . . . . . . . . . . . . . . . 61 6. 57 6. . . . . . .br.3 Divis˜ao do espac¸o da cena por dois planos (a) e a´ rvore de partic¸a˜ o (b). . . . . . . . . . .4 Objetivo do algoritmo z-buffer (compara todos os pixels e retorna o que tiver menor profundidade). . . . . . . 42 4. 47 5. . . . .1 Modelo geom´etrico de uma janela de clipping circular. . . . . . . . . . . . . . . . . . . . (b) Interpolac¸a˜ o correta . . 59 6. . 57 6. . . 41 4. . . .1 (a) Erro de interpolac¸a˜ o. . .5 Clipping de Sutherland e Hodgman. . . . . . . . . . . . . . 44 5. . . . . . . . . . . . . .4. . . . . . . . . . . . . . . . . . . . . . . .5 Recorte de Superf´ıcie . .com. . . .imagem retirada do site http://www. .4 Exemplo de execuc¸a˜ o do Algoritmo Sutherland Hodgeman. . . . 41 4. . . . . . . . .2 Imagem gerada pela execuc¸a˜ o do algoritmo de Sutherland. . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Lista de Tabelas 2.1 Posicionamento de cada pol´ıgono na cena. . . . . . . . . . . . . . . 65 vii . .2 Tabela de resultados . . . . . . . . . .1 Sentido de Rotac¸a˜ o . . . . . . 64 6. . . . . . . . . . . . . . 11 6. . . . . . . . . . .

. lateral e superior . . . . . . . . .2 Projec¸o˜ es ortogr´aficas frontal. . . .3 Clipping de Superf´ıcie . . . . . .Lista de Algoritmos 3. . . 51 6. . 60 6. . .2 Desenha Linha . . . . . . . . . . . . 58 6. . . . . . . . . . . . . . .4 Projec¸a˜ o Perspectiva . . 50 5. . . . . . . . .1 Algoritmo de Cohen e Sutherland [Hearn e Baker. . . . . . . . . . . . . . 38 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3. . . . . . . . . . . . . . . . . .3 Projec¸a˜ o ortogr´afica axonom´etrica isom´etrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 Algoritmo scan-line . . . . . . . . . . . . . . . . . . . . . . . . . . 60 viii . . . 33 4. . .1 Algoritmo z-buffer . . . . . . . . . . . . . . . . . . . .1 Projec¸o˜ es Paralelas Obl´ıquas . . . . . . .1 Encontra Cruzamentos . . . . . 25 3. . . . . . . . . 28 3. . . . . . . . . . . . . 1986] . . . . . . . . . . . . . . . . . . . . .

dando-lhe a sensac¸a˜ o de estar vivenciando uma cena real. h´a uma seq¨ueˆ ncia de passos e operac¸o˜ es que devem ser seguidos para a obtenc¸a˜ o de resultados satisfat´orios que recebe o nome de pipeline de visualizac¸a˜ o gr´afica e e´ mostrado na Figura 1. Figura 1.1: Pipeline de Visualizac¸a˜ o gr´afica Em uma cena virtual as cˆameras do ambiente s˜ao respons´aveis por tudo que e´ mostrado 1 . pois permite a exibic¸a˜ o de objetos (tanto 2D quanto 3D) com as mesmas caracter´ısticas que estes possuem no mundo real. Uma das principais tarefas da visualizac¸a˜ o de s´olidos dentro da computac¸a˜ o gr´afica e´ proporcionar ao observador a interac¸a˜ o com um mundo virtual. Para isso.Cap´ıtulo 1 Introduc¸a˜ o A visualizac¸a˜ o de s´olidos e´ parte fundamental da computac¸a˜ o gr´afica.1.

O clipping e a detecc¸a˜ o e remoc¸a˜ o de superf´ıcies escondidas s˜ao aplicados para otimizac¸a˜ o. tais como: (a) transformac¸a˜ o entre sistemas de coordenadas. as transformac¸o˜ es geom´etricas (translac¸a˜ o. A manipulac¸a˜ o da cˆamera virtual (c) e´ feita atrav´es das seguintes operac¸o˜ es: • Azimuth. deve-se aplicar v´arias t´ecnicas e conceitos. para que estas possam ser visualizadas no monitor. para que isto seja poss´ıvel. reduzindo assim o tempo de processamento e aumentando o realismo da cena. ser borrado para que a cena fique mais real. o clipping. retirando os pixels que n˜ao s˜ao vistos. pela renderizac¸a˜ o correta dos objetos. Para efetuar a transformac¸a˜ o do sistema de coordenadas global (coordenadas do mundo real) para o sistema de coordenadas de visualizac¸a˜ o (coordenadas do dispositivo gr´afico) (a). apresentado a importˆancia da utilizac¸a˜ o de cada uma. devendo.1. rotac¸a˜ o e escala) s˜ao fundamentais. recomenda-se efetuar uma composic¸a˜ o destas transformac¸o˜ es antes de aplic´a-las aos pixels dos objetos. aplica-se uma mistura das cores dos objetos que ficam fora de foco. no sistema virtual. Por´em. Para isso.ao observador.1 Cˆamera Tudo que e´ visto em uma cena computacional e´ determinado pelo sistema de cˆameras. evitando que um objeto localizado atr´as de outro seja mostrado na frente (remoc¸a˜ o de pontos escondidos). No entanto. este objeto fica embac¸ado (desfocado). e´ importante conhecer os fundamentos de cada parte do pipeline de visualizac¸a˜ o gr´afica. Para reduzir esforc¸o computacional. Estas operac¸o˜ es s˜ao respons´aveis pela reduc¸a˜ o no tempo de processamento da cena (clipping). 2 . Isto e´ feito atrav´es da multiplicac¸a˜ o das matrizes de cada transformac¸a˜ o. (b) simulac¸a˜ o de efeitos de foco e (c) manipulac¸a˜ o da cˆamera. 1. a projec¸a˜ o gr´afica possibilita a transformac¸a˜ o de cenas 3D para 2D.1 Contexto As transformac¸o˜ es de cˆamera. O efeito de foco (b) ocorre quando um objeto fica fora do foco de vis˜ao. para que o computador consiga simular o funcionamento de uma cˆamera. gerando uma u´ nica matriz que deve ser multiplicada a` s coordenadas de cada ponto. permite tamb´em a exibic¸a˜ o dos cen´arios tridimensionais em meios de visualizac¸a˜ o 2D (projec¸a˜ o) e o posicionamento do observador na cena (transformac¸o˜ es de cˆamera). Este trabalho tem como objetivo abordar estas t´ecnicas. as principais projec¸o˜ es gr´aficas e a detecc¸a˜ o/remoc¸a˜ o de superf´ıcies ocultas ser˜ao abordadas no decorrer deste trabalho. 1. O sistema de lentes e as operac¸o˜ es das cˆameras virtuais seguem os mesmos conceitos das reais. Quando isto ocorre.

Desta forma. os objetos localizados fora desta janela eram renderizados e.2 Projec¸a˜ o Os dispositivos de exibic¸a˜ o de imagens s˜ao bidimensionais (monitores. ela n˜ao gera cenas realistas. 1. as arestas dos objetos mantˆem relac¸a˜ o de proporcionalidade. • Pitch. TV’s). determina-se um ponto de referˆencia e faz com que todos os raios projetores se encontrem neste ponto.3 Clipping Ao criar um cen´ario virtual. mesmo n˜ao sendo vistos pelo observador. uma vez que as linhas projetoras s˜ao paralelas entre si. A projec¸a˜ o perspectiva consegue reduzir a dimens˜ao da cena e ainda manter a noc¸a˜ o de profundidade desta. Como as cenas tˆem que manter a percepc¸a˜ o de tridimensionalidade. o sistema de cˆameras define uma a´ rea onde os agentes internos a ela podem ser vistos. Com isso. • Zoom. No entanto. simulando o sistema de vis˜ao humano. a projec¸a˜ o gr´afica tem uma importˆancia muito grande no processo de visualizac¸a˜ o gr´afica. 1. Diante deste fato.1. As t´ecnicas de projec¸a˜ o s˜ao utilizadas na computac¸a˜ o gr´afica para transformar os pontos do sistema de coordenadas 3D para o 2D. fotografias. Por muito tempo. Esta a´ rea recebe o nome de viewport (ou janela de visualizac¸a˜ o). dando ao observador a sensac¸a˜ o de estar vendo um cen´ario tridimensional. Assim.• Elevation.1. • Dolly. Na paralela. aumentava muito o esforc¸o para tratar cenas que possu´ıam muitos pol´ıgonos fora da a´ rea vis´ıvel. surgiram os algoritmos de clipping (ou recorte) para retirar estas partes e reduzir o processamento gasto para desenh´a-las. consegue-se uma reduc¸a˜ o gradativa dos objetos que localizam-se mais distante do observador. Para conseguir este efeito. por´em sua aplicac¸a˜ o e´ muito forte na engenharia e arquitetura para a visualizac¸a˜ o de maquetes. 3 . • Roll. As principais projec¸o˜ es s˜ao a paralela e a perspectiva. torna-se poss´ıvel exibir as cenas computacionalmente. este encontra-se em um sistema de coordenadas 2D. • Yaw.

e´ mais simples de ser implementada e pode ser aplicada a pol´ıgonos de qualquer forma. como mostra a Figura 1. como o m´etodo z-buffer. que e´ utilizado pelo pacote gr´afico OpenGL (uma biblioteca livre e compat´ıvel com a maioria dos hardwares gr´aficos). 1. pode acontecer de um objeto mais ao fundo ser desenhado na frente de outro.2: (a) Cena renderizada sem a remoc¸a˜ o de pontos escondidos e (b) cena renderizada ap´os a remoc¸a˜ o dos pontos escondidos.1. mas em contrapartida. Outras t´ecnicas menos utilizadas preferem transformar cada pol´ıgono em um conjunto de arestas.2. H´a abordagens que rasterizam os objetos e verifica a validade de cada ponto. uma vez que se os objetos estiverem muito pr´oximos uns aos outros.1.2 Objetivos Este trabalho est´a focado em apresentar os conceitos mais importantes da visualizac¸a˜ o de s´olidos dentro da computac¸a˜ o gr´afica. A primeira t´ecnica citada necessita de mais mem´oria. A utilizac¸a˜ o destas t´ecnicas depende da aplicac¸a˜ o a ser desenvolvida e dos recursos dispon´ıveis.4 Remoc¸a˜ o de Superf´ıcies Ocultas Remover as superf´ıcies que est˜ao sobrepostas em uma cena reduz a quantidade de pontos a serem renderizados e aumenta o realismo da mesma. dependendo da ordem de renderizac¸a˜ o. Seu principal objetivo e´ aumentar o realismo. V´arios algoritmos j´a foram desenvolvidos para tratar esta particularidade da computac¸a˜ o gr´afica. apresentando os principais fundamentos do sistema vir4 . Figura 1. encontrar as intersec¸o˜ es destas e preencher novamente as partes que s˜ao vis´ıveis.

5 . bem como o conhecimento de alguns algoritmos adotados nestas t´ecnicas e. • Os detalhes sobre a remoc¸a˜ o de superf´ıcies escondidas e seus principais algoritmos s˜ao apresentados no Cap´ıtulo 5. mostrando os algoritmos para recorte de linhas e de superf´ıcies para estas janelas. assim como a caracter´ısticas e definic¸o˜ es das projec¸o˜ es gr´aficas. o processo de detecc¸a˜ o e remoc¸a˜ o de superf´ıcies escondidas.tual de cˆameras e das projec¸o˜ es gr´aficas. principalmente.3 Organizac¸a˜ o da Monografia Este trabalho est´a organizado da seguinte forma: • Fundamentos do sistema de cˆamera e´ abordado no Cap´ıtulo 2. • Os principais algoritmos de recorte consideram o viewport formado por uma a´ rea retangular. bem como os resultados de suas execuc¸o˜ es. J´a no Cap´ıtulo 6. obter (desenvolver) um algoritmo capaz de recortar os segmentos de reta e as superf´ıcies que encontram-se fora da janela de clipping circular. Com este trabalho pretende-se adquirir um conhecimento mais detalhado sobre o funcionamento dos sistemas de cˆamera. al´em das t´ecnicas de clipping. e´ apresentado uma discuss˜ao aprofundada sobre a utilizac¸a˜ o de janelas de visualizac¸a˜ o circular. 1. clipping e remoc¸a˜ o de faces escondidas dentro da Computac¸a˜ o Gr´afica. O Cap´ıtulo 4 apresenta de forma mais detalhada uma descric¸a˜ o dos conceitos e as aplicac¸o˜ es do clipping. projec¸o˜ es. dando eˆ nfase a` utilizac¸a˜ o de uma circunferˆencia como viewport). • O Cap´ıtulo 3 apresenta os principais tipos.

ou seja. Rendering . Neste processo. Estes definem a posic¸a˜ o e a orientac¸a˜ o do plano de projec¸a˜ o que correspondem a` cˆamera da cena. a orientac¸a˜ o e o ponto focal da sua cˆamera. Ap´os a criac¸a˜ o de cenas e objetos computacionais deve-se efetuar a sua apresentac¸a˜ o para o usu´ario. permitindo ainda a aplicac¸a˜ o de t´ecnicas de rendering nas superf´ıcies vis´ıveis para aumentar o realismo das cenas. 1995]. Analogamente. A fotografia que ele obt´em e´ uma projec¸a˜ o da cena em um plano 2D. As operac¸o˜ es de cˆameras [Marquis-Bolduc et al. 2008] podem ser aplicadas tanto a formas aramadas quanto a formas s´olidas. Seu comportamento depende destes atributos.Cap´ıtulo 2 Cˆamera 2. 2003]. podendo por exemplo.2. 1986].. ser fixa ou capaz de deslocar-se junto com um agente pelo cen´ario [Brunstein et al.Processo do pipeline de visualizac¸a˜ o gr´afica onde aplica-se t´ecnicas como iluminac¸a˜ o e sombreamento para permitir uma visualizac¸a˜ o mais realista de um ambiente virtual. a imagem 6 . 2002].1 Caracter´ısticas da Cˆamera Virtual Uma Analogia com a Cˆamera Real Para facilitar o entendimento do conceito de cˆamera deve-se fazer uma analogia com uma m´aquina fotogr´afica. O fot´ografo define a posic¸a˜ o. Para obter a visualizac¸a˜ o de uma cena o primeiro passo e´ atentar para os parˆametros de exibic¸a˜ o..2 2. as coordenadas do objeto s˜ao transferidas para as coordenadas de referˆencia e projetadas sobre o plano de visualizac¸a˜ o.1 Introduc¸a˜ o Uma das operac¸o˜ es b´asicas efetuadas durante a produc¸a˜ o de cenas tridimensionais em computac¸a˜ o gr´afica e´ a modelagem de um sistema de cˆamera [Kolb et al. 2. A cˆamera e´ considerada uma entidade que encapsula uma s´erie de atributos que permitem modelar a vis˜ao de um observador da cena virtual [da Silva.. definir os parˆametros da cˆamera [Azevedo e Conci.

Figura 2. 2006]. a orientac¸a˜ o e o ponto focal da cˆamera. quando aberto. 2. s˜ao as coordenadas reais do objeto antes destas serem passadas para coordenadas do ambiente virtual. al´em do tipo de projec¸a˜ o e do posicionamento dos clipping planes (planos de clipping). Este orif´ıcio. perpendicular ao eixo z do sistema de coordenadas. ou seja. que e´ um meio de exibic¸a˜ o 2D. A quantidade (determinada pela abertura da cˆamera) e a intensidade dos raios de luz que atingem a lente da cˆamera definem o posicionamento do objeto em relac¸a˜ o a` fonte de luz e a sua profundidade.2 O sistema de Lentes Formado por uma ou mais camadas de vidro ou a` s vezes pl´astico (Figura 2. o pr´oximo passo e´ transformar as coordenadas desta cena para o sistema de coordenadas de visualizac¸a˜ o (SCV) (Viewing Coordinate System). Assim. 2. O sistema de coordenadas global representa o mundo em que o objeto e´ gerado.3 Especificac¸a˜ o das Coordenadas de Visualizac¸a˜ o Para representar computacionalmente as cˆameras virtuais deve-se definir um plano de projec¸a˜ o (explicado com mais detalhes no Cap´ıtulo 3).1) com um orif´ıcio de convergˆencia sobre um dos eixos do sistema de coordenadas. A cena e´ gerada no sistema de coordenadas global (ou coordenadas global. Os principais destes parˆametros s˜ao a posic¸a˜ o. considerando a posic¸a˜ o do observador (posic¸a˜ o da cˆamera) [Spindler et al.. a lente da cˆamera e´ respons´avel pela captura das imagens.2. ou ainda World Coordinates).1: Arquitetura da lente de uma cˆamera. permite a passagem dos raios de luz refletidos pelos objetos da cena e e´ o respons´avel pela determinac¸a˜ o da abertura da cˆamera.obtida de uma cˆamera virtual depende de v´arios fatores que determinam como esta e´ projetada no monitor. 7 .

O ponto de referˆencia de visualizac¸a˜ o (PRV) e´ definido no sistema de coordenadas global e e´ utilizado para a determinac¸a˜ o da origem do SCV. da selec¸a˜ o da direc¸a˜ o positiva para o eixo z do novo sistema e da especificac¸a˜ o do vetor normal (N) ao plano de observac¸a˜ o (ou plano de projec¸a˜ o). Figura 2. Lembrando que U deve ser perpendicular a V e a N. Assim. A Figura 2.2: Um SCV baseado no sistema de coordenadas global. onde XV . Geralmente.A determinac¸a˜ o do sistema de coordenadas de observac¸a˜ o e´ feita atrav´es da especificac¸a˜ o de sua origem. este ponto e´ considerado como sendo a posic¸a˜ o da cˆamera [Traina e de Oliveira. 8 . 2003]. Por fim. determina-se o vetor view up (V) que representar´a a direc¸a˜ o do eixo y do SCV. o programador tem a liberdade de escolher qualquer direc¸a˜ o conveniente para o vetor view up. Yg e Zg s˜ao do sistema global. YV e ZV s˜ao coordenadas do sistema de coordenadas de visualizac¸a˜ o e Xg .2 apresenta o SCV em relac¸a˜ o ao sistema de coordenadas global. O vetor (U) que determina a direc¸a˜ o do eixo x do SCV e´ calculado a partir dos vetores N e V. Para amenizar este problema os m´etodos de transformac¸a˜ o de visualizac¸a˜ o implementados pelos atuais pacotes gr´aficos ajustam V de forma a torn´a-lo perpendicular a N. O vetor V deve ser perpendicular ao plano xz do SCV e isto pode tornar-se um problema para o programador na hora de implementar seu sistema de cˆamera virtual. tomando cuidado apenas para que este n˜ao seja paralelo ao eixo z do sistema de observac¸a˜ o.

3. Para isso.1) Um m´etodo alternativo para estabelecer a orientac¸a˜ o do segundo sistema de coordenadas consiste em especificar um vetor V na direc¸a˜ o positiva do eixo y’. nem sempre se encontra no sistema de coordenadas Cartesiano devendo ser convertido para esta. Em aplicac¸o˜ es de design e modelagem. 2006]. Esta convers˜ao e´ efetuada atrav´es de transformac¸o˜ es geom´etricas (translac¸a˜ o e rotac¸a˜ o).. Esta sec¸a˜ o trata especificamente de transformac¸o˜ es entre sistemas de coordenadas Cartesianos. deve-se determinar a transformac¸a˜ o que sobrep˜oe os eixos xy aos eixos x’y’.x0 y0 = R(−θ). que e´ a do 9 .T (−x0 . −y0 ) • Rotacionar o eixo x0 de forma que ele coincida com o eixo x: R(−θ) Concatenando as duas matrizes de transformac¸a˜ o obt´em-se a matriz de composic¸a˜ o (Matriz 2. sobrepondo o sistema de coordenadas global. objetos individuais s˜ao definidos em seu pr´oprio sistema de coordenadas. e as coordenadas locais devem ser transformadas para posicionar os objetos no sistema de coordenadas global da cena. Transformac¸a˜ o entre Sistemas de Coordenadas 2. passando pela origem do sistema xy. Entre as diversas transformac¸o˜ es que devemos fazer. Ent˜ao. deve-se fazer algumas transformac¸o˜ es antes de tratar diretamente com o objeto a ser observado. y0 ). Logo ap´os.3. Um objeto. quando apresentado. −y0 ) (2. antes de efetuar as operac¸o˜ es de projec¸a˜ o (que ser˜ao apresentadas no Cap´ıtulo 3) devese transformar as coordenadas da cena criada do sistema global para o SCV. rotac¸o˜ es s˜ao executadas com o objetivo de alinhar os eixos principais do novo sistema de coordenadas (SCV) com os eixos principais do sistema antigo.Transformac¸a˜ o do Sistema de Coordenadas Global para o Sistema 2.0) e (x0 . A translac¸a˜ o e´ usada para levar o ponto de referˆencia de visualizac¸a˜ o para a origem do sistema global [Lam et al. basta ter um vetor unit´ario indicando a direc¸a˜ o desejada. as seguintes etapas podem ser seguidas: • Transladar o sistema x’y’ de modo que a origem coincida com a origem do sistema xy: T(−x0 .2 Para se trabalhar com cˆamera. a transformac¸a˜ o entre sistemas de coordenadas e´ o princ´ıpio para se ter uma visualizac¸a˜ o adequada.1 de Coordenadas de Visualizac¸a˜ o A projec¸a˜ o dos objetos de uma cena e´ feita quando as coordenadas deste pertencem ao SCV.1) que descreve a transformac¸a˜ o necess´aria: Mxy. Para transformar descric¸o˜ es de um objeto dadas em um sistema de coordenadas xy para um sistema x’y’ com origens em (0. com um aˆ ngulo de orientac¸a˜ o entre os eixos x e x’. Portanto.

uy ) (2. ocorre que a realizac¸a˜ o desta operac¸a˜ o e´ mais simples na origem do sistema.3) Os elementos de uma matriz de rotac¸a˜ o podem ser expressos como elementos de um conjunto de vetores ortogonais.2) u = (vy . sin θ    0 0 1 cos θ 0   1 0 −x1      0 1 −y1  = .5. Ent˜ao.3) ao longo do eixo x’ rotacionando v (Vetor 2.  1 0 x1   cos θ − sin θ 0    . • Efetuar a translac¸a˜ o inversa a` realizada no passo 1. v= V = (vx .4. Quando estas s˜ao agrupadas em uma u´ nica operac¸a˜ o. vy ) |V | (2. • Efetuar a rotac¸a˜ o desejada e. uma de cada vez. e´ dada pela Matriz 2.T (−x1 . visto que seria necess´ario v´arias transformac¸o˜ es.  ux uy 0     Mrot =  v v 0 x y   0 0 1 (2.− vetor V.R(θ). Ent˜ao encontra-se o vetor unit´ario → u (Vetor 2.4) 2. Realizando matematicamente a operac¸a˜ o mostrada na Equac¸a˜ o 2. sin θ    sin θ cos θ y1 (1 − cos θ) − x1 .(1 − cos θ) + y1 .5) 10 .  sin θ T (x1 . y1 ).2) de 90o no sentido hor´ario. Considerando a rotac¸a˜ o de um objeto em torno de um ponto P1 . Esta. obt´em-se o mesmo resultado final e diminui o esforc¸o computacional. −vx ) = (ux .3 Composic¸a˜ o de Transformac¸o˜ es Uma composic¸a˜ o de transformac¸o˜ es se faz necess´aria para aumentar a eficiˆencia da operac¸a˜ o com a imagem. 0     1 0 0 1 (2.3. −y1 ) =  0 1 y 1    0 0 1 0   cos θ − sin θ x1 . algumas operac¸o˜ es devem ser realizadas: • Efetuar uma translac¸a˜ o de P1 at´e a origem.

6.1: Sentido de Rotac¸a˜ o  x   0      y   0 1 0 dy   y  =    z 0   0 0 1 d .S(sx . para operac¸a˜ o de escalamento de um objeto em relac¸a˜ o a um ponto arbitr´ario P1 . sy ).(1 − sx )    0 sy y1 (1 − sy )    0 0 1 0 0   1 0 −x1      0 1 −y1  = .  1 0 x1   sx      T (x1 . Eixo de Rotac¸a˜ o Direc¸a˜ o da Rotac¸a˜ o Positiva x y para z y z para x z x para y Tabela 2. Uma caracter´ıstica das transformac¸o˜ es a serem mostradas e´ a utilizac¸a˜ o de coordenadas homogˆeneas. y1 ). que tem valor igual a zero.  0  0 0 1 0   sx 0 x1 .7) 11 . Nas transformac¸a˜ o de vetores a operac¸a˜ o e´ diferente da transformac¸a˜ o de pontos. para o tratamento de vetores. e valor igual a um. como mostrado na Equac¸a˜ o 2. ou seja. poder ”manusear”o objeto. colocando uma coordenada extra w. em muitas situac¸o˜ es e´ necess´ario mais do que isto.1. basta executar uma operac¸a˜ o de escalamento ao inv´es de uma rotac¸a˜ o.5. para o tratamento de pontos. As coordenadas homogˆeneas permitem unificar este tratamento. movimentando-o atrav´es de rotac¸o˜ es. o procedimento ficar´a da seguinte forma. Tabela 2. translac¸o˜ es e mesmo escala. Como mostrado na Equac¸a˜ o 2. de maneira similar.Esse procedimento tamb´em pode ser utilizado. Por´em. A translac¸a˜ o em 3D pode ser vista simplesmente como uma extens˜ao a partir da translac¸a˜ o 2D.6) 2. Matematicamente.  z    z   1 0 0 0 1 1      x0   1 0 0 dx   (2.4 Transformac¸o˜ es em 3D A capacidade para representar e visualizar um objeto em trˆes dimens˜oes e´ fundamental para a percepc¸a˜ o de sua forma. −y1 ) =  0 1 y 1 .3.T (−x1 . sy 0     0 1 0 0 1 (2. Termos independentes formam uma coluna extra da matriz.

13). gerando as matrizes de rotac¸a˜ o em torno dos eixos z (2.11). pois estas podem ser efetuadas em relac¸a˜ o a qualquer um dos eixos cartesianos.10):  x0      sx 0 0 0  0    y   0     z0  =  0    1 0 sy 0 0 sz 0 0      0  . dz ).7 e´ a matriz de translac¸a˜ o para o sistema de coordenadas 3D .9) P 0 = T (sx . sz ).10) Finalmente.  y    0    z  1 1 x (2.P (2. sy .8.que tamb´em pode ser representada como em 2.8) Similarmente.12) e y(2.      z0  =  0 0 1 0     0 0 0 1 1 x     y     z    1 (2.   x     y     z    1 (2. P 0 = T (dx . verifica-se como ficam as equac¸o˜ es de rotac¸a˜ o em 3D. x (2.  x0   cos θ sin θ 0 0     0    y   − sin θ cos θ 0 0  .11)  x0   1 0 0 0  0    y   0 cos θ sin θ 0     z 0  =  0 − sin θ cos θ 0    1 0 0 0 1     . dy . fica (2.A Matriz 2.9 ou 2.P (2. a escala em 3D.12) 12 .

13 . P2 e P3 da posic¸a˜ o inicial em (a) para a origem (b). • Rotacionar o segmento P1 P2 em relac¸a˜ o ao eixo x. longe da origem do sistema (na posic¸a˜ o inicial em a). x0   cos θ 0 sin θ 0   x      0      y   0 1 0 0  . para uma posic¸a˜ o final.3. de forma que ele (P1 P2 ) fique sobre o eixo z.  y   =  z 0   − sin θ 0 cos θ 0   z        1 0 0 0 1 1 (2. de forma que ele (P1 P2 ) fique no plano yz.3: Transladando P1 .3.5 Composic¸a˜ o de Transformac¸o˜ es em 3D A composic¸a˜ o de transformac¸o˜ es em 3D pode ser entendida mais facilmente atrav´es do exemplo indicado na Figura 2. Esta mostra que os segmentos de reta P1 P2 e P1 P3 saem de uma posic¸a˜ o inicial. 1996]. • Rotacionar o segmento P1 P2 em relac¸a˜ o ao eixo y. • Transladar P1 para a origem. As transformac¸o˜ es a serem feitas podem ser indicadas conforme os seguintes passos: Figura 2. na origem do sistema (na posic¸a˜ o final em b).13) Todas as matrizes de transformac¸o˜ es foram retiradas do livro de Geometria Anal´ıtica [da Silva e dos Reis. 2.

14 . pelo aˆ ngulo positivo φ.5 e 2. Figura 2. de forma que ele (P1 P3 ) fique no plano yz. Ap´os o quarto passo.4. 2.3(b).6: Rotac¸a˜ o em relac¸a˜ o ao eixo z. Figura 2. P1 e P2 de comprimento D2 e´ rotacionado em direc¸a˜ o ao eixo z.4: Rotac¸a˜ o do segmento de reta P2 P3 . Figura 2.• Rotacionar o segmento P1 P3 em relac¸a˜ o ao eixo z. As Figuras 2.6 mostram passo a passo a operac¸a˜ o de rotac¸a˜ o no sistema 3D. o resultado obtido e´ o mesmo mostrado na Figura 2.5: Rotac¸a˜ o em relac¸a˜ o ao eixo x.

(a) a frente. A forma como os raios de luz do ambiente atingem a lente da cˆamera. Este plano tem sua orientac¸a˜ o em relac¸a˜ o a` s linhas projetoras dependente do tipo de projec¸a˜ o utilizada. A cˆamera vai funcionar como os olhos do observador.2. tornando-se desnecess´arios em muitas aplicac¸o˜ es. Al´em disso. localiza-se o plano no qual a cena e´ projetada. respectivamente. a posic¸a˜ o de visualizac¸a˜ o e´ escolhida de acordo com o que se deseja mostrar. (d) o topo e/ou (e) a base do objeto [Drucker e Zeltzer. 1994]. O Cap´ıtulo 3 aborda os principais tipos de projec¸a˜ o. pois os agentes que se encontram muito pr´oximos (praticamente encostados na lente da cˆamera) ou muito distantes do observador. e´ definido pelo tipo de projec¸a˜ o adotada [Ware e Osborne. Seu uso e´ fundamental. Assim. n˜ao possuem boa definic¸a˜ o.3. 1990]. 1985]. onde geralmente.7. Figura 2. como mostra a Figura 2. o mapeamento dos agentes da cena no plano de visualizac¸a˜ o. ou seja. da cˆamera. (b) a parte de tr´as. e a direc¸a˜ o dos raios projetores e´ definida pelo vetor que vai da posic¸a˜ o da cˆamera at´e o seu ponto focal. (c) os lados.7: Atributos da cˆamera [Rogers. A posic¸a˜ o. h´a a possibilidade de colocar a cˆamera entre v´arios 15 . Estes planos recebem o nome de plano anterior e plano posterior. isto significa que este enxerga apenas o que a cˆamera vˆe.6 A Cˆamera Virtual A localizac¸a˜ o da cˆamera e para onde esta aponta s˜ao definidos por sua posic¸a˜ o e seu ponto focal. ou seja. seus conceitos e caracter´ısticas. Suas localizac¸o˜ es dependem do intervalo de recorte definido durante sua implementac¸a˜ o. o ponto focal e o vetor view up definem a orientac¸a˜ o da cˆamera sint´etica. Os planos de recorte normalmente s˜ao perpendiculares ao vetor de projec¸a˜ o e s˜ao usados para eliminar os objetos que encontram-se muito pr´oximos ou muito distantes da cˆamera.

j´a as cˆameras virtuais basta alterar seus parˆametros de posicionamento. As cˆameras virtuais tˆem a vantagem de ser mais flex´ıveis do que as reais [Ware e Osborne. Devido a estas caracter´ısticas do sistema de cˆameras percebe-se que quanto maior a distˆancia entre a cˆamera e a cena. fazendo com que as cores de um aparec¸am dentro de outro. Esta abertura e´ determinada pela janela de clipping. o primeiro passo do pipeline de visualizac¸a˜ o gr´afica e´ definir a orientac¸a˜ o da cˆamera [Sutherland. Em computac¸a˜ o gr´afica. o que muitas vezes aumenta o n´ıvel de dificuldade.. deve-se tamb´em determinar a intensidade correta de luz que incide na cena. Desta forma. Por exemplo. 2002].objetos ou at´e mesmo dentro destes. a cˆamera deve ser suspensa por algum dispositivo. a nitidez dos objetos visualizados est´a diretamente ligada ao posicionamento da cˆamera respons´avel por sua visualizac¸a˜ o. quanto menor esta janela. A falta de nitidez tamb´em aparece em objetos localizados muito pr´oximos a` cˆamera. 1986]. Portanto. para obter uma vis˜ao a´erea de um determinado cen´ario a cˆamera deve ser suspensa a uma altura desejada. Estes efeitos de cˆamera podem ser incorporados a algoritmos scan-line ou ray-tracing [Hearn e Baker. Em um cen´ario real. apenas o uso da cˆamera n˜ao torna poss´ıvel a visualizac¸a˜ o n´ıtida do cen´ario. quanto maior a profundidade do objeto em relac¸a˜ o a` cˆamera (ou observador) menos n´ıtido ele e´ . 1990].4 Simulando Efeitos de Foco em Cˆamera Ao modelar os efeitos de cˆamera em uma cena deve-se especificar o tamanho focal e outros parˆametros das lentes convexas. por´em com menos detalhes.8 apresenta a estrutura da lente de uma cˆamera. a abertura da lente da cˆamera (conhecida tamb´em como abertura da cˆamera) que ser´a posicionada em frente ao plano de projec¸a˜ o. Por´em. Quando um cen´ario e´ fotografado utilizando-se uma m´aquina fotogr´afica (seja ela anal´ogica. mais objetos s˜ao mostrados. A abertura ou o tipo de lente est˜ao entre os parˆametros de maior influˆencia do sistema de cˆameras. menor e´ a abertura da lente e vice-versa. Este fenˆomeno e´ decorrente da distribuic¸a˜ o dos objetos na cena. O tamanho focal f e´ a distˆancia do centro da lente at´e o foco (ponto focal). Estes efeitos de foco tornam as cenas computacionais bem mais reais. pois e´ a reflex˜ao da luz que forma a imagem na lente da cˆamera [Yang et al. Estes parˆametros fazem com que alguns objetos fiquem no foco enquanto outros fiquem fora dele. por´em demandam muito processamento. Isto deve ser feito misturando-se os pixels dos objetos que encontram-se fora de foco com os pixels de seus vizinhos. As primeiras podem ser instaladas em qualquer parte da cena sem muito esforc¸o. 1964]. ou seja. este efeito e´ obtido desfocando os objetos de acordo com sua profundidade. ou digital). que e´ a posic¸a˜ o de convergˆencia das linhas de luz 16 . borrando as imagens. A Figura 2. percebe-se que alguns objetos aparecem n´ıtidos enquanto outros n˜ao. 2. isto e´ .

8: Esquema de uma lente convexa. o parˆametro d e´ a distˆancia do centro da lente at´e o objeto e di e´ a distˆancia do centro da lente at´e o plano da imagem. Como mostrado na Figura 2.15) O objeto e sua imagem est˜ao de lados opostos da lente. um em cada extremidade da linha que passa pelo centro desta e. como o DirectX e o OpenGL [Hill.9. 17 .14) Figura 2. as partes da cena que aparecem na projec¸a˜ o final s˜ao determinadas pelo tipo e tamanho da lente da cˆamera.14). n= f 2 × raio da lente (2. o desenvolvedor pode movimentar sua cˆamera em qualquer direc¸a˜ o da cena. Por isso. 1 1 1 + = d di f (2. geralmente d > f . O algoritmo de ray-tracing determina os efeitos de foco atrav´es da Equac¸a˜ o 2. A imagem que ser´a projetada para o observador e´ composta pela regi˜ao que aparece na lente da cˆamera. A abertura da cˆamera e´ dada pelo parˆametro n (Equac¸a˜ o 2. As principais API’s gr´aficas 3D possuem func¸o˜ es e m´etodos que utilizam-se desta id´eia. A pr´oxima sec¸a˜ o aborda algumas operac¸o˜ es que facilitam esta manipulac¸a˜ o de cˆameras virtuais. 2000]. Ao gerar a visualizac¸a˜ o de uma cena tridimensional em computac¸a˜ o gr´afica.15. local onde o objeto encontra-se no foco.que entram paralelas na lente.

manipulac¸a˜ o e exibic¸a˜ o de objetos 3D. isto porque a Silicon Graphics utiliza algoritmos cuidadosamente desenvolvidos e otimizados para executar as tarefas da OpenGL. 1990]. As func¸o˜ es deste pacote independem tamb´em de sistema operacional. a OpenGL permite criar cenas computacionais com qualidade.9: Esquema de uma lente convexa considerando a distˆancia at´e os planos do objeto e da imagem. como tratamento de eventos do mouse ou teclado. Esta API encapsula aproximadamente 250 func¸o˜ es e comandos atrav´es dos quais torna-se poss´ıvel a construc¸a˜ o de modelos e cenas mais complexos. ou seja. Isto e´ poss´ıvel devido aos graus de liberdade desta. 2. incluindo recursos de animac¸a˜ o. produzem o mesmo efeito em qualquer um. Quando este gerenciamento for necess´ario deve-se utilizar uma biblioteca auxiliar. o desenvolvedor (fot´ografo virtual) tamb´em movimenta sua cˆamera sint´etica (Figura 2. Um detalhe importante e´ que a OpenGL n˜ao gerencia eventos de controle. Al´em dos parˆametros j´a citados.Figura 2. O Pacote Gr´afico OpenGL .Biblioteca de uso gratuito para modelagem. h´a algumas operac¸o˜ es diretamente ligadas aos graus de 18 . trˆes em relac¸a˜ o a` orientac¸a˜ o e um referente ao zoom da cˆamera [Ware e Osborne. Trˆes graus de liberdade em relac¸a˜ o a` posic¸a˜ o na cena. tratamento de imagens e texturas.5 Manipulando a Cˆamera Da mesma forma que o fot´ografo pode movimentar sua cˆamera em qualquer direc¸a˜ o. Desenvolvida pela Silicon Graphics esta API (Interface de Programac¸a˜ o de Aplicac¸a˜ o) tornou-se independente de dispositivos de exibic¸a˜ o.10). A vantagem de utilizar esta API para a criac¸a˜ o de cenas tridimensionais e´ a rapidez com que a cena e´ renderizada.

Por´em.tamb´em conhecida como twist esta operac¸a˜ o rotaciona o vetor view up em torno do vetor normal ao plano de projec¸a˜ o. Pitch .10: Os sete graus de liberdade na especificac¸a˜ o da cˆamera virtual [Gomes e Velho. ele considera o ponto focal como centro da cena e rotaciona a cˆamera ao redor do vetor view up. De origem da palavra as-sumut (´arabe) significa a direc¸a˜ o. Computacionalmente falando. Yaw .semelhante a` operac¸a˜ o elevation. 1998] liberdade da cˆamera que facilitam sua manipulac¸a˜ o durante a exibic¸a˜ o de uma cena computacionalmente: Azimuth . 19 . o centro de rotac¸a˜ o localiza-se na posic¸a˜ o da cˆamera e o ponto focal e´ rotacionado ao redor do vetor resultante do produto vetorial entre o view up e o vetor direc¸a˜ o da projec¸a˜ o. considerando o ponto focal como centro.efetua o produto vetorial dos vetores view up e de projec¸a˜ o e rotaciona a cˆamera em torno do vetor resultante desta multiplicac¸a˜ o. significa 45o a` direita do norte. por exemplo. Roll . em relac¸a˜ o ao norte para algum ponto no ambiente.nesta operac¸a˜ o o centro de rotac¸a˜ o deixa de ser o ponto focal e passa a localizar-se na posic¸a˜ o da cˆamera e o ponto focal e´ rotacionado em torno do vetor view up. Um azimute de 45o .O Azimute e´ a direc¸a˜ o horizontal no sentido hor´ario. Elevation .Figura 2.

permitindo que o observador navegue e visualize todo o cen´ario. aproximando-a ou afastando-a do ponto focal. Para conseguir este efeito. as cˆameras virtuais devem ter as mesmas propriedades das cˆameras reais. onde s˜ao usados capacetes com sensores para capturar os movimentos da cabec¸a do usu´ario e movimentar a cˆamera no ambiente. dados obtidos dos sensores de luvas. e para conseguir este efeito deve-se ter modelos de cˆameras com alta precis˜ao.Dolly . O aumento do grau de realismo tem se tornado uma tendˆencia nas pesquisas de computac¸a˜ o gr´afica. ou seja. A simulac¸a˜ o de cˆamera e´ uma das respons´aveis pela grande evoluc¸a˜ o da visualizac¸a˜ o de s´olidos dentro da computac¸a˜ o gr´afica. como em um jogo de xadrez. Tudo que e´ mostrado na tela do computador e´ capturado pela cˆamera ` vezes esta e´ fixa. virtual. o aˆ ngulo de vis˜ao da cˆamera deve ser alterado de modo a localizar esta a´ rea na regi˜ao que e´ potencialmente vis´ıvel. pois possibilitou o desenvolvimento de sistemas que simulem a movimentac¸a˜ o do sistema de vis˜ao humano [Ware e Osborne. uma vez que os dados da cena sint´etica devem ter as mesmas caracter´ısticas do mundo real. permitindo o deslocamento do observador dentro do cen´ario tridimensional.permite a movimentac¸a˜ o da cˆamera na direc¸a˜ o do vetor de projec¸a˜ o. As pesquisas mais recentes utilizam-se de outros sensores para determinar as coordenadas das cˆameras. 1995]. 1990]. Os chamados cyberspaces que s˜ao locais onde o usu´ario interage diretamente com o ambiente virtual s˜ao exemplos desta aplicac¸a˜ o. 20 . 1998] apresenta um dos trabalhos pioneiros nesta a´ rea. [Sutherland. Os jogos de computadores tamb´em utilizam-se de recursos de cˆameras para permitir ao jogador visualizar o cen´ario. onde h´a apenas um aˆ ngulo de vis˜ao. 2. As No entanto. uma grande quantidade dos jogos computacionais (e tamb´em das aplicac¸o˜ es de computac¸a˜ o gr´afica) necessitam que seu sistema de cˆameras seja m´ovel.. As aplicac¸o˜ es de efeitos especiais e realidade aumentada s˜ao exemplos de situac¸o˜ es que exigem a modelagem de um sistema de cˆameras preciso. mas para muitas situac¸o˜ es a precis˜ao deste sistema e´ fundamental [Kolb et al. Algumas aplicac¸o˜ es n˜ao exigem a modelagem de cˆameras precisas. Zoom .permite o aumento ou a diminuic¸a˜ o de uma determinada parte da cena. como por exemplo.6 Conclus˜ao A visualizac¸a˜ o de cenas criadas virtualmente s´o e´ poss´ıvel por causa do sistema de cˆameras implantadas na cena.

Ap´os efetuar esta operac¸a˜ o para todos os pontos. sendo poss´ıvel apenas por meio de holografia.. etc. filmagens.Cap´ıtulo 3 Projec¸a˜ o 3.. chamadas de projetoras que passam por cada ponto do objeto e incidem no centro de projec¸a˜ o.1 Introduc¸a˜ o Projec¸a˜ o e´ o ato de representar uma figura geom´etrica obtida pela incidˆencia sobre um plano de perpendiculares tiradas dos extremos do objeto que se quer representar [Bueno. 1994]. Onde estas linhas interceptam o plano de projec¸a˜ o os ponto devem ser desenhados (Figura 3. Para isso. um ponto que fica a uma distˆancia d do plano de projec¸a˜ o [Wang et al. Neste projetar e´ transformar os pontos de um sistema de coordenadas de dimens˜ao n para pontos em um sistema de dimens˜ao menor que n (geralmente n-1) [Foley et al. 3. por isso a projec¸a˜ o e´ extremamente importante [Novins et al. 21 . imagens m´edicas. 1998]. Trazendo para o meio computacional tal termo ganha significado mais amplo. 1990]. obt´em-se a imagem projetada.1 Para que serve A projec¸a˜ o e´ feita trac¸ando-se linhas imagin´arias. Seu uso se d´a com mais frequˆencia na visualizac¸a˜ o de imagens tridimensionais em meios bidimensionais como fotografias. A visualizac¸a˜ o de imagens na forma tridimensional ainda e´ muito limitada.1). Os principais tipos de projec¸a˜ o s˜ao apresentados na pr´oxima sec¸a˜ o. E´ ela que torna poss´ıvel a exibic¸a˜ o de imagens capturadas por cˆameras e/ou modeladas computacionalmente. 2007].. Ser´a considerado para estudo a projec¸a˜ o de corpos 3D em 2D. cada ponto do objeto e´ redesenhado com uma coordenada a menos que o seu correspondente original.1.

Em termos de programac¸a˜ o e matem´atica.2 Tipos de Projec¸o˜ es As projec¸o˜ es geom´etricas dividem-se em dois tipos: (a) projec¸a˜ o paralela e (b) projec¸a˜ o em perspectiva. nesta abordagem. Desta forma e´ poss´ıvel obter visualizac¸o˜ es mais realistas. uma vez que a figura projetada depende diretamente da distˆancia em que o observador se encontra. onde o ponto de encontro est´a localizado no infinito. Na paralela (a) as linhas projetoras s˜ao paralelas entre si. Neste caso. o centro de projec¸a˜ o e´ colocado no infinito. Na projec¸a˜ o em perspectiva (b) o centro de projec¸a˜ o localiza-se a uma distˆancia d finita.1. Tais divis˜oes ocorrem porque em um sistema tridimensional existem v´arias possibilidades (ou aˆ ngulos) de visualizac¸a˜ o diferentes. todo par de reta possui pelo menos um ponto em comum. exigindo a aplicac¸a˜ o de conceitos matem´aticos diferentes. 22 . inclusive as paralelas. 3. Tais abordagens ser˜ao estudadas mais profundamente nas sec¸o˜ es subseq¨uentes.Figura 3. De acordo com a geometria projetiva. o tamanho do objeto e´ inversamente proporcional ao valor de d.1: Projec¸a˜ o de uma linha. Como pode ser observado na Figura 3. existem v´arias abordagens para cada uma das projec¸o˜ es geom´etricas.2. o objeto projetado mant´em o seu tamanho independente da distˆancia que ele se encontra do observador. Por isso.

Figura 3.Figura 3. uma vez que as medidas das faces n˜ao dependem da distˆancia que o observador encontra-se do objeto. 23 . E´ aplicada em v´arias a´ reas. como arquitetura e engenharia por possibilitar o c´alculo das medidas proporcionalmente reais dos objetos.2 Projec¸a˜ o Paralela A projec¸a˜ o paralela e´ a mais simples de implementar.3. esta n˜ao consegue gerar visualizac¸o˜ es realistas.3: Projec¸a˜ o paralela ortogr´afica cavalier (a) e cabinet (b) de um cubo. Por´em. como mostrado na Figura 3. 3. nela o centro de projec¸a˜ o localizase no infinito fazendo com que as linhas projetoras fiquem paralelas entre si.2: Tipos de projec¸o˜ es.

o aˆ ngulo formado com o plano de projec¸a˜ o e´ tal que a tangente seja igual a 2. A Figura 3.5 unidades de medida. que s˜ao as projec¸o˜ es ortogr´aficas axonom´etricas (isom´etrica. • largura = 3.Existem dois tipos de projec¸a˜ o paralela: ortogr´afica e obl´ıqua. • α = 30o e φ = 45o .3 mostra a projec¸a˜ o ortogr´afica cavalier de um cubo cujas dimens˜oes s˜ao: • altura = 2.1 utilizando-se os dados acima.0 unidades de medida. Apenas para permitir a visualizac¸a˜ o do cubo original (que est´a em 3 dimens˜oes) foram efetuadas duas rotac¸o˜ es no sistema de coordenadas. um em cada direc¸a˜ o.2.0 unidades de medida. preservando a medida original das faces n˜ao paralelas este plano. isto n˜ao e´ um fato ver´ıdico. o que leva a um aˆ ngulo de aproximadamente 63.1 Projec¸a˜ o Paralela Ortogr´afica A projec¸a˜ o ortogr´afica mant´em as linhas de projec¸a˜ o dispostas de forma que elas sejam perpendiculares ao plano de projec¸a˜ o. deixando apenas a face paralela ao plano de projec¸a˜ o sem distorc¸a˜ o. Ela divide-se em cavalier e cabinet. que e´ o eixo que possui a mesma direc¸a˜ o das linhas projetoras. lateral e superior dos objetos. 24 . A projec¸a˜ o obl´ıqua e´ semelhante a` ortogr´afica. em alguns pacotes gr´aficos ela e´ feita utilizando-se dois aˆ ngulos de rotac¸a˜ o. 1986]. O cubo desenhado no plano de projec¸a˜ o da Figura 3. dim´etrica e trim´etrica). existem trˆes outras abordagens menos usadas onde e´ poss´ıvel a exibic¸a˜ o de mais de uma face de uma s´o vez. E´ comum pensar que esta abordagem da projec¸a˜ o paralela exibe apenas uma face do objeto de cada vez. Na projec¸a˜ o cavalier as linhas projetoras formam um aˆ ngulo de 45o com o plano de projec¸a˜ o. Nestas. Nestas abordagens s´o e´ poss´ıvel visualizar um lado de cada vez. Para isto. Na projec¸a˜ o ortogr´afica este aˆ ngulo e´ de 90o . • comprimento = 3. 1986].4o [Azevedo e Conci. o plano de projec¸a˜ o e´ realinhado permitindo a visualizac¸a˜ o de at´e trˆes faces em uma projec¸a˜ o [Hearn e Baker. que e´ feito alterando o alinhamento do plano de projec¸a˜ o (projec¸a˜ o ortogr´afica axonom´etrica). estas operac¸o˜ es n˜ao interferem na projec¸a˜ o do cubo. Seu uso e´ mais freq¨uente em arquitetura e engenharia para visualizac¸o˜ es frontal. Esta diferenciac¸a˜ o ocorre devido ao aˆ ngulo formado entre o plano de projec¸a˜ o e as linhas projetoras. 3.3 e´ resultado da execuc¸a˜ o do Algoritmo 3. isso e´ feito colocando-se o plano de projec¸a˜ o perpendicular ao eixo principal. com a diferenc¸a de que na obl´ıqua as linhas projetoras e o plano de projec¸a˜ o n˜ao s˜ao perpendiculares. Uma de 20o em torno do eixo Y e outra de 15o no eixo X. uma vez que e´ poss´ıvel visualizar mais de uma face. No entanto. A cabinet tem o objetivo de reduzir o tamanho do objeto original pela metade. No entanto. Por´em.

4o 5: fim se 6: 7: fim se 8: L1 ← 9: para i ← 1 ate |V | fac¸a 1 tan φ 10: xp ← V[i].4. que neste caso.2. como pode ser verificado no Algoritmo 3. se for o X a projec¸a˜ o e´ lateral e se for o Y a projec¸a˜ o e´ chamada superior. Sa´ıda: A projec¸a˜ o obl´ıqua do objeto.z ×L1 × cos α) 12: fim para 13: desenhaPonto(xp . 1: se (p = “cavalier”) ent˜ao φ ← 45o 2: 3: sen˜ao se (p = “cabinet”) ent˜ao 4: φ ← 63. yp ) 3. lateral e superior.1 Projec¸o˜ es Paralelas Obl´ıquas Entrada: Um vetor V de pontos tridimensionais. como mostrado na Figura 3. as linhas projetoras (linhas pontilhadas) est˜ao paralelas aos seus 25 .Algoritmo 3. por isso seu uso em atividades onde deseja-se calcular as medidas de faces de objetos atrav´es de suas projec¸o˜ es ser t˜ao intenso. Sua implementac¸a˜ o e´ extremante simples.x × (V[i].2.y × (V[i].z ×L1 × cos α) 11: yp ← V[i].2 Projec¸o˜ es Ortogr´aficas de Vis˜ao Planar Nesta abordagem as faces dos objetos preservam suas medidas originais. Figura 3.4: Projec¸o˜ es ortogr´aficas frontal. Se o eixo Z e´ tomado como principal a projec¸a˜ o e´ dita frontal. o aˆ ngulo α e o tipo de projec¸a˜ o ortogr´afica p. Observe.

1998]. 1986].z 5: se (p = “frontal”) ent˜ao 6: desenhaPonto(xi . n˜ao e´ poss´ıvel se conceber corretamente a forma do objeto. Nela. os planos do objeto est˜ao posicionados em relac¸a˜ o ao plano de projec¸a˜ o. lateral e superior do objeto. um para cada eixo do sistema de coordenadas. zi ) 11: fim se 12: 13: fim se 14: fim para Outra caracter´ıstica. Para solucionar tal problema e´ comum exibir al´em das vistas frontal. corrige-se o problema de visualizar apenas um lado por vez e torna poss´ıvel a observac¸a˜ o de v´arias faces de um mesmo objeto. Sa´ıda: As projec¸o˜ es ortogr´aficas frontal.y 4: zp ← V[i]. Algoritmo 3.2 Projec¸o˜ es ortogr´aficas frontal. Assim. (b) projec¸a˜ o dim´etrica que possui dois fatores de reduc¸a˜ o iguais e (c) isom´etrica onde todos os fatores s˜ao iguais. Na maioria das vezes esta projec¸a˜ o altera a relac¸a˜ o dos aˆ ngulos e dimens˜oes do objeto distorcendo-os [Hearn e Baker.2. uma projec¸a˜ o axonom´etrica que permite uma vis˜ao mais integrada do objeto [Battaiola e Erthal. Para conseguir tal projec¸a˜ o s˜ao efetuadas rotac¸o˜ es no objeto e escolhidos trˆes fatores de reduc¸a˜ o. 3.3 Projec¸a˜ o Axonom´etrica Isom´etrica Ao contr´ario das abordagens anteriores a projec¸a˜ o axonom´etrica n˜ao possui a direc¸a˜ o de projec¸a˜ o e a normal ao plano de projec¸a˜ o coincidentes com a direc¸a˜ o de um dos eixos principais. zi ) sen˜ao 10: desenhaPonto(xi . Dentre as projec¸o˜ es axonom´etricas. lateral e superior. de forma que os trˆes eixos do objeto 26 . e´ que no caso de se observar apenas uma das faces. 1: para i ← 1 ate |V | fac¸a 2: xp ← V[i]. a mais usada e´ a isom´etrica. lateral e superior Entrada: Um vetor V com os pontos do objeto e o tipo de projec¸a˜ o p. (a) Projec¸a˜ o axonom´etrica trim´etrica onde todos os fatores de reduc¸a˜ o s˜ao diferentes.x 3: yp ← V[i].respectivos eixos principais e que a dimens˜ao da parte vis´ıvel do cubo permanece inalterada. a` s vezes um ponto negativo. yi ) sen˜ao 7: 8: se (p = “lateral”) ent˜ao 9: desenhaPonto(yi . As projec¸o˜ es axonom´etricas s˜ao classificadas de acordo com estes fatores de reduc¸a˜ o.

z). • Considere um ponto qualquer P(x. ˆ • Angulo de rotac¸a˜ o em torno do eixo X δ ∼ = 45o . Para conseguir obter um fator de reduc¸a˜ o igual para os trˆes eixos do sistema da Figura 3. Ap´os a descoberta dos aˆ ngulos de rotac¸a˜ o calcula-se as novas coordenadas dos pontos no sistema cartesiano. 1986]: ˆ • Angulo de rotac¸a˜ o em torno do eixo Y α ∼ = 35. H´a v´arias formas de se chegar a` s equac¸o˜ es que geram os novos pontos e uma delas aparece em [Battaiola e Erthal.26o . primeiro rotacione em torno do eixo Y e depois em torno de X. Ser´a considerado a primeira opc¸a˜ o. tanto os objetos tridimensionais (o cubo original . ou vice-versa. A seguir e´ apresentada uma forma mais simples de obtˆe-las.5 deixa essa caracter´ıstica bem clara. A Figura 3.5 foram usados os seguintes dados calculados em [Azevedo e Conci.e o cubo rotacionado para projec¸a˜ o isom´etrica) quanto suas projec¸o˜ es mantˆem a mesma proporc¸a˜ o entre as medidas. ou seja.aparentem ter a mesma mudanc¸a em suas medidas.visto de frente . 1998].5: Projec¸a˜ o ortogr´afica frontal e axonom´etrica isom´etrica. 27 . Figura 3. Para facilitar efetue apenas uma rotac¸a˜ o de cada vez. Observe que. y.

cos α. Basta efetuar as operac¸o˜ es de rotac¸o˜ es de forma adequada e aplicar a projec¸a˜ o frontal tomando o eixo Z como eixo principal. cos α).• Considere α o aˆ ngulo de rotac¸a˜ o em Y e δ em X. zp ) 7: fim para 8: projecaoOrtografica(VAU X . cos α. sin δ 00 Y = Y. cos α • Rotacionando novamente. Algoritmo 3. cos δ − (Z. a implementac¸a˜ o de tal projec¸a˜ o tamb´em e´ muito simples. X = X. sin δ + Y. sin α 00 0 0 2. cos δ 00 Z = Z.z × sin α × sin δ 6: VAU X [i] ← (xp . sin α 0 Z = Z . cos α.y × cos δ − V [i]. sin δ 0 Z = Z .z × sin α × sin δ 5: zp ← −xp × cos α × sin δ + yp × cos δ + V [i]. cos δ 00 Z = −X. “frontal”) 28 . cos δ + Z. z) ap´os a execuc¸a˜ o das operac¸o˜ es.x × cos α + V [i]. sin δ + Y. 0 X = X .3 Projec¸a˜ o ortogr´afica axonom´etrica isom´etrica Entrada: Um vetor V com os pontos do objeto. Z = Z . Rotacinando apenas em Y tem-se que: 0 Y = Y. sin δ 00 Y = X. Z ) e´ o ponto P(x. cos δ • Substituindo: 00 1. 1: VAU X [] //vetor auxiliar que conter´a os pontos rotacionados 2: para i ← 1 ate |V | fac¸a 3: xp ← V [i]. sin α − X. y. cos α + Z. sin δ + Y . cos δ 00 Z = (Z. sin α .X . cos δ − Z . cos α). mas agora em torno de X tem-se: 00 X =X 00 0 00 0 0 0 Y = Y . Y . sin δ − X. sin δ 00 Y = Y. sin α. cos δ − Z. sin α.z × sin α 4: yp ← xp × cos α × sin δ + V [i]. sin δ • Logo conclui-se que: 00 00 00 P (X . cos δ − Z . cos α. sin α. sin δ + Y . Sa´ıda: A projec¸a˜ o axonom´etrica isom´etrica do objeto.3. sin δ + Y. Como observa-se no Algoritmo 3. sin δ + X. sin α − X. cos α + Z . Y = Y . yp . sin δ 00 0 0 3. sin δ + Y. cos δ − Z. sin α.

3. pelo menos dois dos eixos s˜ao proporcionais em relac¸a˜ o a` s medidas originais. com a diferenc¸a que em vez de ter os trˆes fatores de reduc¸a˜ o iguais (como na isom´etrica) esta possui apenas dois desses fatores equivalentes.2. A projec¸a˜ o destas faces e´ equivalente a uma vista ortogonal frontal. a dim´etrica tamb´em e´ obtida atrav´es de rotac¸o˜ es seguidas em torno de X e Y a partir de um centro de projec¸a˜ o localizado no infinito (caracter´ıstica fundamental da projec¸a˜ o paralela). Para obter este efeito aplica-se uma diminuic¸a˜ o constante e graduada dos objetos e espac¸os da cena. com a diferenc¸a que na cavalier φ = 45o e na cabinet φ ∼ = 63. O algoritmo para as duas projec¸o˜ es e´ o mesmo. 1998].2. 3.3-(a) e o Algoritmo 3. Assim. as que n˜ao o s˜ao ficam distorcidas (o objeto e´ ilustrado na forma 3D. A Figura 3.3. Assim.4 Projec¸a˜ o Axonom´etrica Dim´etrica Assim como na projec¸a˜ o isom´etrica.4o . cada eixo cont´em um fator de reduc¸a˜ o diferente. Isto porque ela altera as dimens˜oes dos componentes da cena a` medida que estes ficam mais longe do observador. Na obl´ıqua apenas as faces paralelas ao plano de projec¸a˜ o s˜ao mostradas em seu tamanho e formas originais.5 Projec¸a˜ o Axonom´etrica Trim´etrica A projec¸a˜ o axonom´etrica trim´etrica e´ a menos restritiva de todas. existem duas classificac¸o˜ es para esta abordagem.2. gerando uma distorc¸a˜ o para cada face. n˜ao sendo aplic´avel para observac¸a˜ o fiel das m´etricas do espac¸o ou dos objetos de uma cena..1 mostram o funcionamento da projec¸a˜ o cavalier. dando a id´eia de afastamento progressivo para o fundo.3 Projec¸a˜ o Perspectiva A projec¸a˜ o perspectiva e´ aplicada em cenas que necessitam manter um alto grau de realismo [Ogata et al. pois s˜ao efetuadas rotac¸o˜ es em ordem arbitr´aria em torno dos eixos do sistema de coordenadas.3-(b) apresenta a projec¸a˜ o cabinet. A Figura 3. Se o aˆ ngulo formado entre as projetoras e o plano de projec¸a˜ o for igual a 45o a projec¸a˜ o e´ dita cavalier caso o aˆ ngulo seja de aproximandamente 63. resultando na criac¸a˜ o da noc¸a˜ o de profundidade do espac¸o. da mesma forma que acontece com o sistema de vis˜ao humano. 3. como nas projec¸o˜ es axonom´etricas). 1986]. nesta u´ ltima as arestas perpendiculares ao plano de projec¸a˜ o s˜ao reduzidas a` metade.4o e´ chamada de cabinet [Hearn e Baker. normalmente tomando-se o eixo Z como principal. Nesta abordagem. seguidas pela projec¸a˜ o frontal. Esta diminuic¸a˜ o e´ conhecida como encurtamento 29 .6 Projec¸a˜ o Paralela Obl´ıqua A projec¸a˜ o obl´ıqua se difere da ortogr´afica pelo fato de que na primeira as linhas projetoras n˜ao s˜ao perpendiculares ao plano de projec¸a˜ o.

as linhas paralelas n˜ao s˜ao projetadas paralelamente e as distˆancias n˜ao s˜ao preservadas (Figura 3. 30 . Figura 3.  Mper 1 0 0 0    0 1 0 0 =  0 0 1 0  0 0 d1 0      (3. A matriz de projec¸a˜ o perspectiva e´ dada pela Matriz 3. a projec¸a˜ o perspectiva gera cenas com alto grau de realismo por n˜ao manter fidelidade na reproduc¸a˜ o dos trac¸os originais. Por´em. pois a distˆancia entre o centro de projec¸a˜ o e o plano de projec¸a˜ o e´ finita. pois se este e o objeto estiverem do mesmo lado em relac¸a˜ o ao plano de projec¸a˜ o a imagem projetada e´ invertida. Permanecem intactas apenas as faces paralelas ao plano de projec¸a˜ o. deve-se ficar atento ao posicionamento do ponto de referˆencia da projec¸a˜ o (ou centro de projec¸a˜ o).6: Projec¸a˜ o perspectiva de uma cena. Nesta abordagem.1) Ao contr´ario do que muitas pessoas sem conhecimento do assunto pensam.perspectivo. nas demais os aˆ ngulos entre as arestas s˜ao alterados.6) [Ogata et al. 1998].1. as linhas projetoras n˜ao possuem a propriedade de paralelismo..

3. -d) denominado centro de projec¸a˜ o.2) e observando por cima encontra-se a coordenada x (Equac¸a˜ o 3.3.3) Pontos de fuga A projec¸a˜ o perspectiva e´ caracterizada pelo encurtamento perspectivo e pelos pontos de fuga. (xp . Olhando o plano de projec¸a˜ o pelo lado direito e´ poss´ıvel calcular a coordenada y do ponto projetado (Equac¸a˜ o 3. sobre o eixo Z. 3. localiza-se na intersec¸a˜ o do eixo com o plano de projec¸a˜ o e e´ o respons´avel pela classificac¸a˜ o das projec¸o˜ es perspectiva. Figura 3. paralelo ao plano XY. Este e´ chamado de ponto de fuga principal. Quando o plano de projec¸a˜ o intercepta um eixo principal tˆem-se a ilus˜ao de que as linhas projetoras paralelas a este eixo convergem para um ponto em comum. ao qual denomina-se plano de projec¸a˜ o e tomase. yp‘ ) as coordenadas do ponto P ‘ projetado. Considera-se um plano S. um ponto de coordenadas (0. 31 . As coordenadas do ponto projetado P ‘ s˜ao obtidas criando-se uma linha de P at´e o centro projec¸a˜ o e calculando-se a intersec¸a˜ o desta com o plano de projec¸a˜ o. zp ) s˜ao as coordenadas do ponto P a ser projetado e (xp‘ .7 exemplifica este c´alculo. yp . onde d e´ a distˆancia deste ao plano de projec¸a˜ o. 0.3).2 d d + zp yp = ⇒ yp‘ = zp yp0 yp (d)+1 (3.7: Representac¸a˜ o da projec¸a˜ o perspectiva de um ponto.3.1 Abordagem Matem´atica para Projec¸a˜ o Perspectiva A modelagem matem´atica da projec¸a˜ o perspectiva e´ baseada na semelhanc¸a de triˆangulos.2) d d + zp xp = ⇒ xp ‘ = z p xp ‘ xp (d)+1 (3. A Figura 3.

• 1 Ponto de Fuga: apenas um eixo principal e´ interceptado pelo plano de projec¸a˜ o.8 apresenta o gr´afico do resultado da execuc¸a˜ o dos algoritmos de projec¸a˜ o perspectiva e de projec¸a˜ o paralela obl´ıqua por um computador pessoal com processador 1. Figura 3. 3. e´ bem menos utilizada por acrescentar pouco em termos de realismo comparativamente a` s projec¸o˜ es com 2 pontos de fuga e possuir custo de implementac¸a˜ o muito superior. • 2 Pontos de Fuga: dois eixos principais s˜ao interceptados pelo plano de projec¸a˜ o. • 3 Pontos de Fuga: trˆes eixos principais interceptados pelo plano de projec¸a˜ o. A Figura 3.66 GHz e 256 Mb de mem´oria RAM. 32 . Por pertencerem a` mesma classe o tempo de execuc¸a˜ o destes e´ muito parecido. e´ muito usada em desenho industrial e projetos industriais.4 Conclus˜ao Analisando assintoticamente os algoritmos de projec¸a˜ o estudados conclui-se que s˜ao algoritmos com tempo de execuc¸a˜ o linear.8: Gr´afico de execuc¸a˜ o dos algoritmos de projec¸a˜ o perspectiva e paralela obl´ıqua.

Algoritmo 3. yp ) Os resultados mostram que a projec¸a˜ o perspectiva (Algoritmo 3.z +1 d V [i].x 2: xp V [i].y 3: yp V [i]. Isto deve-se ao fato de que a perspectiva possui menos operac¸o˜ es matem´aticas do que a paralela. Esta diferenc¸a gera ganhos no pipeline de visualizac¸a˜ o gr´afica quando este e´ aplicado a animac¸o˜ es e a simulac¸a˜ o de ambientes reais.4 Projec¸a˜ o Perspectiva Entrada: Um vetor V de pontos tridimensionais e a distˆancia do centro de projec¸a˜ o ao plano de projec¸a˜ o d. uma vez que estes tentam imitar o sistema de vis˜ao humano (projec¸a˜ o perspectiva).1). Sa´ıda: A projec¸a˜ o Perspectiva do Objeto. e quanto mais pontos possuir uma cena maior ser´a a diferenc¸a de execuc¸a˜ o das projec¸o˜ es. 33 .z +1 d 4: fim para 1: 5: desenhaPonto(xp .4) possui tempo de execuc¸a˜ o menor do a projec¸a˜ o paralela (Algoritmo 3. para i ← 1 ate |V | fac¸a V [i]. mesmo a perspectiva gerando cenas mais reais.

As retas devolvem como resultado um conjunto de segmentos de reta que podem ser visualizadas e a execuc¸a˜ o de algoritmos de clipping para recorte de planos devolve um conjunto de pol´ıgonos que podem ser desenhados. O m´etodo respons´avel por esta selec¸a˜ o e ampliac¸a˜ o e´ chamado de windowing [Harrington. 34 . O clipping tamb´em pode ser utilizado em conjunto com o sistema de cˆamera para ampliar uma porc¸a˜ o espec´ıfica da cena. geralmente a comparac¸a˜ o para verificar se os pixels s˜ao vis´ıveis ou n˜ao e´ feita por hardwares especializados. Para isto. vis´ıvel ou invis´ıvel. 1987]. Outra abordagem e´ recortar a imagem depois de convertˆe-la para a forma matricial. at´e os que n˜ao s˜ao vistos pelo observador.1 Introduc¸a˜ o O clipping e´ aplicado em cenas para retirar linhas e superf´ıcies que localizam-se fora da a´ rea de visualizac¸a˜ o [Hearn e Baker. Checa-se as coordenadas de cada pixel. Nas duas abordagens o resultado depende da geometria a ser recortada. Esta abordagem tem a desvantagem de exigir a convers˜ao de todos os pixels da cena. ou seja. comparando-as com o contorno do plano de clipping. 1986]. independente da forma geom´etrica. o processo de convers˜ao matricial torna-se mais r´apido. deixando esta t´ecnica mais r´apida.Cap´ıtulo 4 Clipping 4. Esta t´ecnica tem por objetivo acelerar a representac¸a˜ o da cena e divide-se em duas abordagens. que a` s vezes pode ser muito menor que a porc¸a˜ o original. Os pontos retornam resultados booleanos. A mais tradicional efetua o recorte das partes n˜ao vistas antes de fazer a convers˜ao matricial. Como consequˆencia. Por´em. Nesta. uma vez que deve-se preocupar apenas com a a´ rea vis´ıvel da cena. depois de rasteriz´a-la. a principal vantagem desta sobre a anterior e´ que ela pode ser utilizada para clipping de qualquer objeto. deve-se encontrar geometricamente os v´ertices que interceptam o contorno do plano de recorte e limitam as superf´ıcies (geralmente pol´ıgonos regulares) e/ou linhas vistas pelo observador. No entanto. a imagem da cena e´ rasterizada e ent˜ao apenas os pixels vis´ıveis s˜ao plotados no plano de visualizac¸a˜ o.

2) Clipping de Linhas O clipping de linhas concentra-se na remoc¸a˜ o de segmentos de reta que localizam-se fora da janela de visualizac¸a˜ o. Em outras palavras. o corte de pontos tamb´em tem sua importˆancia no processo de retirada de porc¸o˜ es n˜ao vis´ıveis de uma cena. que s˜ao as linhas horizontais do sistema de v´ıdeo. com cada part´ıcula sendo representada por um ponto. onde utiliza-se de sistemas de part´ıculas. Considerando a janela de visualizac¸a˜ o formada por (xwmin . obtendo-se o chamado preenchimento por scan-line. onde cada posic¸a˜ o desta representa um pixel da imagem. externa ou se intercepta os limites do pol´ıgono que representa a janela de visualizac¸a˜ o. deve-se calcular as intersec¸o˜ es e desenhar apenas o segmento de reta limitados por elas. Os pol´ıgonos s˜ao representados por seus v´ertices e sua rasterizac¸a˜ o ocorre atrav´es do c´alculo da intersec¸a˜ o entre as arestas que ligam estes v´ertices com as scan-lines (ou linhas de scaneamento). ywmin ) e (xwmax .3 xwmin 6 x 6 xwmax (4. Caso alguma destas n˜ao seja respeitada significa que o ponto localiza-se fora da a´ rea de visibilidade. Nesta abordagem. e´ o processo de convers˜ao da representac¸a˜ o vetorial para a matricial [Azevedo e Conci. como mostrado pela Figura 4.2 forem satisfeitas. Em cenas de explos˜oes ou simulac¸a˜ o de nuvens. Desta forma. se estiver fora nada e´ desenhado. o clipping de pontos e´ muito utilizado. Se localizar-se completamente dentro da a´ rea vis´ıvel a linha e´ desenhada.1. ywmax ). sob a forma de matriz. 1988].2 Clipping de Pontos Apesar de ser menos utilizado do que o clipping de linha ou de superf´ıcie.1 e 4. deve-se plotar o ponto (x. Os dados armazenados na mem´oria do dispositivo servem de base para determinar quais pixels e com qual cor devem ser acesos. 4. Na maioria das vezes. 4.4. y) se as inequac¸o˜ es 4. consegue-se preencher a matriz de pixels com a forma exata do pol´ıgono.1) ywmin 6 y 6 ywmax (4. No entanto. se ocorrer a intersec¸a˜ o entre a janela e a linha [Adams. cada linha a ser mostrada e´ testada para saber se e´ interna. 1986].1 Breve Descric¸a˜ o do Processo de Raster Rasterizar um objeto e´ retirar as informac¸o˜ es de cada pixel deste e armazenar na mem´oria do dispositivo. 35 .1.

respectivamente. a segunda posic¸a˜ o recebe 1 se o ponto est´a abaixo.1 para determinar qual porc¸a˜ o da linha deve ser desenhada (Figura 4. Estes dados s˜ao usados como c´odigos pelo Algoritmo 4. 4. 1994] fazem uso de um vetor de inteiros. Desta forma. Cohen e Sutherland [Foley et al.2: C´odigos para o recorte de linhas de Cohen e Sutherland.1 Os Principais Algoritmos Cohen e Sutherland desenvolveram um m´etodo r´apido para efetuar o recorte de linhas tomando uma janela de clipping retangular [Foley et al. 36 . 1994]. tornou-se um dos mais populares e utiliza-se de c´alculos matem´aticos para obter os pontos finais vis´ıveis da linha que se deseja trac¸ar [Rogers..1: Clipping de linhas. A primeira posic¸a˜ o do vetor recebe valor 1 se o ponto est´a acima da janela de visualizac¸a˜ o.2). O algoritmo que recebeu o nome dos autores.3.. a terceira e a quarta recebem valor 1 se o ponto localiza-se a` direita e a` esquerda da a´ rea de clipping. sendo cada elemento deste correspondente ao posicionamento dos extremos da linha em relac¸a˜ o a` janela de visualizac¸a˜ o (0 – vis´ıvel e 1 – invis´ıvel).Figura 4. quando todas as posic¸o˜ es Figura 4. 1985].

arquivos.1 Recorte de Pol´ıgonos Rasterizados Esta t´ecnica e´ muito utilizada pelos algoritmos de clipping de superf´ıcies que s˜ao usados pelos dispositivos gr´aficos atuais. como Liang e Barsky [Hearn e Baker. Ap´os fatiar (rasterizar) o pol´ıgono. 1986].3) ymin 6 y1 + t × ∆y 6 ymax (4. cada matriz contendo as informac¸o˜ es das superf´ıcies s˜ao percorridas e cada fatia (posic¸a˜ o da matriz) 37 .4. Esta abordagem baseia-se na an´alise da equac¸a˜ o param´etrica da reta que passa pelos pontos que formam o extremos da linha a ser exibida. Neste caso. A t´ecnica de refinamento consiste em representar a reta na forma param´etrica.do vetor s˜ao iguais a 0 (zero) o ponto e´ interno a` janela de clipping. recort´a-las e depois fazer o preenchimento apropriado. Cohen e Sutherland utilizam-se da abordagem de codificac¸a˜ o para determinar quais porc¸o˜ es de retas est˜ao vis´ıveis e quais n˜ao est˜ao. os valores dos parˆametros que definem qual parte est´a dentro da janela de clipping. Enquanto o algoritmo Cohen-Sutherland executa subdivis˜oes para encontrar as intersec¸o˜ es Liang e Barskey preferem a t´ecnica de refinamento.4) Clipping de Superf´ıcies V´arias aplicac¸o˜ es de computac¸a˜ o gr´afica necessitam de suporte a recorte de superf´ıcies (pol´ıgonos) [Greiner e Hormann. Os algoritmos que utilizam-se desta abordagem rasterizam cada pol´ıgono que comp˜oe a cena. preferem utilizar das equac¸o˜ es param´etricas para determinar os pontos finais das semi-retas vis´ıveis. armazenando as informac¸o˜ es de cada ponto em uma estrutura de dados. 4. na maioria das vezes uma matriz bidimensional. Os casos mais complexos ocorrem quando a linha a ser desenhada intercepta o contorno da janela de visualizac¸a˜ o. a semi-reta a ser desenhada deve satisfazer as condic¸o˜ es apresentadas pelas Equac¸o˜ es 4.4 4. 1998].3 e 4. No entanto. para cada linha.4 xmin 6 x1 + t × ∆x 6 xmax (4. etc) e h´a duas abordagens para determinar as porc¸o˜ es vis´ıveis: (a) rasterizar o pol´ıgono antes de recort´a-lo e (b) considerar este formado por um conjunto de linhas. Ela consegue ser mais eficiente que o algoritmo anterior porque evita os c´alculos de intersec¸o˜ es que n˜ao s˜ao necess´arias. calcula-se os pontos de intersec¸a˜ o do segmento de reta com a borda da a´ rea vis´ıvel e utiliza-os como pontos finais da semi-reta ser mostrada. Considerando ∆x = x2 − x1 e ∆y = y2 − y1 . listas. O algoritmo Liang-Barsky calcula. Geralmente os v´ertices destes pol´ıgonos s˜ao armazenados em estruturas de dados (matrizes. alguns pesquisadores.

1: enquanto Existir linhas a serem recortadas fac¸a 2: se p1 e p2 s˜ao trivialmente aceitos ent˜ao 3: Desenha a linha limitada por p1 e p2 4: retorna(1) 5: fim se 6: se p1 e p2 s˜ao trivialmente rejeitados ent˜ao 7: retorna(0) 8: fim se 9: se p1 e´ externo a` janela de clipping ent˜ao 10: se p1 est´a a esquerda da janela ent˜ao 11: 12: 13: Corta o segmento usando a aresta esquerda do viewport sen˜ao se p1 est´a a direita da janela ent˜ao Corta o segmento usando a aresta direita do viewport 14: 15: sen˜ao se p1 est´a abaixo da janela ent˜ao 16: Corta o segmento usando a aresta da base do viewport 17: sen˜ao 18: se p1 est´a acima da janela ent˜ao 19: Corta o segmento usando a aresta superior do viewport 20: fim se 21: fim se 22: 23: 24: 25: 26: 27: 28: fim se fim se sen˜ao Efetua os mesmos passos das linhas 9 a 24 para p2 fim se fim enquanto 38 . Sa´ıda: A semi-reta vis´ıvel desenhada.1 Algoritmo de Cohen e Sutherland [Hearn e Baker. 1986] Entrada: Os pontos finais p1 e p2 da linha a ser verificada e a janela de clipping.Algoritmo 4.

Principalmente. (b) a precis˜ao das t´ecnicas utilizadas e (c) o poder de processamento dos dispositivos gr´aficos atuais. Parte do pipeline de visualizac¸a˜ o gr´afica que ser´a discutido no Cap´ıtulo 5. Figura 4. a t´ecnica de rasterizar as superf´ıcies antes de recort´a-las ainda e´ muito utilizada para eliminar as partes da cena que n˜ao est˜ao vis´ıveis ao observador. 39 . As fatias internas e as que interceptam o contorno da a´ rea de clipping s˜ao exibidas e as demais descartadas.3 apresenta um pol´ıgono com estas caracter´ısticas.e´ comparada para verificar se esta localiza-se dentro ou fora da a´ rea vis´ıvel. e´ dif´ıcil entender porque utilizar uma t´ecnica mais lenta sabendo-se que h´a ouAs tras melhores para obter praticamente os mesmos resultados. A Figura 4. por´em e´ menos utilizada. No entanto. no caso do clipping de superf´ıcies a explicac¸a˜ o baseia-se em trˆes fatores: (a) o grau de dificuldade para desenvolver os algoritmos que recortam as superf´ıcies sem precisar rasteriz´a-las. o tempo de execuc¸a˜ o para os algoritmos de recorte de pol´ıgonos rasterizados e´ maior do que os algoritmos que n˜ao rasterizam os objetos. mas tamb´em ao processo de comparac¸a˜ o de cada pixel dos objetos com o contorno da janela de visualizac¸a˜ o.2 Recorte de Pol´ıgonos n˜ao Rasterizados Ao contr´ario da linha de racioc´ınio anterior. esta t´ecnica e´ mais r´apida do que a anterior. os algoritmos de clipping de superf´ıcies n˜ao rasterizadas procuram apenas as intersec¸o˜ es dos pol´ıgonos com as arestas que formam a janela de visualizac¸a˜ o. Normalmente. constitu´ıdos por muitas arestas. ` vezes.3: Pol´ıgono de dif´ıcil recorte. Dependendo do tamanho e da quantidade de pol´ıgonos que formam a cena. Esta diferenc¸a de tempo de execuc¸a˜ o deve-se n˜ao apenas a` rasterizac¸a˜ o dos componentes da cena. quando trabalham com pol´ıgonos complexos. principalmente no processo de detecc¸a˜ o e remoc¸a˜ o de superf´ıcies escondidas. 4.4. Por´em. Os algoritmos que n˜ao fazem uso da rasterizac¸a˜ o s˜ao complexos e demandam muito tempo e esforc¸o computacional para serem desenvolvidos.

2o teste . uma vez que torna poss´ıvel a determinac¸a˜ o exata da posic¸a˜ o de cada ponto em relac¸a˜ o a` janela de clipping. os dispositivos gr´aficos atuais tˆem uma capacidade de processamento muito grande. V2 . V3 }. aplicar os algoritmos estudados na sec¸a˜ o anterior e utilizar alguma t´ecnica de preenchimento para solidificar a regi˜ao recortada. Observe que este algoritmo trabalha com arestas sequenciais. aumentando sua eficiˆencia e velocidade. o uso da rasterizac¸a˜ o e´ comum pois facilita a implementac¸a˜ o e aumenta a precis˜ao do recorte.Para pol´ıgonos como este. Para isto deve-se desconectar as arestas da superf´ıcie de entrada. apenas as fatias vis´ıveis dos pol´ıgonos s˜ao exibidas.por fim. 3o teste . insere-se apenas a intersec¸a˜ o da aresta com o contorno deste. A proposta dos algoritmos de clipping e´ retornar um conjunto de v´ertices que formam o contorno do pol´ıgono clipado. alguns testes devem ser feitos considerando os v´ertices dos pol´ıgonos e o contorno da janela de recorte [Hearn e Baker.se o primeiro v´ertice est´a fora e o segundo dentro da janela de visualizac¸a˜ o. Observando-a. de modo que ao terminar de executar estes passos. se os dois pontos que formam a aresta localizam-se fora da a´ rea de visibilidade nenhum dos v´ertices fazem parte da soluc¸a˜ o. desta vez seu parceiro foi Hodgman [Sutherland e Hodgman. Sutherland (considerado por muitos como um dos pais da computac¸a˜ o gr´afica) tamb´em desenvolveu um algoritmo para clipping de pol´ıgonos. Considere a Figura 4. V3 . Todos os algoritmos estudados n˜ao encapsulam o processo de raster. 1o teste . 1974].3 Os Principais Algoritmos Esta sec¸a˜ o apresenta alguns dos algoritmos de recorte de pol´ıgonos mais conhecidos. Para chegar a este conjunto de v´ertices utilizando os testes de Hodgman 40 . tornando a operac¸a˜ o de raster assintoticamente desprez´ıvel e determinando a visibilidade dos pixels do pol´ıgono de forma a´ gil. 4o teste .4 para melhor entendimento do funcionamento do algoritmo de Sutherland e Hodgman. Por´em. Por fim.se o primeiro v´ertice e´ interno e o segundo externo ao viewport. Os dois desenvolveram um algoritmo que divide-se em quatro passos. 4. tanto o segundo v´ertice quanto a intersec¸a˜ o da aresta com o contorno da a´ rea vis´ıvel s˜ao inseridos no conjunto de v´ertices que pertencem a` soluc¸a˜ o.se os dois pontos limitantes da aresta s˜ao interno a` janela. o que evita a repetic¸a˜ o desnecess´aria de v´ertices. conclui-se facilmente que os pontos pertencentes a` soluc¸a˜ o s˜ao 0 0 s = {V1 . Em cada passo efetua-se o recorte de um lado da janela de visualizac¸a˜ o. 1986]. apenas o segundo v´ertice e´ inserido no conjunto soluc¸a˜ o. Para isto. por isso n˜ao h´a a necessidade de armazenar todos os pontos v´alidos em todas as iterac¸o˜ es.4.

V2 . 0 0 inserindo apenas a intersec¸a˜ o ao conjunto soluc¸a˜ o. A aresta V1 V2 0 encaixa-se no 1o teste. −−→ e Sutherland deve-se considerar um ponto de partida. adicionando apenas o segundo v´ertice a` soluc¸a˜ o.Figura 4.4: Exemplo de execuc¸a˜ o do Algoritmo Sutherland Hodgeman. Figura 4. Logo. −−→ 0 tem-se que s = {V1 . armazena-se V1 e V2 no conjunto soluc¸a˜ o que passa a ser s = −−→ 0 {V1 . V3 . As −−→ −−→ demais sequˆencias (V4 V5 e V5 V1 ) encaixam-se no 4o teste. Logo.5 mostra como Sutherland e Hodgman tratam o problema de recorte de pol´ıgonos. V3 }. V2 }.5: Clipping de Sutherland e Hodgman. n˜ao acrescentando nada a` soluc¸a˜ o. Continuando. Analisando a aresta subsequente V2 V3 verifica-se a aplicac¸a˜ o do 2o teste. V2 . que passa a ser s = {V1 . o ponto V1 . a semi-reta V3 V4 deve ser resolvida pelo 3o teste. 41 . uma vez que o primeiro j´a faz parte da mesma. neste caso. A Figura 4. V3 }.

Estas s˜ao encontradas percorrendo-se segmento por segmento de B e verificando quais deles interceptam os contornos de A. O primeiro passo e´ encontrar os pontos de intersec¸a˜ o entre os pol´ıgonos A e B e armazen´alos em uma estrutura de dados (geralmente uma lista). Diferente de Sutherland e Hodgeman. caso existam. este e´ desenhado e procura-se 42 . ou ent˜ao. se aplicado a pol´ıgonos cˆoncavos seu resultado n˜ao e´ exato [Rogers. Observando a Figura 4. onde um ponto e´ adicionado a` lista que forma a soluc¸a˜ o. Quando isto acontece. O segundo caso. Para resolver este problema h´a duas sa´ıdas: adaptar o algoritmo de Sutherland e Hodgman para tentar transformar o pol´ıgono cˆoncavo em um conjunto de pol´ıgonos convexos. uni˜ao e diferenc¸a (operac¸o˜ es de conjuntos). No exemplo da Figura 4.6 h´a 4 intersec¸o˜ es. 1985].. 1990].6 fica mais f´acil entender o funcionamento do algoritmo de Weiler. Para Weiler a cena e´ formada por uma s´erie de pol´ıgonos e para determinar quais partes s˜ao vis´ıveis. Quando os pontos da soluc¸a˜ o formam um pol´ıgono fechado. e´ quando o ponto e´ interno a` janela de clipping.6: Clipping de pol´ıgono cˆoncavo. n+1 novos pol´ıgonos.Este algoritmo e´ muito eficiente para recorte de pol´ıgonos convexos. No entanto. 1986] e pode ser utilizado para recorte tanto de pol´ıgonos convexos quanto cˆoncavos. significa que todos os segmentos foram visitados. gerando algumas arestas que n˜ao deveriam existir. E quando o algoritmo de Sutherland e Hodgman e´ aplicado a elas este tenta conectar os novos pol´ıgonos. Este processo e´ repetido at´e que o ponto de partida seja visitado novamente. Weiler e Atherton n˜ao abordam a superf´ıcie como sendo um conjunto sequencial de v´ertices. no m´ınimo. Figura 4. uma vez que o recorte destas formas geom´etricas geram. utilizar algoritmos capazes de tratar as arestas fantasmas (arestas que n˜ao deveriam existir ap´os o recorte). Os pontos de intersec¸a˜ o. s˜ao adicionados ao conjunto soluc¸a˜ o. Sua id´eia b´asica e´ determinar a visibilidade de um pol´ıgono em relac¸a˜ o a outro atrav´es das operac¸o˜ es de intersec¸a˜ o. Este algoritmo e´ um dos mais gerais que j´a foram desenvolvidos para o clipping de superf´ıcies [Hearn e Baker. Weiler desenvolveu um algoritmo (algoritmo Weiler-Atherton) com esta caracter´ıstica. efetua-se divis˜oes recursivas da imagem [Foley et al.

uma vez que se esta for paralela o volume de vis˜ao e´ formado por um cubo e se for perspectiva.. por exemplo. 1. Os algoritmos de clipping de linhas apresentados neste cap´ıtulo podem ser facilmente adaptados para tratarem linhas que localizam-se no espac¸o [Foley et al.5 Clipping Tridimensional O clipping 3D usa volumes de visualizac¸a˜ o e depende diretamente do tipo de projec¸a˜ o aplicado a` cena. 1990].se o ponto est´a atr´as do volume do visualizac¸a˜ o. A detecc¸a˜ o e remoc¸a˜ o de superf´ıcies ocultas ser´a tratado com mais detalhes no pr´oximo cap´ıtulo. para o exemplo da Figura 4. Assim como os algoritmos de recorte de linha podem ser adaptados para o sistema tridimensional. Posic¸a˜ o 6 . devido ao aumento de dimens˜ao (2D para 3D). etc) tamb´em podem. 4. deve-se aumentar o n´umero de posic¸o˜ es do vetor de codificac¸a˜ o de 4 para 6. 2} e s2 = {3. Os crit´erios para determinar se uma linha e´ trivialmente rejeitada ou aceita s˜ao os mesmos do algoritmo para clipping 2D.6 o conjunto soluc¸a˜ o e´ composto por dois pol´ıgonos distintos: s1 = {d. Posic¸a˜ o 2 . Para alterar o algoritmo de Cohen-Sutherland. Posic¸a˜ o 3 . este deixa de ser apenas um algoritmo de recorte e passa a ser um algoritmo de detecc¸a˜ o e remoc¸a˜ o de superf´ıcies escondidas. Desta forma. A projec¸a˜ o determina a forma como o volume de visualizac¸a˜ o deve ser calculado. os algoritmos de clipping de superf´ıcies (Sutherland-Hodgman.por novas a´ reas vis´ıveis. Posic¸a˜ o 5 . por uma pirˆamide. Alterando o algoritmo de Weiler e Atherton para recortar um pol´ıgono em relac¸a˜ o a` janela de clipping e aos demais pol´ıgonos da cena.se o ponto localiza-se abaixo do volume de visualizac¸a˜ o. Bastando algumas poucas alterac¸o˜ es.se o ponto est´a em frente ao volume de visualizac¸a˜ o.se o ponto est´a a` esquerda do volume de visualizac¸a˜ o. Esta flexibilidade fortalece ainda mais a generalidade deste algoritmo. que representam o pol´ıgono recortado.se o ponto est´a a` direita do volume de visualizac¸a˜ o.se o ponto localiza-se acima do volume de visualizac¸a˜ o. onde o valor de cada posic¸a˜ o assume valor verdadeiro atrav´es da an´alise das seguintes regras: Posic¸a˜ o 1 . 43 . b. Weiler-Atherton. 4}. Posic¸a˜ o 4 .

44 .7: Clipping de uma superf´ıcie cˆoncava. Enquanto no recorte de linha a semi-reta resultante continua com as mesmas caracter´ısticas da entrada do algoritmo. Por isso. Por´em. onde uma u´ nica forma geom´etrica gerou duas outras completamente distintas ap´os a aplicac¸a˜ o de um algoritmo de clipping. no clipping de superf´ıcies isto nem sempre ocorre.4. a preocupac¸a˜ o maior foi expressar de forma clara e objetiva o clipping 2D. um u´ nico pol´ıgono pode gerar dois novos.7. com caracter´ısticas totalmente diferentes. Figura 4. fica claro o motivo de ocorrer um aumento t˜ao grande na complexidade dos algoritmos de clipping de superf´ıcies se comparados aos de linha. a` s vezes.6 Conclus˜ao Diante dos fatos tratados e apresentados por este cap´ıtulo. fica f´acil trabalhar no sistema tridimensional. como observase na Figura 4. Muitas vezes. uma superf´ıcie recortada cont´em mais lados do que a original e. bastando efetuar algumas adaptac¸o˜ es nos pr´oprios algoritmos bidimensionais. pois os conceitos utilizados s˜ao praticamente os mesmos. ap´os entender o funcionamento do recorte de linhas e superf´ıcies 2D. Este e´ um exemplo cl´assico.

cgmax.1. Figura 5. suponha que atr´as dos cubos desta figura h´a uma esfera que est´a encoberta. Esta etapa deve ser aplicada antes de exibir a imagem para evitar a renderizac¸a˜ o das superf´ıcies que est˜ao encobertas por outras.imagem retirada do site http://www. 45 . Al´em disso. (b) Interpolac¸a˜ o correta .1: (a) Erro de interpolac¸a˜ o. aumentando o tempo de processamento da cena. quando bem realizada evita problemas de renderizac¸a˜ o como o mostrado na Figura 5.com. efetuar as operac¸o˜ es de projec¸a˜ o e recortar as partes da cena que extravasam os limites da janela de exibic¸a˜ o. a mesma ser´a renderizada. Esta operac¸a˜ o. o pr´oximo passo do pipeline de visualizac¸a˜ o gr´afica e´ detectar e remover as superf´ıcies que ainda se encontram escondidas na cena.br.Cap´ıtulo 5 Detecc¸a˜ o e Remoc¸a˜ o de Superf´ıcies Escondidas 5. se n˜ao aplicar um algoritmo de remoc¸a˜ o de superf´ıcies ocultas.1 Introduc¸a˜ o Ap´os determinar as caracter´ısticas do sistema de cˆameras.

etc). Este cap´ıtulo apresenta os conceitos. por´em isto influencia pouco no tempo de execuc¸a˜ o. o n´ıvel de dificuldade para otimizar os atuais algoritmos de visibilidade geram uma acomodac¸a˜ o em relac¸a˜ o a` melhoria destas rotinas. (a) m´etodos que trabalham sobre espac¸o do objeto e (b) m´etodos que consideram o espac¸o da imagem. antes deve-se determinar quais destes pixels n˜ao est˜ao vis´ıveis e esta e´ a maior dificuldade. Alguns algoritmos. Os m´etodos de determinac¸a˜ o de visibilidade dividem-se em dois grupos. a quantidade e tamanho dos objetos s˜ao fatores que influenciam na visibilidade das superf´ıcies.3 Os algoritmos de visibilidade Em geral. Isto porque n˜ao e´ apenas remover os pixels invis´ıveis. uma vez que n˜ao e´ necess´ario efetuar todos os c´alculos via software. uma vez que estes algoritmos utilizam recursos pr´oprios dos dispositivos gr´aficos (processador.2 O problema de determinar a visibilidade de uma superf´ıcie Remover as superf´ıcies escondidas de uma cena e´ considerado por muitos pesquisadores da a´ rea de computac¸a˜ o gr´afica uma das tarefas mais dif´ıceis do pipeline de visualizac¸a˜ o [Bhattacharya et al. A implementac¸a˜ o de algoritmos baseados no espac¸o da imagem e´ bem menos complexa. bem como os principais algoritmos e seus resultados. dando origem a diversos algoritmos para efetuar estas operac¸o˜ es. gerando v´arias t´ecnicas que posteriormente foram trazidas para a detecc¸a˜ o e remoc¸a˜ o de superf´ıcies ocultas. O posicionamento da cˆamera. tanto que e´ utilizado pela biblioteca gr´afica 46 . pois trabalham sobre o espac¸o matricial. conseguem juntamente com os dispositivos gr´aficos obter resultados satisfat´orios na detecc¸a˜ o e remoc¸a˜ o de superf´ıcies encobertas. 5. 1998]. A primeira abordagem (a).Os dispositivos gr´aficos atuais j´a possuem algoritmos para esta funcionalidade gravados em sua mem´oria fixa. Aliado e este crescimento. 1992]. motivo pelo qual estes aparecem com muito mais frequˆencia do que os outros [Sharir e Overmars. como o z-buffer. mem´oria. apresentando as vantagens de aplicar tal t´ecnica na exibic¸a˜ o de cenas geradas por computador. Por muito tempo a visibilidade foi discutida e pesquisada. os algoritmos para detecc¸a˜ o e remoc¸a˜ o de superf´ıcies escondidas s˜ao assintoticamente quadr´aticos. e estes dispositivos possuem um desenvolvimento muito acelerado. cada ponto (pixel) que forma os agentes da cena e´ comparado com os demais. J´a em (b). 1981]. 1989]. 5. e isto torna o processamento sensivelmente mais r´apido [Westermann e Ertl. pois as rotinas atuais conseguem suprir quase todas as exigˆencias impostas a elas.. compara entre si todos os objetos que comp˜oem a cena para determinar quais superf´ıcies est˜ao vis´ıveis ao observador [Sechrest e Greenberg.

um vetor normal a` uma face do poliedro. Este algoritmo e´ muito simples e primitivo. 1993]. y.1) Onde os coeficientes a. como mostra a Figura 5. c).1 M´etodo Back-Face Este algoritmo e´ muito simples e e´ abordado apenas para reforc¸ar a id´eia da detecc¸a˜ o de superf´ıcies ocultas.3. detectar e tamb´em remover as superf´ıcies que n˜ao s˜ao vistas pelo observador.OpenGL [Greene et al. b. por´em apresenta de forma clara e simplificada o problema de visibilidade de superf´ıcies. Considerando um vetor V com mesma direc¸a˜ o das linhas do sistema de vis˜ao (ou da cˆamera) da cena e N = (a.2. 5. 1996]. b. z) este faz parte do pol´ıgono se a Inequac¸a˜ o 5. 47 . a×x+b×y+c×z+d<0 (5. V. Ele faz um u´ nico teste para verificar se o ponto e´ interno a um pol´ıgono ou n˜ao [Kumar e Manocha.1 e´ satisfeita.2) Figura 5. Considerando um ponto 3D (x.. c e d s˜ao constantes que descrevem as propriedades espaciais da superf´ıcie a` qual envolve o ponto.2. este m´etodo e´ simples e r´apido para detectar quais superf´ıcies de um poliedro est´a encobrindo outra. tem-se que esta face est´a encoberta por alguma outra atrav´es da Inequac¸a˜ o 5. as pr´oximas sec¸o˜ es apresentam algoritmos mais eficientes e completos para tratar.N > 0 (5.2: Vetores que determinam a visibilidade de uma superf´ıcie. Trabalhando sobre o espac¸o da imagem.

5.3.2

M´etodo BSP-Tree

Com grande uso nas d´ecadas de 80 e 90, a a´ rvore de particionamento bin´ario do espac¸o
surgiu com o objetivo de determinar a superf´ıcie vis´ıvel em cada ponto da cena. Este m´etodo
e´ eficiente para cenas onde o ponto de referˆencia do sistema visualizac¸a˜ o muda, mas os objetos permanecem fixos. Ele divide o espac¸o da cena em conjuntos menores, desenhando os
pol´ıgonos que est˜ao mais ao fundo primeiro, desta forma deve-se ordenar os pol´ıgonos para
evitar erros de exibic¸a˜ o [Tsai e Wang, 2007]. Esta ordenac¸a˜ o ocorre durante o processo de pr´eprocessamento da cena para evitar aumento no tempo de execuc¸a˜ o expl´ıcita.
A Figura 5.3 mostra como a a´ rvore de particionamento bin´ario do espac¸o e´ montada, observe
que o ramo esquerdo da a´ rvore e´ preenchido com faces que encontram-se em frente ao plano de
partic¸a˜ o, ao passo que o da direita cont´em as superf´ıcies localizadas mais ao fundo.

Figura 5.3: Divis˜ao do espac¸o da cena por dois planos (a) e a´ rvore de partic¸a˜ o (b).
Quando for desenhar basta percorrer a a´ rvore lendo primeiro os ramos do fundo e desenhando suas respectivas superf´ıcies. No entanto, este m´etodo possui alguns problemas:
• Se um pol´ıgono intercepta outro pol´ıgono estes n˜ao s˜ao exibidos corretamente;
• O c´alculo da ordem em que os pol´ıgonos devem ser desenhados pode ser computacionalmente caro, caso haja muitos pol´ıgonos em uma cena.
Este algoritmo e´ pouco explorado neste trabalho pelo fato de ter perdido espac¸o na computac¸a˜ o gr´afica atual devido ao surgimento dos aceleradores gr´aficos e do m´etodo de z-buffer, que
aliados conseguem ser mais r´apidos e eficientes do que o BSP-tree.
48

5.3.3

M´etodo Depth-Buffer

Este m´etodo e´ eficiente e muito utilizado para resolver o problema da visibilidade. Por atuar
no espac¸o da imagem, pode ser aplicado para qualquer tipo de pol´ıgono ou objeto. Ele compara
a profundidade das superf´ıcies atrav´es da posic¸a˜ o de cada pixel em relac¸a˜ o ao plano de projec¸a˜ o.
O algoritmo de z-buffer [Han, 2004] utiliza este m´etodo para determinar quais superf´ıcies ou
parte destas devem ser retiradas da cena. Neste caso, o plano de visualizac¸a˜ o fica ao longo do
eixo z do sistema de coordenadas.
Cada superf´ıcie e´ validada individualmente atrav´es de cada um de seus pixels. As principais vantagens deste algoritmo s˜ao: sua velocidade, a n˜ao necessidade de ordenac¸a˜ o das superf´ıcies e sua simplicidade de implementac¸a˜ o [Hearn e Baker, 1986]. Os pixels selecionados
como vis´ıveis s˜ao armazenados na forma bidimensional, ou seja, j´a projetados, da´ı a necessidade de usar uma matriz auxiliar na implementac¸a˜ o do algoritmo para guardar as informac¸o˜ es
de profundidade de cada pixel pr´e-selecionado para o conjunto soluc¸a˜ o. Al´em de usar uma a´ rea
de buffer auxiliar, deve-se ter outra a´ rea para armazenas as informac¸o˜ es de intensidade de cada
pixel, para permitir a reproduc¸a˜ o idˆentica do mesmo ap´os o final da execuc¸a˜ o do m´etodo.
Inicialmente, o buffer de intensidade e´ inicializado com a intensidade da cor de fundo e o
buffer de profundidade inicia-se com 0 (posic¸a˜ o do plano de clipping traseiro, ou mais afastado) ou com um valor muito pequeno, que e´ considerado a profundidade m´ınima. A profundidade m´axima e´ limitada pelo plano de clipping frontal, definido por um zmax , que depende
da aplicac¸a˜ o. Desta forma, cada pixel da cena tem sua profundidade comparada com respectiva posic¸a˜ o do buffer de profundidade (este trabalho considera a a´ rea de buffer como uma
matriz bidimensional), trocando as informac¸o˜ es das duas matrizes quando o pixel analisado
localizar-se mais pr´oximo do observador do que o anteriormente armazenado em sua posic¸a˜ o.
A Figura 5.4 apresenta um esquema do funcionamento deste m´etodo.

Figura 5.4: Objetivo do algoritmo z-buffer (compara todos os pixels e retorna o que tiver menor
profundidade).
49

O algoritmo de z-buffer
O algoritmo de z-buffer (Algoritmo 5.1) e´ simples de implementar, pode ser aplicado em
qualquer cena e gera resultados satisfat´orios. No entanto, exige uma a´ rea de buffer auxiliar e
dependente da resoluc¸a˜ o do sistema de v´ıdeo e isto pode exigir uma fatia a mais de mem´oria
para ser executado.
Algoritmo 5.1 Algoritmo z-buffer
Entrada: Uma estrutura contendo os pontos pij de todos os objetos na cena.
Sa´ıda: A matriz de intensidade, contendo as informac¸o˜ es dos pixels vis´ıveis.
1:

w ← LarguraResolucao() // Retorna a largura da resoluc¸a˜ o do dispositivo de v´ıdeo

2:

h ← AlturaResolucao()

3:

zBuf f erDepth[][] ← 0.0 // Matriz de profundidade inicializada com 0.0

4:

zBuf f erInt[][] ← IntensidadeF undo() // Matriz de intensidade inicializada com a cor

// Retorna a altura da resoluc¸a˜ o do dispositivo de v´ıdeo

de fundo da cena
5:
6:
7:

para i ← 1 at´e w fac¸a
para j ← 1 at´e h fac¸a
se pij .getZ() ¿ zBufferDepth[i][j] ent˜ao

8:

zBuf f erDepth[i][j] ← pij .getZ() // Retorna a componente z do ponto

9:

zBuf f erInt[i][j] ← pij .Intensidade() // Retorna a intensidade do ponto

10:

fim se

11:

fim para

12:

fim para

13:

Retorna zBuf f erInt[][]
A Figura 1.2 - parte (b) mostra o resultado da aplicac¸a˜ o do m´etodo z-buffer. Mesmo usando

uma matriz m × n como buffer de profundidade, a qual recebe os valores da coordenada z
pertencente ao sistema de coordenadas global o algoritmo de z-buffer trabalha sobre o sistema
de coordenadas do dispositivo gr´afico no que se refere a` comparac¸a˜ o do posicionamento dos
pontos da cena. Na matriz de profundidade o elemento ij corresponde ao pixel ij da tela, da
mesma forma que na matriz de intensidade. Assim, este algoritmo pode passar pelo mesmo
ponto v´arias vezes, por´em isto n˜ao reduz sua eficiˆencia sua eficiˆencia.
O m´etodo z-buffer e´ eficiente, por´em n˜ao permite a aplicac¸a˜ o de anti-aliasing, pois armazena apenas uma informac¸a˜ o do pixel em cada posic¸a˜ o. Para resolver este problema foi
proposto o m´etodo a-buffer. Neste, cada posic¸a˜ o da matriz de buffer possui uma lista de
informac¸o˜ es, assim torna poss´ıvel armazenar os dados necess´arios para aplicar t´ecnicas de
suavizac¸a˜ o dos contornos dos objetos da cena.

50

51 . Ele percorre a cena verificando linha por linha para determinar sua visibilidade.2 Algoritmo scan-line Entrada: Uma estrutura contendo os pontos pij de todos os objetos na cena. Assim. o algoritmo retorna sempre o pixel mais pr´oximo do observador em uma posic¸a˜ o ij da matriz da cena. Cada linha trac¸ada intercepta v´arias superf´ıcies em uma mesma posic¸a˜ o. Sa´ıda: A matriz de intensidade. percebe-se que ao final da varredura a junc¸a˜ o das scan-lines forma um plano. por´em o m´etodo de scan-line retorna as caracter´ısticas do pixel da primeira face atingida pela linha.4 M´etodo Scan-Line M´etodo que trabalha sobre o espac¸o da imagem. o scan-line para remoc¸a˜ o de superf´ıcies escondidas possui os mesmos conceitos do scan-line para preenchimento de pol´ıgonos [Crocker. O Algoritmo scan-line Ao contr´ario do algoritmo de z-buffer.Intensidade() // Retorna a intensidade do ponto fim para fim para Retorna zBuf f erInt[][] Enquanto o algoritmo de z-buffer necessita de uma matriz m x n para efetuar o buffer das profundidades da cena. Consequentemente. 1: w ← LarguraResolucao() 2: h ← AlturaResolucao() 3: zBuf f erInt[][] ← IntensidadeF undo() // Retorna a largura da resoluc¸a˜ o do dispositivo de v´ıdeo // Retorna a altura da resoluc¸a˜ o do dispositivo de v´ıdeo // Matriz de intensidade inicializada com a cor de fundo da cena 4: 5: 6: para i ← 1 at´e h fac¸a para j ← 1 at´e w fac¸a Encontra a superf´ıcie que cont´em o primeiro pixel atingido pela scan-line que parte do observador 7: 8: 9: 10: zBuf f erInt[i][j] ← pij . fazendo uso da id´eia de que os vizinhos envolvidos pelos mesmos pol´ıgonos possuem caracter´ısticas semelhantes (coerˆencia).2) desenha cada posic¸a˜ o da matriz de intensidade uma u´ nica vez. armazenar as informac¸o˜ es do pixel vis´ıvel em uma matriz. Algoritmo 5.3.5. para aumentar sua eficiˆencia esta abordagem utiliza-se de listas ordenadas para proporcionar coerˆencia ao longo da scan-line. No entanto o princ´ıpio do m´etodo e´ o mesmo. contendo as informac¸o˜ es dos pixels vis´ıveis. Analisando com calma. Sua id´eia b´asica e´ ordenar todas as arestas do pol´ıgono de forma crescente do valor de y e partir da´ı determinar o intervalo de x que e´ interceptado pela scan-line. o scan-line (Algoritmo 5. por isso a` s vezes faz-se alguns autores preferem cham´a-las de plano de varredura. considerando que a origem desta e´ o olho da cena (ou a cˆamera). 1984]. o scan-line utiliza apenas de uma linha desta matriz.

raios de luz s˜ao trac¸ados do observador para o fundo da cena. o que exige uma quantidade de mem´oria e um processamento muito grande. Caso uma superf´ıcie seja transparente o raio vai atravess´a-la e interceptar outra face. 2000]. 5. o m´etodo ray-casting vai somando a contribuic¸a˜ o 52 . Uma vez que se fosse considerado a semelhanc¸a de vizinhos na vertical poderia utilizar algumas heur´ısticas para prever se a fatia vizinha e´ vis´ıvel ou n˜ao. Utiliza-se o raycasting para determinar o local de intersec¸a˜ o mais pr´oximo para os raios que passam por cada pixel e o octree para refinar (otimizar) o processo de detecc¸a˜ o das a´ reas vis´ıveis da cena. verificando o que cada pixel da tela consegue enxergar. 2000]. como Catmull.5: Objetivo do algoritmo scan-line (retorna o pixel que for interceptado primeiro).3. este m´etodo explora a coerˆencia entre os pixels localizados ao longo de uma linha de varredura e permite a inclus˜ao anti-aliasing. Figura 5. Por outro lado. Al´em de pintar cada pixel uma u´ nica vez (Figura 5. n˜ao considera a coerˆencia entre as linhas de varredura.5).o espac¸o de mem´oria utilizado e´ menor. Alguns pesquisadores. por´em este processo pode gerar um n´umero muito grande de pol´ıgonos. ou seja na vertical. Binn e Whitted propuseram alguns m´etodos para solucionar este problema [Hill. Desde ent˜ao muitas sugest˜oes foram apresentadas e em geral para determinar a visibilidade de superf´ıcies curvas utiliza-se os m´etodos octree e ray-casting [Hill. ou a` s vezes pol´ıgonos inteiros com a utilizac¸a˜ o de apenas uma scan-line.5 Visibilidade de Superf´ıcies Curvas Para detectar as partes vis´ıveis de uma superf´ıcie curva pode-se convertˆe-la em uma sequˆencia de pol´ıgonos e determinar quais destes s˜ao vis´ıveis. se isto fosse considerado poderia eliminar partes. Ray-Catsting .

Al´em disso. denominados octantes [Hearn e Baker. E com o alto desempenho dos dispositivos gr´aficos modernos o tempo de processamento gasto para remover estes pontos e´ praticamente desprez´ıvel. em cenas complexas e com muitos objetos a reduc¸a˜ o nos pontos a serem renderizados e´ significativa. Desta forma. 1986]. 5. Octree . 53 . principalmente no que diz respeito ao realismo da cena. otimizando o processo computacional para reproduzir cenas tridimensionais com alto grau de realismo.de cada uma destas superf´ıcie que a linha de luz atinge.4 Conclus˜ao Detectar e remover os pixels dos objetos que encontram-se fora do alcance dos raios de vis˜ao do observador e´ parte fundamental do processo de visualizac¸a˜ o de s´olidos.representac¸a˜ o hier´arquica baseada na decomposic¸a˜ o recursiva do espac¸o tridimensional em cubos. pois evita que um objeto que localiza-se mais ao fundo da cena aparec¸a na frente de outro que est´a localizado a uma distˆancia menor do visualizador. este m´etodo e´ capaz de tratar transparˆencia e iluminac¸a˜ o eficientemente.

principalmente aquelas onde os objetos pertencentes ao cen´ario s˜ao grandes e aparecem em grande n´umero na cena. uma e´ recortar as arestas que contornam o objeto e depois aplicar a t´ecnica de preenchimento e a outra e´ rasterizar toda a cena e verificar a validade de cada pixel. No processo de realizac¸a˜ o deste trabalho. No entanto. um complementa e depende do outro. Esta t´ecnica e´ importante para reduzir e esforc¸o computacional envolvido na gerac¸a˜ o de cenas. constatou-se que a grande maioria das literaturas tratam a a´ rea vis´ıvel como um pol´ıgono retangular. Este cap´ıtulo apresenta os resultados obtidos atrav´es da junc¸a˜ o de algumas t´ecnicas de visualizac¸a˜ o. Outra caracter´ıstica que destacou-se durante a an´alise deste componente do processo de visualizac¸a˜ o e´ o formato do viewport.1 Clipping Circular O cap´ıtulo trˆes apresentou e discutiu os principais conceitos e abordagens de clipping aplicado ao pipeline de visualizac¸a˜ o gr´afica. estes conceitos n˜ao s˜ao aplicados isoladamente. h´a duas linhas de racioc´ınio para efetuar esta operac¸a˜ o.Cap´ıtulo 6 Montando um Pipeline de Visualizac¸a˜ o Gr´afica 6. S´o para reforc¸ar a id´eia b´asica desta t´ecnica.1 Introduc¸a˜ o Os estudos realizados durante este projeto mostraram que e´ importante analisar separadamente os conceitos de cada parte do pipeline de visualizac¸a˜ o gr´afica e entender a fundo o funcionamento de cada uma. algumas 54 . 6.1. Assim. este cap´ıtulo apresenta os resultados de algoritmos que apresentam visualmente os efeitos das t´ecnicas de clipping circular e remoc¸a˜ o de superf´ıcies escondidas em uma cena composta por alguns pol´ıgonos sobrepostos. As raz˜oes que levaram a` escolha destas t´ecnicas tamb´em s˜ao expostas e justificadas. Na pr´atica. Para concluir. o clipping tem por finalidade recortar as linhas e superf´ıcies de uma cena que localizam-se fora da a´ rea vis´ıvel (viewport).

Ap´os an´alise de alguns algoritmos. decidiu-se que a forma mais eficiente para o recorte de linhas e´ o c´alculo direto da intersec¸a˜ o. 1986] e outros. 1990]. e poucas citam o uso de uma circunferˆencia como janela de clipping.. Para isso. O recorte de linha utiliza-se das equac¸o˜ es da reta e da circunferˆencia [da Silva e dos Reis. para simular a vis˜ao interna a uma art´eria. 1996] para definir os segmentos de reta que s˜ao vis´ıveis e quais n˜ao s˜ao. 55 . Para obter o algoritmo. pois assim efetua apenas uma iterac¸a˜ o.1. foi proposto o desenvolvimento de um algoritmo que fosse capaz de recortar linhas e superf´ıcies utilizando uma circunferˆencia como a´ rea vis´ıvel. de uma mira de uma arma em um jogo de guerra ou ainda na a´ rea m´edica. Liang-Barsky [Hearn e Baker. o primeiro passo foi determinar qual abordagem utilizar. tais como em simulac¸a˜ o de uma luneta. Considerando que uma janela de visualizac¸a˜ o circular (ou el´ıptica) pode ser aplicada em v´arias situac¸o˜ es.2 Descric¸a˜ o do Algoritmo O algoritmo de recorte utilizando janela de visualizac¸a˜ o circular foi desenvolvido em duas fases. por´em n˜ao apresenta o algoritmo para esta soluc¸a˜ o.1. a primeira para recorte de linhas e a segunda para recorte de superf´ıcies.1.3 Recorte de Linhas Para determinar a porc¸a˜ o vis´ıvel de uma linha atrav´es de uma a´ rea circular utiliza-se a Equac¸a˜ o 6. 6. 6. torna-se necess´ario determinar uma formulac¸a˜ o matem´atica para o problema. como CohenSutherland [Foley et al.consideram como um pol´ıgono irregular.

x2 e y2 s˜ao as coordenadas dos pontos p1 e p2 .1 apresenta a modelagem geom´etrica para uma janela de clipping circular. ou seja.a = −2 × xc b = −2 × yc c = x2c + yc2 − r2 p = a × (x2 − x1 )2 − 2 × (−x1 × y2 + x2 × y1 ) ×(y1 − y2 ) − b × (x2 − x1 ) × (y1 − y2 ) q = (−x1 × y2 + x2 × y1 )2 + c(x2 − x1 )2 ∆ = p2 − 4 × ((x2 − x1 )2 + (y1 − y2 )2 ) × q √ −p + ∆ xi 1 = 2 × ((x2 − x1 )2 + (y1 − y2 )2 ) (6. A Figura 6. os dados de entrada s˜ao: (a) os pontos finais da linha a ser desenhada. ∆ e´ o discriminante da equac¸a˜ o. 1996]. o valor de ∆ e´ negativo. emprega-se a Equac¸a˜ o 6. y1 . Ap´os determin´a-las. Desta forma. Considerando a formulac¸a˜ o matem´atica. respectivamente. (b) o centro da janela e (c) o raio da janela de visualizac¸a˜ o. efetua o c´alculo das coordenadas de cada ponto de intersec¸a˜ o.1 para encontrar os pontos na extremidade vis´ıvel da linha. p e q s˜ao artif´ıcios matem´aticos para reduc¸a˜ o da equac¸a˜ o total. Nesta. Caso a linha n˜ao intercepte a circunferˆencia. Observa-se que as equac¸o˜ es da circunferˆencia e da reta formam a base dos c´alculos [da Silva e dos Reis.1) √ −p − ∆ xi 2 = 2 × ((x2 − x1 )2 + (y1 − y2 )2 ) yi1 = (−x1 × y2 + x2 × y1 ) − xi1 × (y1 − y2 ) x2 − x1 yi2 = (−x1 × y2 + x2 × y1 ) − xi2 × (y1 − y2 ) x2 − x1 onde: x1 . xc e yc s˜ao as coordenadas do centro da circunferˆencia e r o raio desta. (xi1 . O algoritmo aqui apresentado segue a id´eia do algoritmo de Cohen e Sutherland 56 . Com estes dados. os segmentos de linha n˜ao vis´ıveis s˜ao mostrados em tom de cinza e o segmento vis´ıvel na cor preta. yi1 ) e (xi2 . esteja totalmente fora da a´ rea vis´ıvel. yi2 ) os pontos de intersec¸a˜ o. encontrando-os com uma u´ nica iterac¸a˜ o. foi estabelecido: a equac¸a˜ o da reta que passa pelos dois pontos fornecidos e a equac¸a˜ o da circunferˆencia que contorna a a´ rea vis´ıvel.

Figura 6.1.2 apresenta o resultado da execuc¸a˜ o do algoritmo da subdivis˜ao para desenhar algumas linhas. A Figura 6. ap´os descartar a possibilidade de que a linha e´ totalmente invis´ıvel.1: Modelo geom´etrico de uma janela de clipping circular. substitui a equac¸a˜ o da reta na equac¸a˜ o da circunferˆencia. a mesma e´ dividida fazendo uso das coordenadas que limitam a janela de visualizac¸a˜ o. utilizando uma u´ nica iterac¸a˜ o.2: Imagem gerada pela execuc¸a˜ o do algoritmo de Sutherland. yc ) e raio igual a r. 1985].Figura 6. para obter os pontos de intersec¸a˜ o. Cohen e Sutherland. 6. [Rogers. para deix´a-la apenas em func¸a˜ o de x e encontrar o valor de ∆. a qual possui centro no ponto de coordenadas (xc . a linha limitada pe57 . Neste. conhecido tamb´em como algoritmo de subdivis˜ao de linha.1 monta a equac¸a˜ o da reta que passa pelos pontos p1 e p2 . a equac¸a˜ o da circunferˆencia que contorna a janela de visualizac¸a˜ o. depois.4 Encontrando os Pontos de Intersec¸a˜ o O Algoritmo 6. Se ∆ for negativo.

y1 ). (xi2 . yi1 ). pois neste caso a reta que passa por eles n˜ao intercepta a circunferˆencia em nenhum ponto. (yi2 .los pontos p1 e p2 e´ totalmente invis´ıvel. o ponto (xc . yi1 ) e (xi2 . as coordenadas dos pontos de intersec¸a˜ o s˜ao calculadas e armazenadas nos pontos (xi1 . centro da circunferˆencia e o raio r. yi2 ). Sa´ıda: Os pontos (xi1 . Algoritmo 6. (x2 . yi2 ) 58 . yi2 ). (xi2 . yc ). (xi1 .1 Encontra Cruzamentos Entrada: Os pontos (x1 . y2 ) (que definem a linha). xi1 ). (yi1 . de intersec¸a˜ o. xi2 ) 27: fim se 28: retorne f lag. Caso contr´ario. yi1 ). 1: a ← −2 × xc 2: b ← −2 × yc 3: c ← x2c + yc2 − r2 4: se (x1 = x2 ) ent˜ao 5: temp1 ← y1 − y2 6: temp2 ← x2 − x1 7: sen˜ao 8: temp1 ← x2 − x1 9: temp2 ← y1 − y2 10: fim se 11: temp3 ← −x1 × y2 + x2 × y1 12: temp4 ← temp21 + temp22 13: temp5 ← a × temp21 − 2 × temp3 × temp2 − b × temp1 × temp2 14: temp6 ← temp23 + c × temp21 15: ∆ ← temp25 − 4 × temp4 × temp6 16: se ∆ < 0 ent˜ao 17: f lag ← −1 18: retorne f lag 19: fim se 20: f lag = 0 √ 21: xi1 ← (−temp5 + 23: yi1 ← (temp3 − xi1 × temp2 )/temp1 24: yi2 ← (temp3 − xi2 × temp2 )/temp1 25: se (x1 = x2 ) ent˜ao ∆)/(2 × temp4 ) √ 22: xi2 ← (−temp5 − ∆)/(2 × temp4 ) 26: retorne f lag.

6. deve-se fazer a plotagem.3: Imagem gerada pela execuc¸a˜ o do Algoritmo 6.5 Desenhando a linha Ap´os encontrar os pontos de intersec¸a˜ o. como observa-se na Figura 6. Isso deve ser feito porque nem sempre a linha que se deseja desenhar e´ limitada pelos pontos de intersec¸a˜ o.4: Imagem onde uma intersec¸a˜ o e´ inv´alida 59 . caso exista (Figura 6. e´ importante verificar antes. se estes s˜ao realmente consistentes.3).4.1.2 Figura 6. Por´em.2 valida os pontos e desenha a parte vis´ıvel da linha. Figura 6. O Algoritmo 6.

yi2 ) utilizando o Algoritmo 6. yi2 ) ← p2 11: fim se 12: 13: fim se 14: Desenhe a linha definida por (xi1 . yi2 ) ← p1 8: fim se 9: se (distancia(p2 .Algoritmo 6.3 //tolerˆancia para exceder a a´ rea vis´ıvel 3: para i de 1 at´e |V | fac¸a 4: 5: se distancia(c.2 Desenha Linha Entrada: Os pontos p1 = (x1 . Para o clipping de superf´ıcies a abordagem escolhida foi outra. c) < r) e (distancia(p2 . yi1 ) e (xi2 . yc ) e o raio r 1: se (distancia(p1 .6 Recorte de Superf´ıcies Para o clipping de linhas.1 para encontrar as ra´ızes do novo sistema quadr´atico. yi1 ) e (xi2 .1 6: se f lag = 0 ent˜ao se (distancia(p1 . y1 ) e p2 = (x2 .1. c)) ent˜ao 10: (xi2 . o centro c = (xc . yi2 ) ← (x2 . Algoritmo 6. yi1 ). O algoritmo de recorte de superf´ıcie para a´ rea de visualizac¸a˜ o circular resultante deste trabalho pode ser visualizado no Algoritmo 6. chegou-se a` conclus˜ao de que e´ mais vi´avel rasterizar o objeto antes recort´a-lo. c) < distancia((xi1 . Isto deve ser feito para permitir a verificac¸a˜ o direta do estado de cada ponto da superf´ıcie a ser desenhada.3. y1 ) 3: (xi2 . Para isto. yc ) e o raio r. yi1 ) ← (x1 . o centro c = (xc . y2 ). Ap´os a an´alise dos algoritmos j´a existentes. yi2 ). segue-se os passos apresentados pela Equac¸a˜ o 6. y2 ) 4: sen˜ao 5: Encontre (xi1 . Sa´ıda: Os pontos v´alidos para cena.3 Clipping de Superf´ıcie Entrada: A superf´ıcie S. c) < r) ent˜ao 2: (xi1 . c) < distancia((xi2 . yi2 ) 15: fim se 6. V [i]y ) 6: fim se 7: fim para 60 . a conclus˜ao tirada e´ que a forma mais eficiente de fazˆe-lo e´ encontrando os pontos onde a reta intercepta a circunferˆencia de visualizac¸a˜ o e desenhar a semi-reta que os liga. 1: V ← raster(S) //o vetor V recebe os pontos resultantes da rasterizac¸a˜ o de S 2: tolerancia ← 0. c)) ent˜ao 7: (xi2 . V[i]) ¡ r + tolerancia ent˜ao desenha(V [i]x .

O Algoritmo 6.7 Algoritmo z-Buffer O u´ ltimo est´agio do pipeline de visualizac¸a˜ o gr´afica abordado por este trabalho e´ a detecc¸a˜ o e remoc¸a˜ o de superf´ıcies escondidas. 6.5 apresenta o resultado da execuc¸a˜ o do mesmo. uma vez que este e´ muito utilizado pelos dispositivos e pacotes gr´aficos. considerando um retˆangulo como a´ rea de entrada. depth-buffer e scan-line foi escolhido o algoritmo de z-buffer (desenvolvido utilizando o m´etodo de depth-buffer).2 Junc¸a˜ o dos Algoritmos Para demonstrar visualmente o funcionamento do pipeline de visualizac¸a˜ o gr´afica abordado por este trabalho optou-se por desenvolver um pseudo-prot´otipo que mostra passo a passo como e´ feito o clipping e a remoc¸a˜ o das superf´ıcies (ou pixels) que encontram-se fora da a´ rea vis´ıvel. no entanto. Este processo e´ respons´avel por dar mais realismo a` cena e tamb´em por melhorar o desempenho durante a renderizac¸a˜ o. Ap´os analisar v´arios m´etodos para determinar visibilidade de superf´ıcies. simplificando o algoritmo e explorando a capacidade dos dispositivos de v´ıdeo atuais. por motivos j´a exaustivamente discutidos durante este texto. A Figura 6.3 e´ simples e eficiente para o clipping circular de qualquer superf´ıcie. tais como BSP-Tree. 61 . H´a v´arias abordagens que tratam este problema.5: Recorte de Superf´ıcie 6. a t´ecnica escolhida e´ a de trabalhar com objetos rasterizados. faz com que seja de grande utilidade para ser implementado no pipeline de visualizac¸a˜ o gr´afica. Figura 6. Isto.1. Esta escolha baseou-se principalmente na usabilidade deste procedimento. como o pacote OpenGL.

por exemplo.Este pseudo-prot´otipo foi feito utilizando C/C++ e comandos b´asicos de OpenGL. para tornar os pol´ıgonos transl´ucidos e permitir a visualizac¸a˜ o da eliminac¸a˜ o dos pixels encobertos pelos demais pol´ıgonos. Em (a) aparece a cena inicial. os pol´ıgonos azul e verde. Para permitir a visualizac¸a˜ o atrav´es dos pol´ıgonos aplicou-se um fator alpha com cinquenta por cento de transparˆencia. pois se o algoritmo de z-buffer for executado antes do de recorte. Cada superf´ıcie est´a armazenada em um arquivo que e´ lido cada vez que o pol´ıgono e´ desenhado no ambiente virtual. encontram-se na mesma linha de vis˜ao.3 Os Resultados A Figura 6. Outro detalhe importante e´ que a ordem do pipeline de visualizac¸a˜ o gr´afica deve ser respeitada para que a cena seja exibida com menor tempo de processamento. n˜ao sendo necess´ario a plotagem dos mesmos antes da verificac¸a˜ o. A soluc¸a˜ o para eliminar estas eventuais falhas que aparecem entre o contorno de visualizac¸a˜ o e os novos pol´ıgonos foi permitir a plotagem de uma faixa com um pixel de largura em torno da circunferˆencia que forma o viewport. esta operac¸a˜ o e´ feita apenas para permitir uma melhor visualizac¸a˜ o de como este processo e´ realizado. pois na pr´atica a eliminac¸a˜ o e´ feita durante a leitura dos pixels. onde os pixels est˜ao armazenados na forma (x y z). Note que. A linguagem C/C++ foi escolhida por permitir manipulac¸a˜ o mais eficiente dos dispositivos gr´aficos. Por´em. Para ficar mais claro para o observador aplicou-se um alpha em alguns instantes da cena.6 apresenta seis est´agios do processo de visualizac¸a˜ o de cenas aplicando-se clipping circular e remoc¸a˜ o de superf´ıcies escondidas. 6. ou parte deles. o mesmo n˜ao acontece com o clipping e com a remoc¸a˜ o de superf´ıcies escondidas porque a intenc¸a˜ o e´ utilizar o recorte circular (algoritmo desenvolvido no decorrer deste) e mostrar como deve-se tratar o problema da visibilidade.1 Considerac¸o˜ es Importantes Durante a execuc¸a˜ o do algoritmo de recorte circular surgiu a necessidade de aplicar alguma t´ecnica na cena para suavizar os contornos dos pol´ıgonos cortados e evitar que fiquem falhas onde deveria ser preenchido. alguns pol´ıgonos. Todos os pontos utilizados para formar os pol´ıgonos da cena foram lidos de arquivos. 6.2. antes de remover os pixels n˜ao vistos. e o pacote OpenGL por ser uma ferramenta de uso livre. 62 . Utilizou-se uma janela circular como viewport para que o algoritmo de clipping desenvolvido durante este trabalho pudesse ser aplicado. muitos pixels que n˜ao deveriam mais fazer parte da cena ser˜ao comparados. As operac¸o˜ es de cˆamera e projec¸a˜ o s˜ao feitas usando diretamente as func¸o˜ es da biblioteca OpenGL espec´ıficas para este fim. os pol´ıgonos da cena s˜ao totalmente desenhados. como por exemplo. sem aplicar nenhuma das t´ecnicas citadas.

6: Resultados gerados pelo prot´otipo 63 .Figura 6.

6 .05 Azul 0.1 apresenta a posic¸a˜ o de cada pol´ıgono em relac¸a˜ o ao eixo z.Para demonstrar o funcionamento do algoritmo de z-buffer cada pol´ıgono encontra-se em uma profundidade. Ap´os a execuc¸a˜ o do algoritmo e da aplicac¸a˜ o de cinquenta por cento de transparˆencia na cena. tamb´em foi aplicado para retirar as partes dos pol´ıgonos que extravasam a janela de visualizac¸a˜ o. o pol´ıgono azul deveria estar na frente do verde. passou a ser quatorze mil novecentos e um pontos a serem desenhados. z). mantendo a mesma ordem de renderizac¸a˜ o.(e)).2 apresenta a quantidade exata de pontos de cada pol´ıgono.1: Posicionamento de cada pol´ıgono na cena. o algoritmo de clipping circular. A Tabela 6.1 Conclus˜ao Os pol´ıgonos da cena s˜ao formados por uma sequˆencia de pontos. tudo que extrapolar seu limite n˜ao dever´a ser visualizado. A Tabela 6. antes e depois de remover os pixels n˜ao vistos pelo observador.0 Verde 0.6 . (b) e (c) apresentam o processo de retirada destes pixels invis´ıveis. Al´em do algoritmo z-buffer. Os est´agios (a). Neste caso. sob a forma (x. Tornando os objetos da cena novamente opacos obt´em-se a cena real (f). O resultado obtido ap´os estes passos demonstram a eficiˆencia do algoritmo de recorte desenvolvido e apresentado no Cap´ıtulo 4. y.06 Tabela 6. A circunferˆencia branca da cena e´ a a´ rea vis´ıvel. que foi desenvolvido no decorrer do trabalho. como mostra a Figura 6. armazenados em arquivos.1. Os quatro pol´ıgonos juntos totalizam trinta e seis mil oitocentos e setenta e oito pontos. 6. fica claro que ap´os efetuar as operac¸o˜ es de clipping e remoc¸a˜ o de superf´ıcie escondida o n´umero de pontos renderizados nesta cena reduziu significativamente. com cada objeto posicionado corretamente em relac¸a˜ o a` sua profundidade. o resultado obtido costuma ser diferente do esperado. Quando a gerac¸a˜ o dos pol´ıgonos da cena n˜ao e´ feita em ordem de profundidade. de acordo com a Tabela 6. A partir dos dados apresentados pela Tabela 6.(d).2.3. Entre os est´agios (d) e (e) aplicou-se o algoritmo de z-buffer. 64 . Pol´ıgono Eixo Z Amarelo 0.02 Vermelho 0. Isto ocorre porque os pixels do pol´ıgono verde que s˜ao encobertos pelo pol´ıgono azul n˜ao foram removidos da cena. observa-se que n˜ao possuem mais pixels atr´as do pol´ıgono azul e das demais partes sobrepostas (Figura 6. A diferenc¸a de profundidade e´ muito pequena e foi considerada desta forma para demonstrar os problemas de rendering gerados quando n˜ao verifica-se a visibilidade das superf´ıcies.

51 Azul 2500 2500 1715 785 31.40 Vermelho 3876 3876 3270 606 15. utiliza-se de aceleradores gr´aficos para executar tais operac¸o˜ es. 65 .2: Tabela de resultados Tanto o c´alculo da profundidade utilizado pelo z-buffer.60 Verde 7701 7701 5266 2435 31.63 Total 36878 19728 14901 21977 59. levando em considerac¸a˜ o o tempo de desenho dos pontos que foram descartados. Assim. aliado ao aumento de realismo na cena. ou seja.60 Tabela 6. quanto o c´alculo da distˆancia de cada ponto ao centro da circunferˆencia que contorna a janela de clipping s˜ao feitos com aux´ılio do dispositivo gr´afico. conclui-se que a aplicac¸a˜ o destes e´ vi´avel a qualquer cena que tenha como objetivo representar visualmente um fato do cotidiano.Pol´ıgono Pontos Ap´os Clipping Ap´os z-Buffer Reduc¸a˜ o Reduc¸a˜ o(%) Amarelo 22801 5651 4650 18151 79.

mapeando-as para o viewport. Cada uma destas transformac¸o˜ es e´ efetuada atrav´es da multiplicac¸a˜ o das coordenadas de cada ponto do objeto por uma matriz. Esta reduz em uma unidade a dimens˜ao do objeto. mesmo ap´os serem projetadas em dispositivos de visualizac¸a˜ o bidimensionais. J´a sistemas destinados a entretenimento. A composic¸a˜ o destas. Com isso. onde quanto mais distante um objeto localiza-se do observador. no caso da computac¸a˜ o gr´afica. sem a utilizac¸a˜ o correta do mesmo. pois gera imagens semelhante ao sistema de vis˜ao humano. um s´olido pode ser considerado uma representac¸a˜ o computacional de uma entidade que encapsula atributos visuais e descric¸o˜ es geom´etricas. Faz-se esta convers˜ao atrav´es das transformac¸o˜ es geom´etricas de translac¸a˜ o. devem utilizar a projec¸a˜ o paralela. Apenas transformar a cena para o sistema de coordenadas de visualizac¸a˜ o nem sempre e´ suficiente para exib´ı-la no monitor. rapidamente e com o menor esforc¸o computacional poss´ıvel. Neste est´agio. por exemplo. A cˆamera sint´etica e´ a respons´avel por efetuar a transformac¸a˜ o entre o sistema de coordenadas global e o sistema de coordenadas de visualizac¸a˜ o. rotac¸a˜ o e escala. Portanto. tais como jogos. A escolha do tipo de projec¸a˜ o a ser usada depende de cada aplicac¸a˜ o. do sistema 3D para o 2D. os elementos geom´etricos representados na cena e as operac¸o˜ es que os transformam em imagens. pois este e´ um dispositivo 2D. Assim. a projec¸a˜ o perspectiva e´ a mais indicada. n˜ao e´ poss´ıvel transmitir a imagem desejada. cenas que mantenham a noc¸a˜ o de tridimensionalidade. muitos pontos s˜ao colocados al´em do limite do viewport 66 . Quando efetua-se este mapeamento. Os componentes b´asicos deste problema s˜ao: a imagem (tratada como um conjunto de pixels). torna-se necess´ario a transformac¸a˜ o para o sistema de coordenadas bidimensional com a aplicac¸a˜ o de t´ecnicas de projec¸a˜ o gr´afica. as coordenadas s˜ao projetadas no plano de projec¸a˜ o. reduz o tempo de processamento do sistema de cˆameras de um ambiente. E´ este sistema que permite o movimento em um palco virtual. filmes animados e realidade virtual. menor ele e´ desenhado. com o objetivo de gerar. Sistemas destinados a` engenharia e arquitetura.Cap´ıtulo 7 Conclus˜ao O problema de visualizac¸a˜ o de s´olidos resume-se a manipular elementos geom´etricos e atributos de aparˆencia dos objetos.

aprender utilizar suas func¸o˜ es e comec¸ar a modelar cenas 67 . Neste caso. o tempo de execuc¸a˜ o aumenta e comec¸a a interferir na eficiˆencia do sistema. O algoritmo de recorte de superf´ıcies obt´em resultados visuais satisfat´orios. Para amenizar este problema. utiliza-se as equac¸o˜ es da reta e da circunferˆencia para encontrar os pontos de intersec¸a˜ o entre a linha a ser desenhada e a circunferˆencia que contorna a janela de clipping. Para evitar problemas como este. o objeto mais ao fundo e que est´a encoberto por outro pode aparecer na frente. Para isto. o processamento destes n˜ao ser´a percebido pelo espectador. No processo de clipping. Durante o desenvolvimento deste trabalho. J´a no m´etodo para recorte de faces.(ou janela de visualizac¸a˜ o ou ainda janela de clipping). Por´em. se forem muitos. O u´ ltimo t´opico abordado neste trabalho tamb´em teve como um dos seus objetivos melhorar o desempenho do processo de visualizac¸a˜ o gr´afica. pois o observador n˜ao ir´a vˆe-los em seu monitor. Quando este fato ocorre. Esta comparac¸a˜ o e´ feita via dispositivos de acelerac¸a˜ o gr´afica. Esta t´ecnica chama-se clipping. foi adotada a id´eia dos principais algoritmos de remoc¸a˜ o de superf´ıcies escondidas. ficou claro que o importante na pesquisa em computac¸a˜ o gr´afica n˜ao e´ escolher um pacote gr´afico. dependendo da ordem de renderizac¸a˜ o destes. o que aumenta a velocidade de processamento. Para finalizar. Ele trabalha sobre o espac¸o da imagem e compara cada ponto da cena com todos os outros que est˜ao na mesma linha de vis˜ao. o algoritmo de z-buffer est´a entre os mais utilizados. recortando-as e depois preenchendo os novos pol´ıgonos gerados com o corte. Os que localizam-se dentro da a´ rea vis´ıvel s˜ao desenhados e os demais descartados. Para isto pode-se utilizar a extrac¸a˜ o das arestas dos pol´ıgonos. No entanto. estud´a-lo. e´ um processo um pouco lento e tem sua otimizac¸a˜ o proposta como poss´ıvel trabalho futuro. utiliza-se uma t´ecnica para remover estes pontos do ambiente virtual. Estes trˆes processos s˜ao aplicados para permitir a visualizac¸a˜ o no monitor e a reduc¸a˜ o do tempo de processamento das cenas virtuais. seu foco principal e´ aumentar o realismo dos ambientes virtuais. por´em este ainda pode ser melhorado em relac¸a˜ o ao tempo de execuc¸a˜ o. se dois corpos estiverem muito pr´oximos ou se interceptarem. funcionando para qualquer tipo de superf´ıcie. Trata-se da detecc¸a˜ o e remoc¸a˜ o das superf´ıcies ocultas da cena. No entanto. dois algoritmos para recorte utilizando-se de um viewport circular foram desenvolvidos e o algoritmo para recorte de linhas atingiu tempo de processamento semelhante aos m´etodos utilizados em janelas retangulares. os pontos dos objetos s˜ao comparados com o contorno da janela de visualizac¸a˜ o para verificar se s˜ao internos a ela ou n˜ao. pois se isto n˜ao for feito. onde comparase cada ponto dos objetos que comp˜oem a cena para determinar sua visibilidade (espac¸o da imagem). Se forem poucos os pontos. os resultados obtidos foram satisfat´orios. deve-se remover os pontos que encontram-se encobertos por outros. os objetos podem aparecer em ordem inversa. Para determinar os segmentos de reta que devem ser mostrados. por exemplo. os pontos s˜ao desenhados desnecessariamente.

para que serve. O principal e´ saber os fundamentos que est˜ao por tr´as de cada func¸a˜ o da biblioteca gr´afica e procurar entender porque cada fundamento surgiu. quais s˜ao suas vantagens e o que deve ser feito para torn´a-los mais eficientes. 68 .baseadas em entidades reais ou imagin´arias.

pode ser u´ til em aplicac¸o˜ es que visam montar uma imagem bidimensional que contenha mais informac¸o˜ es visuais do que a obtida pelas projec¸o˜ es lineares. a imagem final contida no plano de visualizac¸a˜ o e´ composta por informac¸o˜ es capturadas por mais de uma cˆamera. por exemplo. projeta-se estas e obt´em-se uma u´ nica imagem com mais detalhes em dois ou trˆes lados. Pouca gente j´a ouviu falar sobre projec¸a˜ o n˜ao-linear. O algoritmo para recorte de superf´ıcies apresentado. mostrou seus principais fundamentos e apresentou uma t´ecnica pouco trabalhada pelas literaturas. pode ser melhorado atrav´es do recorte das arestas dos pol´ıgonos que comp˜oem a cena. Dependendo da quantidade de imagens utilizadas. recort´a-las individualmente e depois preencher os novos pol´ıgonos obtidos. aplicac¸a˜ o de texturas. etc. Nesta. o clipping utilizando janelas de visualizac¸a˜ o circular. antialiasing.). As projec¸o˜ es perspectiva e paralela s˜ao projec¸o˜ es lineares. pode n˜ao ser muito realista. captura-se duas ou trˆes fotografias de um objeto. cada uma vista por um aˆ ngulo diferente. Para isto. deve-se desmembrar as arestas.Cap´ıtulo 8 Trabalhos Futuros Este trabalho abordou uma parte do pipeline de visualizac¸a˜ o gr´afica (uma vez que o pipeline completo e´ composto tamb´em por iluminac¸a˜ o. Por´em. 69 .

). (1998). New York. Projec¸o˜ es e o seu uso em Computac¸a˜ o Gr´afica. V. G. G.Referˆencias Adams. Kirkpatrick. (1996). e Toussaint. (1984). V. NY. McGraw-Hill.. M.. USA.. A. Livros T´ecnicos e Cient´ıficos. (1998). S. New York. New York. T. Inc. D. NY. Invisibility coherence for faster scan-line hidden surface algorithms. C. (1990). MA. VMV. van Dam. pages 231–238.. XVII Jornada de Atualizac¸a˜ o em Infirm´atica da SBC. Computer graphics: principles and practice (2nd ed. ´ da Silva. editor (1988). ACM. van Dam. Barequet. (1993). pages 95–102. e Erthal. Kass. Volume 1. A. F. (1998). J. Brunstein. D. e Hughes. R. L. A.. (2003). e Velho. N. IMPA. Boston.. F. (1994). E. Azevedo. (1989). USA. ACM. da Silva. In SCG ’89: Proceedings of the fifth annual symposium on Computational geometry. MA. D.. e Gotsman. pages 247–253. Intelligent camera control in a virtual environment. Inc. 70 . Addison-Wesley Longman Publishing Co. A. A. NY. Hierarchical z-buffer visibility. USA.. Pontif´ıcia Universidade Cat´olica do Rio de Janeiro. e Conci. In SIGGRAPH ’93: Proceedings of the 20th annual conference on Computer graphics and interactive techniques... Phillips.. USA. e dos Reis. USA.. Banff.. Feiner. Greene. editor. G. Upper Saddle River. Alberta. J. Canada. J. Minidicion´ario Silveira Bueno. J.. S.. New York. pages 190–199. pages 87–94. Addison-Wesley Longman Publishing Co. Crocker. G. Geometria Anal´ıtica. L. A. Mathematical elements for computer graphics. F. Computac¸a˜ o Gr´afica Teoria e Pr´atica. J. In Ertl. L. (1986). M. Inc. Editora Campus. e Feiner. e Zeltzer.. D. M. Battaiola. Gomes. Determining sector visibility of a polygon. In Proceedings of Graphics Interface ’94.. (1994). USA. Tratamento eficiente de visibilidade atrav´es de Arvores de volumes envolventes. K. G.. Drucker. (2002). Bhattacharya. K. Computac¸a˜ o Gr´afica.. Introduction to Computer Graphics. G. Foley. L. Bueno.. Boston. NJ. Hughes. USA. Animating a camera for viewing a planar polygon. H. ACM. B. e Miller. S. Foley. In SIGGRAPH ’84: Proceedings of the 11th annual conference on Computer graphics and interactive techniques. Master’s thesis. NY. D. S. J. Aka GmbH.

Greiner, G. e Hormann, K. (1998). Efficient clipping of arbitrary polygons. ACM Trans. Graph.,
17(2):71–83.
Han, X. (2004). The local z buffer algorithms in real time rendering of large complex scenes.
PhD thesis, Iowa City, IA, USA. Supervisor-James Cremer.
Harrington, S. (1987). Computer graphics: a programming approach, 2nd ed. McGraw-Hill,
Inc., New York, NY, USA.
Hearn, D. e Baker, M. P. (1986). Computer graphics. Prentice-Hall, Inc., Upper Saddle River,
NJ, USA.
Hill, F. J. (2000). Computer Graphics Using OpenGL. Prentice Hall PTR, Upper Saddle River,
NJ, USA.
Kolb, C., Mitchell, D., e Hanrahan, P. (1995). A realistic camera model for computer graphics.
In SIGGRAPH ’95: Proceedings of the 22nd annual conference on Computer graphics and
interactive techniques, pages 317–324, New York, NY, USA. ACM.
Kumar, S. e Manocha, D. (1996). Hierarchical back-face culling. Technical report, Chapel Hill,
NC, USA.
Lam, H., Rensink, R. A., e Munzner, T. (2006). Effects of 2d geometric transformations on
visual memory. In APGV ’06: Proceedings of the 3rd symposium on Applied perception in
graphics and visualization, pages 119–126, New York, NY, USA. ACM.
Marquis-Bolduc, M., Deschˆenes, F., e Pan, W. (2008). Combining apparent motion and perspective as visual cues for content-based camera motion indexing. Pattern Recogn., 41(2):445–
457.
Novins, K. L., Sillion, F. X., e Greenberg, D. P. (1990). An efficient method for volume rendering using perspective projection. In VVS ’90: Proceedings of the 1990 workshop on Volume
visualization, pages 95–102, New York, NY, USA. ACM.
Ogata, M., Ohkami, T., Lauer, H. C., e Pfister, H. (1998). A real-time volume rendering architecture using an adaptive resampling scheme for parallel and perspective projections. In VVS
’98: Proceedings of the 1998 IEEE symposium on Volume visualization, pages 31–38, New
York, NY, USA. ACM.
Rogers, D. F. (1985). Procedural elements for computer graphics. McGraw-Hill, Inc., New
York, NY, USA.

71

Sechrest, S. e Greenberg, D. P. (1981). A visible polygon reconstruction algorithm. In SIGGRAPH ’81: Proceedings of the 8th annual conference on Computer graphics and interactive techniques, pages 17–27, New York, NY, USA. ACM.
Sharir, M. e Overmars, M. H. (1992). A simple output-sensitive algorithm for hidden surface
removal. ACM Trans. Graph., 11(1):1–11.
Spindler, M., Bubke, M., Germer, T., e Strothotte, T. (2006). Camera textures. In GRAPHITE
’06: Proceedings of the 4th international conference on Computer graphics and interactive
techniques in Australasia and Southeast Asia, pages 295–302, New York, NY, USA. ACM.
Sutherland, I. E. (1964). Sketch pad a man-machine graphical communication system. In DAC
’64: Proceedings of the SHARE design automation workshop, pages 6.329–6.346, New York,
NY, USA. ACM.
Sutherland, I. E. (1998). A head-mounted three dimensional display. pages 295–302.
Sutherland, I. E. e Hodgman, G. W. (1974). Reentrant polygon clipping. Commun. ACM,
17(1):32–42.
Traina, A. J. M. e de Oliveira, M. C. F. (2003). Apostila de Computac¸a˜ o Gr´afica. ICMC - USP.
Tsai, Y.-Y. e Wang, C.-M. (2007). A novel data hiding scheme for color images using a bsp
tree. J. Syst. Softw., 80(3):429–437.
Wang, G., Tsui, H.-T., e Hu, Z. (2007). Structure and motion of nonrigid object under perspective projection. Pattern Recogn. Lett., 28(4):507–515.
Ware, C. e Osborne, S. (1990). Exploration and virtual camera control in virtual three dimensional environments. In SI3D ’90: Proceedings of the 1990 symposium on Interactive 3D
graphics, pages 175–183, New York, NY, USA. ACM.
Westermann, R. e Ertl, T. (1998). Efficiently using graphics hardware in volume rendering
applications. In SIGGRAPH ’98: Proceedings of the 25th annual conference on Computer
graphics and interactive techniques, pages 169–177, New York, NY, USA. ACM.
Yang, J. C., Everett, M., Buehler, C., e McMillan, L. (2002). A real-time distributed light field
camera. In EGRW ’02: Proceedings of the 13th Eurographics workshop on Rendering, pages
77–86, Aire-la-Ville, Switzerland, Switzerland. Eurographics Association.

72

Apˆendice A
C´odigo Fonte
A.1
1
2
3
4
5
6
7
8
9
10
11


odigo Fonte do Prot´
otipo

//@@@@@@@@@@@@@@@@@@@@@@@@@@ Inserc
¸˜
ao das Bibliotecas @@@@@@@@@@@@@@@@@@@@@@@@@@@//
#include <stdio.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <windows.h>
#include <GL/GLUT.h>
#include <GL/GLU.h>
#include <GL/GL.h>
#include <GL/GLAUX.h>
#include "formasgeo.h"

12
13
14
15
16
17
18
19
20

//@@@@@@@@@@@@@@@@@@@@@@@@@@ Definic
¸˜
ao das func
¸˜
oes @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@//
void leArquivo(char *);
void Exibe(void);
float distanciaPontos(Ponto2D *, Ponto2D *);
void ClippingCircular(char *arq);
void desenhaMatriz(bool);
void zBuffer(char *);
void JanelaClipping(void);

21
22
23
24
25
26
27
28
29
30

//@@@@@@@@@@@@@@@@@ Vari´
aveis globais utilizadas pelo prot´
otipo @@@@@@@@@@@@@@@@@//
// Matriz que conter´
a a profundidade de cada pixel para auxiliar na execuc
¸˜
ao
// do algoritmo de z-buffer
GLfloat zBufferMat[500][500];
// Matriz que conter´
a a cor de cada pixel vis´
ıvel na cena
Ponto3D *corMat[500][500];
// Matriz auxiliar que conter´
a a cor de cada pixel vis´
ıvel na cena. Esta matriz
// ´
e utilizada para limpar redesenha a tela quando necess´
ario
Ponto3D *corMataux[500][500];

31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

/*
¸˜
ao principal do programa
* Func
*/
void main(int argc, char *argv[]){
// Inicializa a janela
glutInit(&argc, argv);
// Define o modo de exibic
¸˜
ao da janela
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
// Define o tamanho da janela
glutInitWindowSize(500,500);
// Define a posic
¸˜
ao inicial da janela
glutInitWindowPosition(150,100);
// Cria a janela com o t´
ıtulo passado no parˆ
ametro
glutCreateWindow("PFC - Alex Ara´
ujo");
// Exibe o conte´
udo da janela
glutDisplayFunc(Exibe);
// Define a cor e a transparˆ
encia do fundo da janela
glClearColor(1.0, 1.0, 1.0, 0.0);

73

// Desenha a matriz final contendo os pontos v´ alidos desenhaMatriz(true).0). glBegin(GL_POINTS). 0. 0. glBlendFunc(GL_SRC_ALPHA. j < 250.txt").5). j++){ 74 . float xaux.5).5). Ponto2D *centro = new Ponto2D().0. // Chama a func ¸˜ ao com o algoritmo de z-buffer para remover os pontos // encobertos da cena zBuffer("quadrado.txt"). // Chama a func ¸˜ ao que faz o clipping circular da cena ClippingCircular("quadrado. yaux. zBuffer("retangulo. // Substitui a matriz corrente pela matriz Identidade (4x4) glLoadIdentity(). leArquivo("quadrado. leArquivo("retangulo. 1. ClippingCircular("retangulo. glFlush(). glFlush().txt"). 1.txt"). 1.txt").0).0. 50 51 52 53 54 55 56 57 58 59 60 } 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 /* ¸˜ ao que chama as func ¸˜ oes que exibir˜ ao os pontos na cena * Func */ void Exibe(void){ // Ativa o OpenGL para aceitar o fator alpha. 1. // Define a espessura dos pontos a serem desenhados na janela glPointSize(1. zBuffer("losango. _sleep(100).txt").0. glColor4f(0. glFlush(). i < 250. 0. glColor4f(0. leArquivo("circulo_inverso.0. ClippingCircular("losango. 0. leArquivo("losango. ClippingCircular("circulo_inverso. // Limpa a tela glClear(GL_COLOR_BUFFER_BIT). // Define qual ´ e a forma da matriz corrente glMatrixMode(GL_PROJECTION).// Define a cor inicial dos pontos da jenela glColor3f(1.txt"). // Pausa a execuc ¸˜ ao do programa por um tempo _sleep(100). glFlush(). float raio = 0. 1.txt"). for(float i = -250. 0. 0.0. glFlush(). GL_ONE_MINUS_SRC_ALPHA). i++){ for(float j = -250. para que seja poss´ ıvel colcoar // um fator de transparˆ encia no objetos da mesma glEnable(GL_BLEND).5). 0. _sleep(100). // Desenha a janela de clipping na cor branca. // Desenha os pol´ ıgonos sem remover os pontos escondidos glColor4f(1. } 112 113 114 115 116 117 118 119 120 121 122 123 /* ¸˜ ao que desenha a janela de clipping * Func */ void JanelaClipping(){ float cont = 0.txt"). 0. zBuffer("circulo_inverso. 0. glFlush(). glColor4f(1. // Forc ¸a o refresh da janela a todo momento glutMainLoop(). glFlush(). para permitir uma melhor // visualizac ¸˜ ao do processo de remoc ¸˜ ao dos pontos ocultos JanelaClipping().600.txt").txt"). // Desenha a matriz de intensidade usada pelo algoritmo de z-buffer // neste ponto a mesma n˜ ao possui os pontos do pol´ ıgono desenhaMatriz(false).txt").

0.txt"){ corr = 0. corb. glFlush(). 0. FILE *arquivo.0). coordyponto. float corr. } 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 } glEnd(). } else if(arq == "losango.0. 0.0.0. glBegin(GL_POINTS). glEnd(). yaux = j / 250.0.&caracter). 0.003)){ glColor4f(0. 0.600.0. float raio = 0. FILE *arquivo. //inicia os pixels com a cor preta corMataux[(int)i+250][(int)j+250] = new Ponto3D(0. coordyponto.500. 75 .txt"){ corr = 1.0.&coordzponto). fscanf(arquivo.0). corb = 0. exit(1). exit(1).0). if((arquivo = fopen(arq.0. 1. float coordxponto."%f". corg. if((arquivo = fopen(arq. Ponto2D *centro = new Ponto2D().0. 0. fclose(arquivo). fscanf(arquivo. glPopMatrix().0.0. coordzponto.0).0. 1. 0. 0. corg = 1. coordzponto. coordzponto). } rewind(arquivo). if(distanciaPontos(centro. float raio = 0.0. Ponto2D *centro = new Ponto2D(). } while(caracter != ’f’). yaux)) >= (raio + 0. 145 146 147 } 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 /* ¸˜ ao que lˆ e os pontos armazenados em um arquivo recebido como parˆ ametro * Func * de plota na tela */ void leArquivo(char *arq){ char caracter. 1. } //inicia todos os pixels com profundidade -999 zBufferMat[(int)i+250][(int)j+250] = (float)-9999.0). do{ fscanf(arquivo.0). } else{ //inicia os pixels com a cor branca corMat[(int)i+250][(int)j+250] = new Ponto3D(1.xaux = i / 250.0.0. } if(arq == "retangulo. glVertex3f(coordxponto. coordyponto. //inicia os pixels com a cor branca corMataux[(int)i+250][(int)j+250] = new Ponto3D(1. glFlush(). 1."%c".&coordxponto). //inicia os pixels com a cor preta corMat[(int)i+250][(int)j+250] = new Ponto3D(0. 1."%f".&coordyponto)."r")) == NULL){ printf("Erro ao abrir arquivo!!!\n\n")."r")) == NULL){ printf("Erro ao abrir arquivo!!!\n\n"). float coordxponto. fscanf(arquivo.0. glVertex3f(xaux."%f". new Ponto2D(xaux. } 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 /* ¸˜ ao que efetua o clipping circular * Func */ void ClippingCircular(char *arq){ char caracter. yaux.

0). Ponto2D *centro = new Ponto2D().&caracter). do{ fscanf(arquivo. } while(caracter != ’f’). fscanf(arquivo.0.txt") corMat[(int)xaux][(int)yaux]->setPonto(0.&caracter). 1. 198 199 } else if(arq == "circulo_inverso. float xaux. corg = 0. float coordxponto.0.0. coordzponto). else if(arq == "circulo_inverso.corg = 0. desenhaMatriz(false)."%f". _sleep(1).0.003)){ xaux = coordxponto * 250 + 250.0. glBegin(GL_POINTS). glBegin(GL_POINTS). 0. coordyponto. } rewind(arquivo). float raio = 0. 0."r")) == NULL){ printf("Erro ao abrir arquivo!!!\n\n").0.600. coordyponto.&coordyponto).1). if(distanciaPontos(centro."%f".1.&coordzponto). fclose(arquivo).003)){ glColor4f(0.0).0). } rewind(arquivo). } } 260 glFlush()."%f". corg = 1. exit(1).&coordzponto). new Ponto2D(coordxponto. fscanf(arquivo.0."%f".0.0.0. if(distanciaPontos(centro.0. glEnd().txt"){ corr = 1. glVertex3f(coordxponto. fscanf(arquivo. glEnd().1. FILE *arquivo."%c". if(arq == "retangulo.txt") corMat[(int)xaux][(int)yaux]->setPonto(0. fscanf(arquivo. else if(arq == "quadrado. corb = 1.0.txt") corMat[(int)xaux][(int)yaux]->setPonto(1. 261 262 263 264 265 266 267 } 268 269 270 271 /* ¸˜ ao que calcula e retorna a distˆ ancia entre dois pontos * Func */ 76 . coordzponto. do{ fscanf(arquivo.0). if((arquivo = fopen(arq. new Ponto2D(coordxponto. fscanf(arquivo.&coordxponto).txt"){ corr = 0. if(zBufferMat[(int)xaux][(int)yaux] < coordzponto){ zBufferMat[(int)xaux][(int)yaux] = coordzponto.0. coordyponto)) >= (raio + 0.0.0. } glFlush(). fscanf(arquivo."%f".&coordyponto).0. corb = 0."%f". 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 } 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 /* etodo z-buffer para remover pontos encobertos * M´ */ void zBuffer(char *arq){ char caracter. } else if(arq == "quadrado.&coordxponto)."%c".txt") corMat[(int)xaux][(int)yaux]->setPonto(1. else if(arq == "losango. coordyponto)) <= (raio + 0. corb = 0. } while(caracter != ’f’). yaux = coordyponto * 250 + 250. fclose(arquivo). yaux.

g . b = corMat[(int)i+250][(int)j+250]->getZ(). g = corMat[(int)i+250][(int)j+250]->getY(). } } _sleep(1000).0). if(distanciaPontos(new Ponto2D(0. b. */ class Ponto2D{ 17 18 19 20 //***********************************************************// private: GLfloat x. for(float i = -250. float r.272 273 274 275 276 float distanciaPontos(Ponto2D *c. transp).h> #include <stdlib.h> #include <assert. 0. xaux = i / 250. else glColor4f(r . b. } 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 /* ¸˜ ao que desenha a cena baseada nas informac ¸˜ oes de cores contidas na matriz * Func * corMat */ void desenhaMatriz(bool transparencia){ float xaux.h> 9 10 //@@@@@@@@@@@@@@@@@@@@ Classe Ponto 2D @@@@@@@@@@@@@@@@@@@@@@// 11 12 13 14 15 16 /** e um ponto bidimensional. i++){ for(float j = -250. yaux = j / 250. 0). } A. j < 250. yaux.h> #include <math. formado pelas * O objeto Ponto2D ´ * coordenadas x e y. 21 22 23 //***********************************************************// public: 24 25 26 27 28 29 30 31 /* * Construtor da classe que cria um ponto na origem do * sistema de coordenadas */ Ponto2D(){ x = y = 0. glBegin(GL_POINTS). Ponto2D *p){ float d.h> #include <gl/Glu.603) glColor4f(r . new Ponto2D(i/250. 2)). return d. 0. g. } 32 77 .h //@@@@@@@@@@@@@@@@ Inserc ¸˜ ao das Bibliotecas @@@@@@@@@@@@@@@@@// #include <windows.h> #include <gl/glut. y.0).0f. i < 250. glFlush().0.h> #include <gl/Gl. if(transparencia) transp = 0. b. yaux.g .2 1 2 3 4 5 6 7 8 Biblioteca formasgeo. d = sqrt(pow(c->getX() .p->getX(). glVertex3f(xaux.0. float transp = 1. j/250)) <= 0.p->getY(). 2) + pow(c->getY() .5. j++){ r = corMat[(int)i+250][(int)j+250]->getX(). glEnd(). _sleep(100).

} 41 42 43 44 45 /* * Retorna a coordenada y do ponto */ float getY(){ return y. this->y = y. y. y) * Construtor da classe que cria um ponto na posic */ Ponto2D(GLfloat x. GLfloat y){ this->x = x. } 33 34 35 36 37 38 39 40 /* * Retorna a coordenada x do ponto */ float getX(){ return x. 81 82 //@@@@@@@@@@@@@@@@@@@@ Classe Ponto 3D @@@@@@@@@@@@@@@@@@@@@@// 83 84 85 86 87 88 /** ´ um ponto tridimensional. */ class Ponto3D{ 89 90 91 92 //***********************************************************// private: GLfloat x.} 51 52 53 54 55 56 /* * Altera o valor da coordenada y pelo valor recebido como ametro * parˆ */ void setY(GLfloat y){ this->y = y. z.} 57 58 59 60 61 62 /* * Altera as coordenadas x e y pelos valores recebidos como ametros * parˆ */ void setPonto(GLfloat x. this->y = y.} 46 47 48 49 50 /* * Altera o valor da coordenada x pelo valor recebido como ametro * parˆ */ void setX(GLfloat x){ this->x = x. } 63 64 65 66 67 68 69 70 71 /* * Altera as coordenadas x e y pelas coordenadas do ponto ametro * recebido como parˆ */ void setPonto(Ponto2D *p){ this->x = p->getX().0f. y e z * Construtor da classe que cria um ponto na posic 78 . y e z. this->y = p->getY(). GLfloat y){ this->x = x. formado pelas * O objeto Ponto3D e * coordenadas x./* ¸˜ ao (x. } 72 73 74 75 76 77 78 79 80 }. 93 94 95 //***********************************************************// public: 96 97 98 99 100 101 102 103 /* * Construtor da classe que cria um ponto na origem do * sistema de coordenadas */ Ponto3D(){ x = y = z = 0. } 104 105 106 /* ¸˜ ao x.

} 107 108 109 110 111 112 113 114 /* * Retorna a coordenada x do ponto */ float getX(){ return x. 158 79 . this->y = y.* sistema de coordenadas */ Ponto3D(GLfloat x. GLfloat y. y e z pelos valores recebidos como ametros * parˆ */ void setPonto(GLfloat x.} 142 143 144 145 146 147 /* * Altera as coordenadas x. GLfloat z){ this->x = x.} 115 116 117 118 119 /* * Retorna a coordenada y do ponto */ float getY(){ return y.} 120 121 122 123 124 /* * Retorna a coordenada z do ponto */ float getZ(){ return z.} 136 137 138 139 140 141 /* * Altera o valor da coordenada z pelo valor recebido como ametro * parˆ */ void setZ(GLfloat z){ this->z = z.} 130 131 132 133 134 135 /* * Altera o valor da coordenada y pelo valor recebido como ametro * parˆ */ void setY(GLfloat y){ this->y = y. GLfloat z){ this->x = x. this->z = z. GLfloat y. this->y = y. } 148 149 150 151 152 153 154 155 156 157 }. this->z = z.} 125 126 127 128 129 /* * Altera o valor da coordenada x pelo valor recebido como ametro * parˆ */ void setX(GLfloat x){ this->x = x.