Logo Passei Direto
Buscar

Técnicas de Renderização 3D

User badge image
Roberta

em

Ferramentas de estudo

Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Técnicas de renderização
Apresentação dos conceitos e aplicações de técnicas de renderização com abordagem das
representações de modelagem de objetos, algoritmos de rasterização, aspectos de iluminação, além de
exemplos práticos com a utilização do software TinkerCad.
Prof. Sérgio Assunção Monteiro
1. Itens iniciais
Propósito
Compreender os conceitos e as aplicações das técnicas de renderização fornecerá a base de conhecimento
para o profissional que deseja trabalhar com a área de computação gráfica, modelando objetos e empregando
algoritmos de rasterização.
Preparação
Para executar nossos exemplos, você vai precisar criar uma conta no TinkerCad. Além disso, deverá instalar a
IDE PyCharm.
Objetivos
Descrever as representações para fazer modelagem de objetos.
Listar os aspectos relacionados às técnicas de rasterização.
Caracterizar os algoritmos de iluminação.
Esquematizar um exemplo prático de manipulação de imagens utilizando o Python.
Introdução
O avanço da tecnologia computacional, tanto em termos de hardware como de algoritmos, está
proporcionando novas experiências que aumentam a sensação de realismo na interação com jogos eletrônicos
e filmes, por exemplo. Isso se deve à crescente demanda por produtos e soluções confiáveis, que estejam
disponíveis mais rapidamente e que sejam mais baratos.
Nesse cenário, a computação gráfica evoluiu ao longo dos anos, desenvolvendo técnicas para viabilizar
soluções práticas que encontram aplicações em diversas situações, como no entretenimento, nas engenharias
(civil, automobilística, aeronáutica), na medicina e em tantas outras áreas.
Conhecer os conceitos fundamentais de computação gráfica permite ao estudante ir além de ser um
consumidor de soluções e passar a propor soluções. Nesse sentido, é esperado que faça parte dessa
formação:
Compreender os tipos de modelagem geométrica.
Estudar as operações booleanas para gerar objetos geométricos.
Aprender sobre a exibição de modelos sólidos.
Conhecer os conceitos e algoritmos de iluminação.
Ao longo do texto, vamos apresentar conceitos relacionados a cada um destes pontos. Vamos explorar ainda
o aplicativo TinkerCad, para modelarmos figuras geométricas tridimensionais.
Ao final destes estudos, explicaremos, por meio de um exemplo prático, como você pode modelar e exibir um
cubo, usando OpenGL em Phyton.
• 
• 
• 
• 
• 
• 
• 
• 
1. Representações de modelagens de objetos
Tipos de representação
Representação aramada ou por wireframe
A representação aramada, também conhecida por modelo wireframe, é a representação visual de um objeto
físico tridimensional através de um conjunto de arestas que demarcam as bordas do objeto.
Isso significa que para representar um objeto através da representação aramada precisamos especificar cada
aresta do objeto físico (BUSS, 2003). Veja um exemplo de representação representada por aramada a seguir.
Exemplo da representação por aramada.
No caso, tivemos que especificar as coordenadas dos vértices, como podemos ver a seguir:
Já a relação entre as arestas é dada da seguinte forma:
Número do vértice 
1
2
3
4
5
6
7
8
Coordenadas (X,Y,Z) 
(1, -1, -1)
(1, 1, -1)
(-1, 1, -1)
(-1, -1, -1)
(1, -1, 1)
(1, 1, 1)
(-1, -1, 1)
(-1, 1, 1) 
Aresta
1 
2 
3 
4
5 
6 
7 
8 
9 
10 
11 
12
Vértice origem
1
1 
1 
2 
2 
3 
3 
4 
5 
5 
6 
7
Vértice destino
2 
3 
5 
4 
7 
4 
6 
8 
6 
7 
8 
8
Como podemos ver no exemplo, o objeto foi desenhado através de linhas que fazem a conexão local de cada
borda. Há vantagens e desvantagens em modelos representados por wireframe. Veja cada uma delas agora:
Representação por faces (winged edge)
Nessa técnica, um modelo é definido por um conjunto de polígonos que delimitam uma região fechada do
espaço. Na imagem a seguir, apresentamos um exemplo de uma subdivisão plana.
Exemplo de representação winged edge.
Podemos identificar que:
As arestas são representadas pelo conjunto A = [a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11].
Os vértices são representados pelo conjunto V = [v1, v2, v3, v4, v5, v6, v7, v8].
As faces são representadas pelo conjunto F = [f1, f2, f3, f4, f5].
Polígonos são figuras geométricas planas fechadas, formadas por segmentos de retas, denominados lados
dos polígonos. Se todos os lados forem iguais, diz-se que é um polígono regular.
As relações entre vértices, arestas e faces são apresentadas a seguir:
Representação parcial de uma winged edge.
Na imagem, temos a seguinte interpretação:
Ai representa a aresta – por exemplo, a aresta a1.
Vantagens 
Permite a
construção e a
manipulação de
sólidos e de
superfícies sólidas.
Por se tratar de uma
representação simples, ela
possui como característica ser
veloz na exibição dos
modelos.
Desvantagens 
Ambiguidade na
representação de
sólidos, o que significa
que na exibição do
modelo podemos ter
mais de uma
interpretação.
Operações como as
de determinação de
massa e de volume,
por exemplo, são
bastante difíceis com
esse modelo.
• • 
• • 
• 
• 
• 
• 
V1 e V2 representam os vértices de uma aresta – por exemplo, a aresta a2 é definida pelos vértices v2
e v3.
F1 e F2 são as faces adjacentes a uma aresta – por exemplo, as faces f2 e f5 são adjacentes à aresta
a3.
A1, A2, A3 e A4 representam as arestas adjacentes a uma determinada aresta. Por exemplo, as arestas
a8, a1, a11 e a3 são adjacentes à aresta a2.
As faces – que são polígonos – definem o interior do modelo. O objeto obtido por essa representação é
chamado de poliedro. As faces, portanto, podem ser representadas através de uma lista cujos elementos são
os vértices.
Os vértices, por sua vez, podem ser representados por suas coordenadas explícitas, ou como um ponteiro
para uma lista de vértices que armazenem detalhes sobre os vértices. A ideia é que a representação pela
estrutura de dados contenha informações sobre a topologia da figura.
Representação por quadtrees
Quadtrees são árvores usadas para armazenar dados de figuras em um espaço bidimensional (BUSS, 2003). A
principal característica dessa árvore é que cada nó tem no máximo quatro filhos. Para construir uma quadtree,
devemos realizar as seguintes etapas:
Primeira etapa
Dividir o espaço bidimensional em que a figura está em quatro caixas.
Segunda etapa
Caso uma caixa contenha um ou mais pontos, devemos criar um objeto filho, armazenando nele o
espaço bidimensional da caixa.
Terceira etapa
Caso uma caixa não contenha ponto algum, o processo de criação de nós filhos para a caixa deve ser
interrompido.
Quarta etapa
O processo deve ser repetido até que o processo de criação de nós filhos seja interrompido para
todas as caixas.
Apresentamos, a seguir, um exemplo de aplicação de uma quadtree para armazenar uma figura bidimensional.
Veja:
• 
• 
• 
Exemplo de quadtree.
Devemos perceber que a imagem da esquerda é dividida em 4 caixas. Na quadtree, essas caixas estão
representadas pela numeração que corresponde às regiões demarcadas da imagem.
No caso da região 1, não foi necessário fazer ramificações na caixa 1 da quadtree. No caso da região 3,
tivemos que ramificar a respectiva caixa na quadtree de modo a representá-la adequadamente.
Algumas das aplicações das quadtrees são:
Compressão de imagens
As informações sobre cores de um objeto são
armazenadas em um de seus filhos (quanto
maior for a profundidade da árvore, mais
detalhes serão exibidos na imagem).
Busca de nós em uma área bidimensional
Utilizada para encontrar o ponto mais próximo
de determinadas coordenadas.
Representação por octrees
Uma octree é definida como uma estrutura de dados em árvore na qual cada nó interno está associado a
exatamente oito filhos (BUSS, 2003). Elas são utilizadas para representar figuras tridimensionais através de
partições, subdividindo-as recursivamente em oito octantes. O comportamento das octrees é semelhante ao
das quadtrees.
Apresentamos, a seguir, um exemplo de uma octree:
Exemplo de octree.
No segundo nível da árvore, representamos a primeira partição em oito octantes. Em seguida,precisamos
continuar a fazer partições para cada nó até a precisão que desejarmos da representação da imagem original.
As octrees são utilizadas em diversas aplicações. Entre elas, podemos destacar:
Renderização detalhada em computação gráfica 3D.
Indexação espacial.
Busca por nós vizinhos mais próximos.
Detecção de colisão eficiente em três dimensões.
Análise de elementos finitos.
Representação por BSP
O Binary Space Partitioning (BSP) é uma representação através do particionamento de espaço binário (BUSS,
2003). Ele é implementado para subdividir recursivamente um espaço em dois conjuntos convexos usando
hiperplanos como partições.
Atenção
Uma região é dita convexa quando qualquer segmento de reta que tenha as extremidades dentro da
região tem todos os seus pontos dentro da região. 
Esse processo de subdivisão dá origem à representação de objetos dentro do espaço na forma de uma
estrutura de dados em árvore conhecida como árvore BSP. Na imagem a seguir, apresentamos um exemplo de
BSP.
Exemplo de BSP.
A estrutura de uma árvore BSP permite informações espaciais sobre os objetos em uma cena que são úteis na
renderização, em que objetos são ordenados da frente para trás em relação a uma visualização em
determinado local.
O particionamento de espaço binário é tratado como um processo genérico de dividir recursivamente uma
cena em duas até que o particionamento satisfaça um ou mais requisitos. Pode ser visto como uma
generalização de outras estruturas de árvores espaciais, como árvores octrees. As árvores BSP são usadas na
detecção de colisões em videogames 3D e robótica, no traçado de raios (ray tracing) e tratamento de cenas
espaciais complexas. Entre as desvantagens do BSP estão:
A geração de uma árvore BSP pode ser demorada.
O BSP não resolve o problema da determinação da superfície visível.
Técnicas de modelagem geométrica matemática
Efeitos naturais
1. 
2. 
3. 
4. 
5. 
1. 
2. 
O método matemático de modelagem usa uma descrição matemática e algoritmos para gerar um objeto. Ela
pode ser feita com o auxílio de programas de computador. Nesse caso, temos a chamada Engenharia
Assistida por Computador (CAE).
Trata-se de um assunto que compreende o Design Auxiliado por Computador (CAD) e a Manufatura Auxiliada
por Computador (CAM). Confira um exemplo:
Design Auxiliado por Computador.
No caso do CAD, ele é subdividido em:
Análise de elementos finitos
Desenho auxiliado por computador
Modelagem geométrica por computador
A ideia é de representar a matemática da geometria de um objeto usando software. O modelo geométrico
precisa conter a descrição da forma do objeto modelado.
As formas geométricas são descritas por superfícies. A modelagem geométrica por computador usa curvas
para controlar as superfícies do objeto, pois são fáceis de manipular. As curvas podem ser construídas através
de:
Funções analíticas.
Um conjunto de pontos.
Outras curvas e superfícies.
Existem vários softwares que permitem que a descrição matemática do objeto seja exibida como uma imagem
no monitor, como as aplicações TinkerCAD, FreeCAD, BlocksCAD, Creo, Fusion 360°, Solidworks, AutoCAD,
CATIA, OpenSCAD e Rhino.
Para criar um modelo geométrico de um objeto em uma aplicação CAD, devemos seguir estes passos:
Criar objetos geométricos básicos através de pontos, linhas e círculos.
Usar comandos para realizar operações geométricas, tais como escalonamento e rotações para
transformar esses elementos geométricos.
Combinar os vários elementos do objeto para formar o modelo geométrico final.
Algumas técnicas empregadas para modelagem geométrica, segundo BUSS (2003), estão descritas a seguir.
• 
• 
• 
• 
• 
• 
• 
• 
• 
1 Instanciamento de primitivas
A partir de um conjunto de formatos sólidos primitivos, podemos gerar uma família de sólidos que
variam em relação a alguns parâmetros. Além disso, é possível criar objetos a partir de
transformações geométricas aplicadas nas primitivas.
 
2
Combinação de objetos
Essa técnica é empregada para criar objetos a partir da combinação de objetos conhecidos, além de
aplicar as operações booleanas de união, intersecção e diferença para combinar objetos. É
importante destacar que a aplicação de operações booleanas pode gerar representações inválidas
de objetos geométricos.
 
3
Varredura
O objeto sólido é representado por uma região e por um caminho diretor, então o sólido é gerado
pela varredura dessa região através do caminho diretor.
 
4
Varredura por extrusão
O objeto é obtido pela translação (deslocamento) por determinada distância em relação a uma
superfície específica através de um vetor.
 
5
Varredura rotacional
Descrevemos a superfície do objeto por uma superfície, ou curva, que gira em torno de um eixo.
 
Scanners 3D
A modelagem automática é uma técnica sofisticada e rápida. Ela faz uso de equipamentos especiais como 
scanners 3D, nos quais é possível obter o modelo tridimensional de quase todos os objetos.
Scanners 3D
É um instrumento que permite reconstruções sem contato, mesmo de objetos de geometrias complexas.
Essas reconstruções são geradas na forma de modelos 3D poligonais. 
Essa técnica possui interessantes aplicações, como a reconstrução e otimização de componentes. No caso da
reconstrução poligonal realizada por um scanner 3D, pode ser usado como base para um procedimento
denominado engenharia reversa, que permite reconstruir o modelo CAD do componente que estamos
analisando. Isso é muito útil para refazer as especificações de um projeto original, quando existem limitações
de acesso às especificações originais. A forma mais efetiva dessa técnica é a digitalização 3D usando 
scanners ópticos 3D sem contato.
Scanners ópticos 3D
É um instrumento que permite reconstruções de qualquer objeto real. O seu resultado é entregue em
termos de modelos digitais poligonais – malhas triangulares ou nuvens de pontos – que representam a
superfície do objeto digitalizado.
Veremos a seguir algumas aplicações em que as técnicas de modelagem geométrica automática são
aplicadas.
Indústria da construção e engenharia
civil
No controle de robôs em que um scanner pode
ser usado para fornecer informações sobre o
ambiente; desenhos de pontes e instalações
industriais; e na documentação de locais
históricos.
Processo de design
Pode ser usado para aumentar a precisão de
peças e formas complexas e dar uma visão
mais realística de plantas para os engenheiros,
por exemplo.
Entretenimento
Usar scanners 3D para a indústria do
entretenimento para criar modelos 3D digitais
para filmes e videogames, por exemplo.
Análise forense
Documentar cenas de crime, refazer trajetórias
de balas, analisar padrões de manchas de
sangue, entre tantas outras aplicações.
Geometria sólida construtiva (CSG)
A geometria sólida construtiva (CSG, do inglês, constructive solid geometry) é uma das técnicas para
modelagem de sólidos por meio das seguintes operações booleanas (FERGUSON, 2001):
União
A operação união, representada pelo símbolo, é a combinação de objetos
tais que as características predominantes de ambos são mantidas.
Na imagem a seguir, apresentamos um exemplo no qual fazemos a união
de um objeto quadrado e um círculo e obtemos um novo objeto
resultante dessa combinação.
Diferença
A operação diferença, representada pelo símbolo “ - ”, é a subtração de
dois objetos, onde o primeiro objeto é o subtraendo e o segundo é o
minuendo. Nesse caso, as características do minuendo são removidas do
objeto subtraendo.
Na figura a seguir, apresentamos um exemplo no qual fazemos a
diferença de um objeto quadrado (subtraendo) e um círculo (minuendo) e
obtemos um novo objeto resultante dessa diferença.
Interseção
A operação de interseção, representada pelo símbolo , é a interseção
de objetos tais que apenas as características em comum de ambos são
mantidas.
Na imagem a seguir, apresentamos um exemplo no qual fazemos a
interseção de um objeto quadrado e um círculo e obtemos um novo
objeto resultante dessa operação.
Portanto, o princípio básico da GSC implicaa construção de um modelo complexo a partir de um conjunto de
primitivas através de uma série de operações booleanas.
Na imagem a seguir, apresentamos exemplos de primitivas.
Exemplos de sólidos primitivos.
Da esquerda para a direita, temos um cubo, uma esfera, um cilindro e um cone. Através da aplicação das
operações booleanas para esses sólidos primitivos, podemos obter novas figuras geométricas complexas.
Técnicas de modelagem geométrica manual
A modelagem geométrica manual é um método que representa modelos através das medidas de um modelo
real considerando a escala e visão de perspectivas.
Essa técnica tem grande dependência das habilidades do modelador, mas, ainda assim, é bastante usada para
fazer esboços. Em especial, nas etapas iniciais dos processos de criação de ferramentas, veículos e
ambientes. Inicialmente, inclusive, foi bastante usada para conceber e testar novos modelos pelas indústrias
automobilística e aeronáutica.
Os projetos desenvolvidos por essa técnica são registrados em um esboço que, por sua vez, faz a
representação gráfica das ideias do projeto. Portanto, os objetos precisam ter características geométricas
bem definidas, tais como altura, largura e profundidade, e demais características relevantes.
Um esboço deve:
Ser compreensível
Ser simples
Manter as relações de proporcionalidade entre as dimensões
Em projetos de desenho técnico, por exemplo, a representação gráfica do desenho em si deve ser elaborada
em conformidade com as recomendações das normas internacionais. No Brasil, há normas específicas
editadas pela Associação Brasileira de Normas Técnicas (ABNT), sendo as normas a seguir consideradas as
principais:
NBR 8403/84 – Aplicações de linhas e tipos de largura.
NBR 10068/87 – Folha de desenho – leiaute e dimensões
NBR 10126/87 – Cotagem em desenho técnico
NBR 6492/94 – Representações de projetos de Arquitetura
NBR 8196/99 – Emprego de escalas
NBR 13142/99 – Dobramento de cópia
Essas normas servem para padronizar a elaboração de desenhos e, desse modo, facilitar o entendimento dos
envolvidos no projeto.
Exploração de operações e exemplos com TinkerCard (Free
on-line)
Agora, vamos demonstrar a aplicação das operações booleanas para geometria de sólidos. Para isso, vamos
utilizar o TinkerCad para criar projetos. Para conseguir executar os exemplos que vamos apresentar, é
necessário criar uma conta gratuita no TinkerCad. Basta acessar o site do TinkerCad e abrir uma conta. Feito
isso, agora vamos criar nosso projeto.
Primeiro passo
Na tela inicial, clique no botão “Criar novo design” para abrir a tela de criação
de projetos.
• 
• 
• 
• 
• 
• 
• 
• 
• 
Segundo passo
Na tela de criação de projetos, a parte apontada por “1” é chamada de plano
de trabalho e a parte apontada por “2” é onde podemos selecionar objetos e
adicioná-los no plano de trabalho. Agora, selecionamos um cubo e o
adicionamos ao plano de trabalho.
Terceiro passo
Com algumas operações básicas, transformamos o cubo em um
paralelepípedo. Clicamos sobre ele para abrir a lista de configurações.
Depois, escolhemos o preenchimento do sólido por “orifício” que deixa a
figura transparente. Em seguida, configuramos altura, comprimento e largura.
Já criamos nosso primeiro projeto. A seguir, vamos apresentar exemplos de aplicação das operações
booleanas no TinkerCad. Para isso, utilizaremos um cubo e uma esfera.
Seleção dos sólidos primitivos.
Vamos começar pela união de dois sólidos.
Primeiro passo
Nosso primeiro passo é mudar a altura da esfera obtendo um objeto oval
chamado de elipsoide. Em seguida, fazemos o alinhamento do elipsoide
com o cubo.
Segundo passo
Depois, combinamos os dois sólidos.
Terceiro passo
Em seguida, fazemos a união das figuras através da opção de
agrupamento.
Quarto passo
Finalmente, obtemos a união dos dois sólidos.
Vamos apresentar, agora, como fazer a interseção entre dois sólidos.
Primeiro passo
O primeiro passo é adicionar os sólidos ao plano de trabalho. Neste caso,
colocamos um cubo e uma esfera.
Segundo passo
Em seguida, fazemos o alinhamento dos sólidos.
Terceiro passo
Feito isso, vamos combinar os sólidos.
Quarto passo
Agora, precisamos desagrupar os sólidos. Para isso, selecionamos a
figura geométrica e, no menu, clicamos na opção “desagrupar”.
Quinto passo
Em seguida, precisamos selecionar a esfera e, após isso, selecionar a
opção “orifício.
Sexto passo
Vamos selecionar novamente os sólidos e agrupá-los.
Sétimo passo
A ideia, agora, é combinar essa figura com um cubo e, depois, removê-la,
obtendo a interseção entre o cubo e a esfera. Então, o próximo passo é
adicionar um cubo ao plano de trabalho.
Oitavo passo
No próximo passo, fazemos o alinhamento entre o sólido da figura
anterior e o cubo.
Nono passo
Então, fazemos a combinação dos sólidos.
Décimo passo
Precisamos desagrupar os sólidos.
Décimo primeiro passo
Em seguida, selecionamos qualquer um dos vértices do sólido e a opção
“orifício”, para que fique transparente.
Décimo segundo passo
Novamente, selecionamos os sólidos e fazemos o agrupamento.
Décimo terceiro passo
Finalmente, temos o resultado da interseção do cubo com a esfera.
Agora vamos mostrar como fazer a diferença entre um cubo e uma esfera.
Primeiro passo
O primeiro passo é adicionar os sólidos ao plano de trabalho.
Segundo passo
Em seguida, fazemos o alinhamento dos sólidos.
Terceiro passo
Agora, fazemos a combinação dos sólidos.
Quarto passo
Devemos selecionar a esfera e a opção “orifício”, para que ela fique
transparente.
Quinto passo
Depois, precisamos selecionar ambos os objetos e agrupá-los.
Sexto passo
Finalmente, temos a diferença entre o cubo e a esfera.
Modelagem de objetos
Neste vídeo, abordaremos os elementos da modelagem de objetos e o programa TinkerCad, a partir da
abordagem de elementos como aramada, representação por faces e por quadtrees, e muito mais.
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Verificando o aprendizado
Questão 1
Uma das representações geométricas de sólidos é a aramada, também conhecida como wireframe. Essa
representação é bastante utilizada, pois é simples do ponto de vista computacional e, de fato, bastante útil na
modelagem geométrica. A respeito da representação wireframe, selecione a opção correta.
A
A estrutura de dados para armazená-la precisa lidar com os vértices, ligações entre eles e com os níveis das
cores.
B
A representação aramada utiliza informações sobre vértices e arestas para exibir sólidos.
C
Por ser simples, a estrutura de dados associada à representação wireframe também é simples, precisando
apenas armazenar informações relativas às arestas.
D
Uma das principais vantagens da representação wireframe é a forma única que ela utiliza para exibir um
sólido, evitando, assim, ambiguidades de interpretação.
E
A representação aramada só deve ser aplicada para descrever objetos sólidos.
A alternativa B está correta.
A representação de sólidos por wireframe faz uso de uma estrutura de dados que tenha informações sobre
vértices e arestas do objeto desenhado. Apesar de sua simplicidade, ela possui problemas relacionados à
ambiguidade e determinação de características físicas, tais como massa e volume.
Questão 2
Uma das representações de figuras geométricas é a representação por faces ou winged edge. Nessa
representação as faces são polígonos. A respeito da representação por faces, selecione a opção correta.
A
A estrutura de dados que trata dessa representação precisa, obrigatoriamente, representar os polígonos como
combinações de triângulos.
B
A representação por faces é a forma mais eficiente para exibir sólidos.
C
Na representação por faces é essencial que a estrutura de dados tenha informações que representem os
polígonos e a topologia deles.
D
A principal característica da estrutura de dados associada à representação por faces é de fazer uso apenas de
informações posicionais dos pontos das faces, aumentando, assim, sua eficiência computacional.
E
A representação por faces deve ser utilizadaapenas para representações tridimensionais.
A alternativa C está correta.
A representação de faces utiliza informações a respeito das ligações entre os vértices das faces da figura
sólida. Dessa forma, é essencial que a estrutura de dados tenha informações sobre os vértices e as
ligações entre eles, de modo que seja possível reconstruir os polígonos que são as faces.
2. Técnicas de rasterização
Exibição dos modelos sólidos
O projeto de modelos de geometria sólida (CSG) envolve dois seguintes aspectos (FERGUSON, 2001):
A matemática para representação das superfícies e sua especificação.
A organização do modelo (questões como a composição e as relações entre os sólidos, conforme
especificado por suas dimensões).
Além disso, ainda é necessário tratar o melhoramento da qualidade do sólido, o que, normalmente, é chamado
de refinamento. Portanto, para tratar essas questões de modelagem, precisamos entender como funcionam
os métodos gráficos interativos.
Um desses métodos é o de manipulação direta, que permite que o usuário interaja com entidades geométricas
por meio de sua representação visual na tela.
Os métodos para visualização de sólidos podem ser divididos em duas categorias, a saber:
Métodos baseados em avaliação de fronteiras
Utilizam algoritmos de visualização aplicáveis a modelos de fronteiras – chamados, normalmente, de
B-reps, que é um acrônimo para boundary representation. Para isso, eles aplicam um algoritmo de
conversão de representações CSG para obter as respectivas representações B-reps. Esse processo é
conhecido por "avaliação de fronteiras" – do inglês: boundary evaluation. Um sólido é representado
como uma coleção de elementos de superfície conectados em um modelo que compreende
componentes como faces, arestas e vértices e as conexões entre eles, juntamente com definições
geométricas, tais como superfícies, curvas e pontos, respectivamente, para esses componentes.
Métodos de visualização direta
Obtêm uma imagem de um sólido CSG usando apenas as informações que estão contidas na própria
representação. Os algoritmos de exibição direta, do inglês direct display algorithms, exibem um
modelo CSG sem convertê-lo para um modelo de representação por fronteiras que usa um conjunto
de pontos que compõem um sólido para representar seus limites, cuja representação, normalmente, é
um conjunto de faces.
Rasterização
Rasterização de retas
A rasterização é a técnica de converter uma imagem representada em um formato de gráfico vetorial em um
conjunto de pixels para saída em uma tela (BUSS, 2003). Imagens vetoriais são feitas de pontos, linhas e
curvas. Exemplos de programas para esse tipo de representação são o Adobe Illustrator, CorelDRAW e
Inkscape.
Imagens rasterizadas são formadas de pixels. Cada pixel é responsável por uma cor. As imagens
representadas por vetor não dependem da resolução da tela, enquanto imagens rasterizadas têm
dependência da resolução.
1. 
2. 
Atenção
Quando modificamos o tamanho de uma imagem rasterizada, vamos aumentar ou diminuir os pixels, o
que pode significar perda de qualidade. 
Precisamos estabelecer algumas premissas para aplicar a rasterização com linhas. Veja:
A largura de uma linha é de 1 pixel.
Cada pixel estará em apenas um dos estados: ativo ou desativado.
O sistema de coordenadas que usamos é o de pixels na tela.
Na imagem a seguir, apresentamos um exemplo de uma tela com seus respectivos pixels e com o sistema de
coordenadas em destaque.
Exemplo de pixels.
Os símbolos “+” estão no centro de cada pixel e, a cada um deles, associamos valores inteiros. O ponto a é
dado aproximadamente por a(1,6;1,2), ou seja, 1,6 na horizontal e 1,2 na vertical, e o ponto b é dado por
b(4,9;2,9).
Para fazer a rasterização, precisamos encontrar o pixel mais próximo verticalmente da linha em cada coluna
de pixels.
Na imagem a seguir, mostramos como esse processo funciona.
• 
• 
• 
Busca pelo pixel mais próximo.
Na imagem podemos observar os passos a seguir:
Passo 1
Representado por P1 – o pixel mais próximo da linha é o (2;1).
Passo 2
O pixel mais próximo da linha é o (3;2).
Passo 3
O pixel mais próximo é o (4;3).
Então, podemos ver o resultado da rasterização na imagem que se segue, com os pixels selecionados na
rasterização destacados em verde.
Resultado da rasterização.
Os principais algoritmos para rasterização de retas são:
Algoritmo de linha incremental
Algoritmo baseado no erro
Algoritmo de Bresenham
Algoritmo do ponto médio
Rasterização de polígonos
Polígonos são figuras pertencentes ao espaço bidimensional com as seguintes características:
Possuem arestas ou bordas que são segmentos de linha, definidos por dois vértices (pontos finais).
São formados por um conjunto de arestas, tal que cada vértice é compartilhado exatamente por duas
arestas.
São chamados de polígonos simples se as suas arestas não têm interseção entre si.
Veja uma comparação entre polígonos:
Polígonos simples (sem interseção das arestas)
• 
• 
• 
• 
• 
• 
• 
Polígonos não simples
A rasterização de polígonos é o processo de transformação de um polígono – ou seja, uma região plana
fechada delimitada por segmentos de retas – em um conjunto de pixels conexos. O algoritmo mais conhecido
de rasterização de polígonos é o ScanLine (BUSS, 2003), também conhecido como técnica de varredura.
Um conceito importante nesse contexto de rasterização é o de coerência espacial. No trabalho de Sutherland,
Sproull e Schumacker (1974), os autores apresentaram diversos tipos de coerências que os algoritmos de
visibilidade podem explorar. A seguir, veremos alguns exemplos.
Coerência de aresta
A visibilidade da aresta muda quando cruza outra aresta ou quando passa por uma aresta visível.
Coerência do objeto
Os objetos são separados entre si.
Coerência de face
As propriedades gráficas de uma face devem variar de forma suave, pois transições bruscas são
interpretadas como fronteira de duas faces.
Coerência de área
É usada para agrupar pixels cobertos por uma mesma face visível.
Coerência de profundidade
A profundidade da superfície em um ponto é calculada, enquanto a profundidade dos demais pontos
da superfície pode ser determinada por uma equação de diferença simples.
Coerência da linha de varredura
Uma determinada linha de varredura (scanline) e a sua linha de varredura sucessora possuem
pequena variação das propriedades geométricas.
Coerência do quadro
É usada para objetos animados, quando há pouca mudança na imagem de um quadro para outro.
Coerência de borda implícita
Se uma face entra em outra, a linha de interseção pode ser determinada a partir de dois pontos de
interseção.
O algoritmo ScanLine leva em consideração alguns desses tipos de coerência espacial e, assim, determina,
linha por linha, os pixels dentro de uma região – ou seja, faz a varredura dos pixels – com uso dos seguintes
fatos:
Os pixels das fronteiras – ou seja, das arestas – do polígono podem ser obtidos com uso dos algoritmos
de rasterização de linhas (ou retas).
Em uma linha de varredura, os pixels podem ser divididos em grupos separados em relação aos pixels
que fazem interseção com a fronteira do polígono e os que não possuem interseção.
Na mesma linha de varredura, podem existir pixels que pertencem ao interior de um polígono e os que
não pertencem.
Na próxima imagem, apresentamos um exemplo da aplicação do algoritmo de ScanLine para a rasterização de
um polígono.
Exemplo de aplicação do algoritmo ScanLine.
Como podemos perceber, a imagem rasterizada apresenta bordas serrilhadas – do inglês jagged ou stair step
pattern. Esse é um dos principais problemas encontrados nos processos de rasterização.
Preenchimento de polígonos
• 
• 
• 
Os polígonos são os elementos fundamentais para que possamos representar figuras na tela do computador.
Para preenchê-los com cores, temos alguns algoritmos que podemos utilizar. Os mais conhecidos para essa
finalidade são os algoritmos de:
Preenchimento de bordas
Do inglês boundary fill, o algoritmo de
preenchimento de borda apresentauso
limitado, pois o seu custo computacional, ou
seja, de processamento, torna-o inadequado
para tratar problemas em tempo real.
Preenchimento por varredura
Mais conhecido por algoritmo ScanLine, é o
algoritmo mais usado para preenchimento de
polígonos.
Na seção anterior, já fizemos uma introdução sobre o algoritmo ScanLine. Agora, vamos entender melhor
alguns dos conceitos que ele utiliza e um exemplo de como é o seu funcionamento.
O algoritmo ScanLine faz o preenchimento de polígonos usando linhas horizontais, chamadas de
scanlines. O objetivo desse algoritmo é preencher os pixels internos de um polígono.
A seguir, apresentamos um exemplo de funcionamento do algoritmo.
Exemplo de funcionamento do ScanLine.
Na imagem, podemos ver que a scanline é a linha horizontal que passa pelo ponto (0;7) do plano cartesiano.
Além disso, os segmentos que vão de x = 2 até x = 4 e os de x = 10 até x = 14 são dos pixels internos ao
polígono.
O processo de varredura é feito até que todo o polígono seja avaliado. Apresentamos na próxima imagem o
resultado do algoritmo.
Resultado do ScanLine.
A estrutura para esse algoritmo precisa conter as informações descritas a seguir.
Tabela da lista de arestas
Mantém o registro de todas as arestas,
armazenando suas coordenadas.
Tabela de arestas ativas
Contém todas as arestas (bordas) do polígono
que são interceptadas pela scanline atual.As
arestas são inseridas na tabela de maneira
ordenada (valor crescente de x).
Tabela de polígonos
Consiste em informações a respeito do
polígono, como cor da superfície, por exemplo.
Remoção de linhas e superfícies escondidas
A remoção de partes ocultas de imagens de objetos sólidos é um desafio da computação gráfica.
No mundo físico, os raios de luz são obstruídos por causa do material opaco desses objetos e, assim, não
conseguimos visualizar partes deles.
No caso do computador, não é feita nenhuma eliminação automática quando os objetos são projetados no
sistema de coordenadas da tela. Ao contrário disso, todas as partes dos objetos são exibidas, inclusive as que
deveriam estar ocultas. Então, para remover essas partes e criar imagens mais próximas da realidade,
devemos aplicar uma linha oculta, ou um algoritmo de superfície oculta, ao conjunto de objetos.
Atenção
O algoritmo precisa estar habilitado para operar em diferentes tipos de cena, além de ter que gerar
várias formas de saída e tratar com imagens de diferentes níveis de complexidade. 
Algoritmos que tratam da remoção de linhas e superfícies ocultas usam classificação geométrica para
distinguir as partes visíveis dos objetos daquelas que estão ocultas. A classificação geométrica localiza
objetos próximos ao observador e, portanto, são visíveis.
Os algoritmos de remoção de linhas e de superfícies ocultas utilizam várias formas de coerência para
minimizar o processamento necessário para gerar uma imagem. As diferentes formas de regularidades nas
imagens estão relacionadas aos diferentes tipos de coerência.
Buss (2003) apresenta a seguir a classificação de alguns dos algoritmos de detecção de superfícies ocultas.
Métodos de espaço de objeto
Compara várias partes de objetos. Após a
comparação, as superfícies visíveis e ocultas
são determinadas. Na representação por
wireframe, eles são usados para determinar se
uma linha é visível. Portanto, esses algoritmos
são baseados em linha, em vez de superfície.
Métodos de espaço de imagem
Determina as posições dos pixels. É usado para
localizar a superfície visível em vez de uma
linha visível. Cada ponto é detectado por sua
visibilidade. Se um ponto estiver visível, o pixel
está ativado, caso contrário, será desativado.
Alguns dos principais algoritmos usados para detecção de superfície de linha oculta são:
Algoritmo de remoção da face posterior
Algoritmo Z-Buffer
Algoritmo do Pintor
Algoritmo de linha de varredura
Algoritmo de subdivisão
Algoritmo de horizonte flutuante
Rasterização
Neste vídeo, abordaremos a exibição dos modelos sólidos e a rasterização de retas e polígonos, além do
preenchimento de polígonos.
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Verificando o aprendizado
Questão 1
• 
• 
• 
• 
• 
• 
Os algoritmos de rasterização têm como objetivo fazer a conversão de uma imagem vetorial para uma
representação por pixels. Uma das importantes características que eles exploram é a da coerência que trata
de diversos aspectos. Em relação à coerência aplicada ao contexto de computação gráfica, selecione a única
opção correta.
A
Quando uma aresta cruza com outra aresta, é necessário tratar, explicitamente, se ela será visível ou não. É
um caso de coerência de visibilidade.
B
A coerência do objeto afirma que os objetos são separados.
C
Quando a face de um objeto sólido varia de forma brusca, sabemos que a coerência de face foi contemplada.
D
Quando uma área é coberta, não é necessário guardar seus pixels, o que otimiza bastante o processo de
renderização. Trata-se de um caso de coerência de área.
E
A coerência de profundidade trata do cálculo de todos os pontos de uma superfície.
A alternativa B está correta.
A coerência do objeto trata das relações entre objetos distintos ou entre partes separadas dos mesmos
objetos.
Questão 2
Os métodos para visualização de sólidos podem ser divididos nos métodos baseados em avaliação de
fronteiras e os de visualização direta. Ambos os métodos possuem pontos fortes e fracos. Em relação a esses
métodos, selecione a opção correta.
A
Os métodos baseados em avaliação de fronteiras (B-reps) representam os sólidos através dos pontos, arestas
e superfícies.
B
Os métodos de avaliação de fronteiras, também conhecidos com B-reps, que significa representação do
espaço binário, usam uma árvore binária para representar a topologia de um sólido.
C
Os métodos de visualização direta utilizam de informações do ambiente em que o sólido está para representá-
lo com mais detalhes.
D
Os algoritmos de exibição direta fazem primeiro a conversão de uma imagem de um sólido para um modelo de
representação por fronteiras.
E
Nos métodos de avaliação de fronteiras, um sólido é representado como um conjunto de expressões
booleanas de objetos sólidos primitivos.
A alternativa A está correta.
Os métodos de avaliação de fronteiras representam os sólidos através da descrição da superfície deles
como uma estrutura de dados composta de vértices, arestas e faces.
3. Algoritmos de iluminação
Emissores
A iluminação e o sombreamento são ferramentas importantes para fazer com que as imagens gráficas
pareçam mais realistas e mais compreensíveis. Eles podem fornecer informações sobre a curvatura e a
orientação das superfícies e são importantes para tornar a tridimensionalidade aparente em uma imagem
gráfica. Modelos de iluminação em computação gráfica são baseados em uma abordagem modular. Dessa
forma, podemos especificar:
As posições e propriedades das fontes de luz.
As propriedades de superfície dos materiais.
As propriedades das luzes e os materiais interagem para criar iluminação, cor e sombreamento observados de
determinado ponto de vista. A natureza da luz emitida por uma fonte e sua interação com todos os objetos de
uma cena são definidos por um modelo de iluminação de computação gráfica.
Precisamos, agora, apresentar a classificação da emissão de luz e dos tipos de iluminação. Em relação à
emissão de luz, podemos classificar os objetos das maneiras apresentadas a seguir.
Fontes de luz própria
O sol e as lâmpadas, por exemplo.
Refletores
Objetos com cores e propriedades ao longo da
sua superfície.
Agora, em relação aos tipos de iluminação, podemos classificar as luzes das formas indicadas a seguir.
Ambiental
Em que todas as superfícies do ambiente são iluminadas da mesma forma, portanto, a posição da
câmera não é relevante.
Direcional
Onde os raios de luz são paralelos e de mesma intensidade. É uma simulação da emissão dos raios
solares. Dependendo da orientação da superfície, é possível perceber seus efeitos.
PontualOs raios de luz são emitidos em todas as direções. Nesse caso, os objetos são atingidos com
diferentes direções e intensidades. Isso significa que há uma variação da iluminação nas diversas
partes do objeto, dependendo da direção e da distância da fonte de luz.
Refletora
Aqui a emissão dos raios de luz ocorre na forma de um cone apontado para uma direção. Conforme o
raio de luz se distancia da fonte, a intensidade da luz diminui.
• 
• 
O modelo de iluminação e sombreamento para computação gráfica tridimensional mais popular é o de Phong
(BUSS, 2003). Isso ocorre por ele ser aplicável para obter diversos efeitos visuais e devido à facilidade de
implementá-lo de forma eficiente em software e hardware.
É o principal modelo de iluminação para todos os hardwares gráficos de computadores pessoais, consoles de
jogos e outros aplicativos em tempo real. Ele trata o modo como a luz é refletida nas superfícies. Nele, todas
as fontes de luz são modeladas como fontes de luz pontual.
Além disso, a luz é modelada em três componentes de cores discretas:
Vermelho
Verde
Azul
Isso significa que o modelo assume que toda luz consiste de um componente vermelho puro, um componente
verde puro e um componente azul puro. Pelo princípio de superposição, podemos calcular as intensidades de
reflexão da luz para cada fonte de luz de forma independente e para cada um dos três componentes de cor.
Princípio de superposição
Afirma que nos pontos onde ocorre a superposição, ou seja, mais de uma onda de luz é emitida, o efeito
resultante é a soma dos efeitos que seriam produzidos pelas ondas que se superpõem, caso cada uma
delas atingisse sozinha aquele ponto.
Sombreamento (shading)
É o processo de renderização que tem por objetivo calcular as cores dos objetos na cena tridimensional
(WOO; POULIN; FOURNIER, 1990). Na renderização, o nosso objetivo é reproduzir a forma, a visibilidade e a
aparência dos objetos vistos a partir de determinado ponto de vista.
Renderização
É o processamento que combina um material digitalizado, tais como imagens, vídeos ou áudio com
legendas e efeitos. Esse processo faz a transformação de um ou mais arquivos em um único arquivo,
fazendo, assim, a combinação dos diversos elementos e recursos com objetivo de melhorar a
experiência do usuário.
O sombreamento simula as cores dos objetos visíveis de determinado ponto de vista. O ponto de vista aqui
desempenha um papel importante, pois a aparência dos objetos pode mudar com o ângulo de visão.
A aparência de um objeto também depende de alguns parâmetros, tais como:
Quantidade de luz na cena
Orientação das superfícies em relação às fontes de luz
na cena
Cores dos objetos
O sombreamento se baseia em leis da Física – que descrevem a maneira como a luz interage com a matéria –
para simular a aparência de objetos de uma maneira consistente e realista. Na computação gráfica, uma
função de sombreamento é definida como uma função que produz o valor da intensidade de cada ponto no
corpo de um objeto a partir das características da fonte de luz, do objeto e da posição do observador (BUSS,
2003).
O sombreamento também é chamado de tonalização.
A ideia é calcular o nível do sombreamento dos objetos a partir de suas características e das fontes de luz.
Veja a seguir os principais modelos de sombreamento, segundo Woo, Poulin e Fournier (1990).
• 
• 
• 
Iluminação constante (flat)
Uma região inteira obtém a cor de um de seus vértices. A cor de uma linha, um triângulo ou
quadrilátero é determinada pela cor do último vértice especificado. O cálculo da reflexão da luz é feito
apenas uma vez por superfície.
Iluminação de Gouraud
Faz o cálculo da reflexão da luz para cada vértice. Desse modo, cada face é resultado do gradiente
entre os vértices. A iluminação dos outros pontos é calculada através da interpolação. O
sombreamento possui uma qualidade mais suave e seu cálculo é mais demorado do que o modelo de
iluminação constante.
Iluminação de Phong
Faz a interpolação linear dos vetores normais. Desse modo, seus efeitos são mais realistas. A
desvantagem em relação aos outros modelos é que consome mais processamento.
Um conceito importante no contexto de sombreamento é o de fotorrealismo, que trata da reprodução de
características reais para uma imagem processada.
Se o fotorrealismo é o objetivo, o sombreamento se preocupa em reproduzir a aparência de superfícies reais
com um grau de precisão que o olho humano não pode mais fazer a diferença entre olhar para uma imagem
reproduzida pelo computador e o objeto do mundo real.
Outra possibilidade é a de renderização não fotorrealística, usada para criar ou simular estilos de renderização
artística, tais como pintura a óleo, ou desenvolver estilos inteiramente novos que só podem ser explorados e
gerados com computadores.
Reflexão
É o resultado do que acontece com um feixe de luz incidente quando ele atinge uma superfície reflexiva como
vidro ou água, por exemplo. Na imagem, a seguir, apresentamos um exemplo de reflexão.
Diagrama ilustrativo de reflexão de um feixe de luz.
Onde:
Representa o ângulo de incidência. Representa o ângulo de reflexão.
É a reta normal perpendicular à superfície
refletora.
Pelas leis da reflexão, sabemos que α e ß são iguais e que fazem parte do mesmo plano os raios de luz
incidente e refletido e a reta normal.
Como já dissemos anteriormente, o modelo mais popular de iluminação é o modelo Phong. Esse modelo
permite dois tipos de reflexão.
Difusa
A luz é refletida uniformemente em todas as direções da superfície. Esse é o modo de reflexão
predominante para superfícies não brilhantes.
Especular
A luz é refletida de forma espelhada, como o que ocorre em uma superfície brilhante. A luz refletida
especularmente deixa uma superfície com seu ângulo de reflexão aproximadamente igual ao seu
ângulo de incidência. Essa é a principal característica da luz refletida em uma superfície polida. As
reflexões especulares são a razão de existirem os pontos brilhantes em superfícies curvas onde
ocorre uma reflexão especular intensa.
Além de dividir a reflexão em duas categorias, o modelo de iluminação Phong trata da iluminação como sendo
de três tipos distintos.
Especular
É a luz de uma fonte de luz pontual que será refletida de modo especular.
Difusa
É a luz de uma fonte de luz pontual que será refletida difusamente.
Ambiente
É a luz que chega igualmente de todas as direções, em vez de uma fonte de luz pontual.
Refração
Quando um raio de luz se move de um meio para outro, sua velocidade muda. Desse modo, a direção do raio
de luz também pode mudar. Essa propriedade é chamada de refração. Na imagem a seguir, apresentamos um
exemplo de refração.
Diagrama ilustrativo da refração de um feixe de luz.
O símbolo γ representa o ângulo de refração. Para calcular γ, precisamos calcular o índice de refração,
representado por η, que é dado por:
Onde:
É a velocidade da luz no vácuo que é dada,
aproximadamente, por .
É a velocidade da luz no meio em que a luz é
refratada, dada em metros por segundo.
Dado que a velocidade da luz é maior no vácuo do que em qualquer outro meio, o índice de refração sempre
será maior ou igual a 1. Agora, podemos enunciar as leis da refração.
1º lei
Os raios de luz incidente e refratado, bem como a reta normal, pertencem ao mesmo plano, ou seja,
são coplanares.
2º lei
Conhecida como Lei de Snell-Descartes, é usada para calcular o desvio angular do raio de luz
refratado, tal que a razão entre os senos dos ângulos de incidência (α) e refração (γ) é igual à razão
entre as velocidades da luz nos meios incidente e refratado, ou seja:
Aplicando algumas manipulações nessa equação, obtemos as relações válidas dadas por:
Transparência
É a propriedade física que alguns materiais possuem de permitir que a luz passe através deles com baixa
dispersão. Isso significa que objetos transparentes têm um comportamento similar ao de filtros de luz.
Exemplo
Um objeto transparente vermelho que seja iluminado por uma fonte de luz deixará passar apenas luz
vermelha,absorvendo todas as componentes de verde e azul. Então, se iluminarmos o objeto desse
exemplo diante de uma parede, sua sombra vai aparecer em vermelho. 
Podemos ver através de um objeto transparente os objetos que estão do outro lado dele. A imagem que
vemos através de um objeto transparente é semelhante à imagem que podemos ver sem ele.
Contudo, se o objeto transparente se comportar como uma lente, ele pode alterar a forma como enxergamos
os objetos através dele, como o tamanho ou a forma da imagem.
Temos ainda dois conceitos importantes nesse contexto.
Opacidade
É exatamente o oposto de transparência, o que
significa que objetos com essa propriedade não
permitem que a luz passe por eles.
Translucidez
Ocorre quando a luz pode ser vista através de
um objeto, mas com limitação dos detalhes. A
luz passa por um objeto translúcido, mas o
material espalha a luz, então não podemos ver
o objeto, apenas sua sombra.
Sombras
Uma sombra é uma região de relativa escuridão dentro de uma região iluminada, causada por um objeto que
obstrui total ou parcialmente a luz (GLASSNER, 1989).
Uma região é considerada uma sombra se houver uma superfície que obstrua a emissão da luz para região de
interesse.
Atenção
Uma sombra não é necessariamente uma região mais escura. Elas podem ser coloridas e aparecer de
diferentes maneiras em uma cena. 
Se duas fontes de luz de cores diferentes forem usadas, uma região com obstrução de apenas uma fonte de
luz por um objeto opaco ficará na sombra dessa fonte de luz, mas pode ser influenciada pela cor da segunda
fonte de luz.
Um objeto também pode atuar como um filtro. Nesse caso, a cor da região de sombra pode então depender
do espectro de comprimento de onda filtrado por esse objeto. A difração de luz através de um objeto
transparente é outra fonte possível de cor dentro de uma sombra.
O cálculo das sombras é essencial para dar qualidade a uma imagem. As sombras fornecem informações
sobre as formas, posições relativas e características da superfície dos objetos, além de indicar a localização
aproximada, a intensidade, a forma e o tamanho das fontes de luz.
Algoritmo de rastreamento de raios (ray tracing)
O algoritmo de rastreamento de raios ou, como é mais conhecido, ray tracing, mapeia os raios de luz como se
fossem lançados do olho do observador para o ambiente, a fim de realizar cálculos de superfície visível
(GLASSNER, 1989).
A ideia básica por trás do algoritmo é seguir os caminhos tomados pelos raios de luz, conforme eles viajam
das fontes de luz, até que finalmente alcancem a posição do olho do observador.
Como a maioria dos raios de luz nunca vai alcançar a posição dos olhos, o algoritmo traça os caminhos
percorridos pelos raios de luz do olho. Dessa forma, não desperdiçamos tempo traçando raios que nunca
alcancem o visualizador.
Na próxima imagem, ilustramos o funcionamento do algoritmo ray tracing.
Exemplo de ray tracing.
Podemos destacar os seguintes elementos:
Uma caixa e uma esfera representadas, respectivamente, por um retângulo e um círculo.
Uma única fonte de luz.
Uma janela de visualização.
Um visualizador.
• 
• 
• 
• 
O visualizador está olhando para a cena através da janela de visualização e nosso objetivo é renderizar a
cena. Para determinar a cor de um pixel P na janela de visualização, um raio é traçado do olho do visualizador
através do centro do pixel, e então determinamos o primeiro ponto de intersecção do raio com os objetos na
cena.
Na imagem, o raio cruzaria o retângulo e, em seguida, o círculo. Como o raio cruza o retângulo primeiro,
significa que é isso que é visto através do pixel. O ponto de intersecção no retângulo é sombreado de acordo
com um modelo de iluminação, e o resultado é o conteúdo do pixel P.
Radiosidade
É um algoritmo de iluminação global usado na renderização de gráficos tridimensionais de computador
(GLASSNER, 1989). Os algoritmos de iluminação global rastreiam a propagação da luz difusa em torno de uma
cena, geralmente resultando em sombras e reflexos mais suaves e naturais, diferentemente dos algoritmos de
iluminação direta, como é o caso do ray tracing, que tende a simular a luz refletida apenas uma vez em cada
superfície.
O objetivo de um algoritmo de radiosidade é calcular os níveis de iluminação e brilho de cada superfície em
uma cena. Ele é complementar aos métodos de ray tracing, pois os métodos de rastreamento de raio
rastreiam o transporte global de luz refletida especularmente, enquanto a radiosidade rastreia o transporte
global de luz refletida difusamente.
A radiosidade é muito melhor em cenas suavemente iluminadas com sombras de cores sutis, enquanto o
traçado de raios é melhor para renderizar sombras nítidas.
Iluminação
Neste vídeo, abordaremos as classificações dos emissores, a análise de reflexão, a refração e o ray tracing. 
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Verificando o aprendizado
Questão 1
A iluminação é um dos aspectos mais importantes na computação gráfica para obter realismo. Entre os
diversos assuntos que precisamos estudar sobre a iluminação estão a classificação em relação aos tipos de
iluminação. A respeito dos tipos de iluminação, selecione a opção correta.
A
Pode ser ambiental em que o ponto de vista da câmera influencia na captura de características do objeto sob
análise.
B
Quando a intensidade e as características do ambiente são relevantes, diz-se que o tipo de iluminação é
direcional.
C
Quando os raios luminosos são emitidos em todas as direções, diz-se que o tipo de iluminação é pontual.
D
Pode ser refletora, quando os raios de luz atingem os objetos em diferentes direções e intensidades.
E
Pode ser refratora, quando os objetos são atingidos por raios de luz emitidos de todas as direções.
A alternativa C está correta.
O tipo de iluminação pontual ocorre quando os raios luminosos são emitidos em todas as direções,
atingindo, assim, os objetos em diferentes direções e intensidades.
Questão 2
A reflexão é o resultado da emissão de um raio de luz sobre uma superfície lisa. Na figura a seguir, é
apresentado um exemplo de reflexão.
Exemplo de reflexão.
Utilizando os conceitos relacionados à reflexão e a figura, selecione a opção correta.
A
Trata-se de um exemplo de reflexão difusa, pois a superfície refletora é lisa.
B
O exemplo, claramente, mostra uma reflexão especular, uma vez que a superfície é espelhada.
C
Os raios luminosos indicados por I são chamados de raios refletores, uma vez que serão refletidos.
D
Os raios luminosos indicados por II são chamados de raios incidentes, uma vez que são resultado da
incidência na superfície refletora lisa.
E
O ângulo ß é igual a 450, pois ele é igual ao valor do ângulo α.
A alternativa E está correta.
Na reflexão, os ângulos de incidência e reflexão são iguais. No caso do exemplo da imagem, o ângulo de
incidência é representado por α e o ângulo de reflexão é representado por ß.
4. Modelar e exibir um cubo em OpenGL em Python
O Python e o OpenGL
Neste vídeo, apresentaremos o que é OpenGL, como utilizar esta biblioteca em Python, a partir da análise de
sua motivação.
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Nós podemos utilizar a linguagem de programação Python para diversas aplicações, como desenvolvimento
web, computação científica e análise de dados. Falando especificamente sobre a computação gráfica temos,
entre as muitas bibliotecas disponíveis em Python, a PyOpenGL, que permite o uso da conhecida biblioteca
OpenGL.
A OpenGL viabiliza o desenvolvimento de aplicações gráficas, tanto bidimensionais, como tridimensionais.
Então, para podermos utilizá-la no Python, precisamos da PyOpenGL. Vamos desenvolver um exemplo
completo utilizando a linguagem Python com o uso da PyOpenGL para modelar e exibir um cubo. Iremos
demonstrar como você pode:
Instalar pacotes
Importar pacotes
Entrar com os dados do conjunto de vértices do cubo
Entrar com os dados do conjunto de arestas do cubo
Fazer a modelagem do cubo
Criar a funçãode rotação do cubo
Criar a função para gerenciar a exibição do cubo
Gerenciar a execução do projeto
Vamos lá!
Instalando e utilizando os pacotes
Neste vídeo, apresentaremos os procedimentos para instalação e o uso da biblioteca pyOpenGL, abordando
seu conceito e propriedades.
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Instalando os pacotes necessários
Para desenvolver a nossa aplicação, vamos usar a IDE Pycharm. Teremos que instalar duas bibliotecas:
“pygame” e “PyOpenGL”. Para isso, devemos executar no console do PyCharm as duas linhas de comando a
seguir:
• 
• 
• 
• 
• 
• 
• 
• 
python
!pip install pygame
!pip install PyOpenGL 
Nosso próximo passo é importar essas bibliotecas.
Importar pacotes
Agora, precisamos importar os pacotes e bibliotecas que vamos utilizar ao longo do projeto. Para isso,
devemos executar o seguinte código:
python
import pygame
from pygame.locals import *
from OpenGL.GL import *
from OpenGL.GLU import * 
A OpenGL.GL é a interface de baixo nível para a biblioteca OpenGL. Já a OpenGL.GLU é um pacote que
simplifica algumas tarefas que fazemos com mais frequência em computação gráfica. Por fim, o pygame é
uma biblioteca do Python muito usada para criar jogos.
Modelando o cubo em 3D
Neste vídeo, apresentaremos os passos necessários para modelar um cubo utilizando a biblioteca pyOpenGL.
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Vértices
O cubo é definido com um objeto tridimensional com seis faces quadradas. Então, para definir as faces,
precisamos inicialmente determinar quais são os vértices do cubo. Para isso, devemos executar o seguinte
código:
python
def conjunto_vertices():
 vertices = (
 (1, -1, -1),
 (1, 1, -1),
 (-1, 1, -1),
 (-1, -1, -1),
 (1, -1, 1),
 (1, 1, 1),
 (-1, -1, 1),
 (-1, 1, 1)
 )
 return vertices 
Dessa forma, faremos uma chamada para a função “conjunto de vértices”, que vai nos retornar os vértices do
cubo.
Entrar com os dados do conjunto de arestas do cubo
Nosso próximo passo é definir as arestas. Para isso, devemos relacionar os vértices executando o seguinte
código:
python
def conjunto_arestas():
 arestas = (
 (0,1),(0,3),(0,4),
 (2,1),(2,3),(2,7),
 (6,3),(6,4),(6,7),
 (5,1),(5,4),(5,7)
 )
 return arestas 
Ou seja, acabamos de definir a função que vai retornar as arestas do cubo.
Adicionando o modelo
Finalmente chegou o momento em que vamos modelar o cubo. Para isso, vamos construir uma função a partir
dos seguintes passos:
Obter os vértices
Obter as arestas
Relacionar as arestas e os vértices
 
Podemos fazer tudo isso por meio da execução do seguinte código:
python
def modelar_cubo():
 glBegin(GL_LINES)
 vertices = conjunto_vertices()
 arestas = conjunto_arestas()
 for aresta in arestas:
 for vertice in aresta:
 glVertex3fv(vertices[vertice])
 glEnd() 
O próximo passo é criar a função que permite aplicarmos a operação de rotação no cubo.
Exibindo o cubo
Neste vídeo, apresentaremos o código de exibição do cubo na tela do computador, executando e mostrando
os resultados alcançados com o projeto.
Conteúdo interativo
Acesse a versão digital para assistir ao vídeo.
Função de rotação do cubo
Para realizar essa operação, basta utilizar as funções da PyOpenGL, conforme o seguinte código:
• 
• 
• 
python
def rotacao_do_cubo():
 glRotatef(1, 3, 1, 1)
 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) 
Em especial, usamos a função “glClear” para limpar os buffers usados para renderizar os gráficos.
Exibindo o cubo
Agora, vamos criar a função que gerencia a exibição do cubo, cujas etapas principais são:
Iniciar o pygame
Definir as dimensões da tela de exibição
Estabelecer a perspectiva na qual o cubo será exibido
Verificar se devemos ou não aplicar a operação no cubo
Conseguimos realizar estas etapas por meio da execução do código:
python
def principal(frotacionar):
 pygame.init()
 display = (800,600)
 pygame.display.set_mode(display, DOUBLEBUF|OPENGL)
 gluPerspective(45, (display[0]/display[1]), 0.1, 50.0)
 glTranslatef(0.0,0.0,-7)
 while True:
 for event in pygame.event.get():
 if event.type == pygame.QUIT:
 pygame.quit()
 quit()
 if(frotacionar):
 rotacao_do_cubo()
 desenhar_cubo()
 pygame.display.flip()
 pygame.time.wait(10) 
Agora, vamos para a última parte do projeto, que é criar a função que gerencia toda a execução do nosso
programa.
Executando o código
Aqui, fazemos a chamada para a função principal. Perceba que temos duas situações possíveis, conforme
demonstramos a seguir.
Situação 1: Não habilitar a rotação
Considere o seguinte código:
python
if __name__ == "__main__": 
 habilitar_rotacao = False
 principal(habilitar_rotacao) 
A saída é dada por uma imagem estática de um cubo, conforme a imagem a seguir:
• 
• 
• 
• 
Exibição do cubo mágico.
Situação 2: Habilitar a rotação
Considere o seguinte código:
python
if __name__ == "__main__": 
 habilitar_rotacao = True
 principal(habilitar_rotacao) 
A saída é dada por um cubo em rotação constante. A imagem é um “retrato” do cubo em rotação:
Exibição do cubo em rotação
É muito importante que você tente rodar esse exemplo para adquirir segurança. Em seguida, faça algumas
modificações e teste o programa. Assim, você vai conhecer mais profundamente como funciona o Python com
o OpenGL para trabalhar com aplicações de computação gráfica. Bons Estudos!
Verificando o aprendizado
Questão 1
Uma das bibliotecas mais tradicionais para desenvolver soluções de computação gráfica é a OpenGL. No caso
do Python, utilizamos a PyOpenGL para trabalhar com as funções da OpenGL. Nesse sentido, selecione a
opção que responde corretamente à pergunta: é uma desvantagem utilizar a PyOpenGL em relação a
OpenGL?
A
De maneira alguma, pois as funções da PytonGL são mais avançadas do que as da OpenGL.
B
De forma alguma. A PyOpenGL facilita o acesso às funções da OpenGL, além de ser mais adequada para
trabalhar no Python.
C
De nenhum modo, pois a PyOpenGL é muito simples de ser usada, pois não precisamos passar nenhum
parâmetro para suas funções.
D
Sim, é uma grande desvantagem, pois a OpenGL possui funções mais simples de serem usadas do que a
PyOpenGL.
E
Realmente, é melhor usar a OpenGL no Python, pois é uma prática comum da maioria dos desenvolvedores de
computação gráfica.
A alternativa B está correta.
Sem dúvida, é mais vantajoso utilizar a PyOpenGL do que a OpenGL para desenvolver aplicações em
Python. As funções são modeladas para facilitar a passagem de parâmetros e se integrarem facilmente ao
resto do código.
Questão 2
Em qualquer programa que utilize Python para computação gráfica, precisamos importar pacotes/bibliotecas.
Isso ocorre devido à necessidade de utilizar funções que facilitam manipular uma imagem. No caso do
exemplo que desenvolvemos, utilizamos a biblioteca “pygame”. Por que é importante o uso desta biblioteca?
A
Ela possui controles que facilitam a interação do usuário com a aplicação.
B
Pois pretendemos criar um jogo desenvolvido em Python.
C
Ela possui a função responsável pela rotação que a biblioteca OpenGL não habilita.
D
É um padrão de mercado utilizar as funções dessa biblioteca.
E
Por meio dela, podemos realizar a entrada de dados que não é possível com o OpenGL.
A alternativa A está correta.
A biblioteca pygame é utilizada pois facilita a interação do usuário com o sistema, tornando muito mais
simples o controle da tela de exibição do cubo e encerrar a aplicação corretamente, quando a tela é
fechada pelo usuário.
5. Conclusão
Considerações finais
No decorrer do conteúdo, apresentamos aspectos teóricos e práticos sobre técnicas de renderização, tais
como modelagem de objetos, algoritmos de rasterização e de iluminação,além de explorarmos a aplicação
TinkerCad para realizar operações sobre figuras geométricas tridimensionais.
Entender esses conceitos nos ajuda a avançar nos estudos sobre computação gráfica e perceber
oportunidades de aplicações e de aperfeiçoamento de algoritmos.
Podcast
Você vai saber sobre o conceito de modelagens de objetos, as operações booleanas e sua aplicações
para gerar imagens de sólidos geométricos.
Conteúdo interativo
Acesse a versão digital para ouvir o áudio.
Explore +
Acesse o site do TinkerCad, explore os recursos, tente fazer exemplos e aprenda mais sobre modelagem
geométrica de sólidos.
Referências
ANDRADE NETO, P. R.; GUEDES, A. L. P. Comparação de estruturas de dados para subdivisões planares
baseada em transições. RITA, v. 13, n. 1, p. 23-41, jul. 2006.
 
BUSS, S. R. 3-D computer graphics. A mathematical introduction with OpenGL. Cambridge: Cambridge
University Press, 2003.
 
FERGUSON, R. S. Practical algorithms for 3D computer graphics. Natick, Mass.: A K Peters, 2001.
 
GLASSNER, A. S. An introduction to ray tracing. Cambridge: Academic Press, 1989.
 
STEMKOSKI, L.; PASCALE, M.: Developing Graphics Frameworks with Python and OpenGL. Taylor & Francis,
2021.
 
SUTHERLAND, I. E.; SPROULL, R. F.; SCHUMACKER, R. A. nA characterization of ten hidden-surface
algorithms. Computing Surveys, n. 6, p. 1-55, 1974.
 
WOO, A.; POULIN, P.; FOURNIER, A. A survey of shadow algorithms. IEEE Computer Graphics and Applications,
v. 10, n. 6, p. 13-32, 2017.
	Técnicas de renderização
	1. Itens iniciais
	Propósito
	Preparação
	Objetivos
	Introdução
	1. Representações de modelagens de objetos
	Tipos de representação
	Representação aramada ou por wireframe
	Aresta
	Vértice origem
	Vértice destino
	Representação por faces (winged edge)
	Representação por quadtrees
	Primeira etapa
	Segunda etapa
	Terceira etapa
	Quarta etapa
	Compressão de imagens
	Busca de nós em uma área bidimensional
	Representação por octrees
	Representação por BSP
	Atenção
	Técnicas de modelagem geométrica matemática
	Efeitos naturais
	Instanciamento de primitivas
	Combinação de objetos
	Varredura
	Varredura por extrusão
	Varredura rotacional
	Scanners 3D
	Indústria da construção e engenharia civil
	Processo de design
	Entretenimento
	Análise forense
	Geometria sólida construtiva (CSG)
	União
	Diferença
	Interseção
	Técnicas de modelagem geométrica manual
	Exploração de operações e exemplos com TinkerCard (Free on-line)
	Primeiro passo
	Segundo passo
	Terceiro passo
	Primeiro passo
	Segundo passo
	Terceiro passo
	Quarto passo
	Primeiro passo
	Segundo passo
	Terceiro passo
	Quarto passo
	Quinto passo
	Sexto passo
	Sétimo passo
	Oitavo passo
	Nono passo
	Décimo passo
	Décimo primeiro passo
	Décimo segundo passo
	Décimo terceiro passo
	Primeiro passo
	Segundo passo
	Terceiro passo
	Quarto passo
	Quinto passo
	Sexto passo
	Modelagem de objetos
	Conteúdo interativo
	Verificando o aprendizado
	2. Técnicas de rasterização
	Exibição dos modelos sólidos
	Métodos baseados em avaliação de fronteiras
	Métodos de visualização direta
	Rasterização
	Rasterização de retas
	Atenção
	Passo 1
	Passo 2
	Passo 3
	Rasterização de polígonos
	Coerência de aresta
	Coerência do objeto
	Coerência de face
	Coerência de área
	Coerência de profundidade
	Coerência da linha de varredura
	Coerência do quadro
	Coerência de borda implícita
	Preenchimento de polígonos
	Preenchimento de bordas
	Preenchimento por varredura
	Tabela da lista de arestas
	Tabela de arestas ativas
	Tabela de polígonos
	Remoção de linhas e superfícies escondidas
	Atenção
	Métodos de espaço de objeto
	Métodos de espaço de imagem
	Rasterização
	Conteúdo interativo
	Verificando o aprendizado
	3. Algoritmos de iluminação
	Emissores
	Fontes de luz própria
	Refletores
	Ambiental
	Direcional
	Pontual
	Refletora
	Sombreamento (shading)
	Quantidade de luz na cena
	Orientação das superfícies em relação às fontes de luz na cena
	Cores dos objetos
	Iluminação constante (flat)
	Iluminação de Gouraud
	Iluminação de Phong
	Reflexão
	Difusa
	Especular
	Especular
	Difusa
	Ambiente
	Refração
	1º lei
	2º lei
	Transparência
	Exemplo
	Opacidade
	Translucidez
	Sombras
	Atenção
	Algoritmo de rastreamento de raios (ray tracing)
	Radiosidade
	Iluminação
	Conteúdo interativo
	Verificando o aprendizado
	Questão 2
	4. Modelar e exibir um cubo em OpenGL em Python
	O Python e o OpenGL
	Conteúdo interativo
	Instalando e utilizando os pacotes
	Conteúdo interativo
	Instalando os pacotes necessários
	Importar pacotes
	Modelando o cubo em 3D
	Conteúdo interativo
	Vértices
	Entrar com os dados do conjunto de arestas do cubo
	Adicionando o modelo
	Exibindo o cubo
	Conteúdo interativo
	Função de rotação do cubo
	Exibindo o cubo
	Executando o código
	Situação 1: Não habilitar a rotação
	Situação 2: Habilitar a rotação
	Verificando o aprendizado
	5. Conclusão
	Considerações finais
	Podcast
	Conteúdo interativo
	Explore +
	Referências

Mais conteúdos dessa disciplina