Buscar

Computação Gráfica

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 33 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 33 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 33 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Unidade I – Sistemas Gráficos .............................................................. 4 
Arquitetura De Placas Gráficas ...................................................................... 4 
Processador Gráfico ...................................................................................... 5 
Memória Vídeo ............................................................................................. 5 
Ramdac ....................................................................................................... 6 
A Interface Vga Standard:............................................................................. 6 
Bios Vídeos .................................................................................................. 6 
Interface : ................................................................................................... 6 
A Sua Importância no Desempenho Do Projeto .............................................. 7 
Analisar tipos de placa e sua importância dentro da computação 
gráfica. .................................................................................................. 7 
Perfil Doméstico ........................................................................................... 7 
Perfil Profissional Básico................................................................................ 8 
Perfil Gamer ................................................................................................. 8 
Perfil Entusiasta ........................................................................................... 8 
Perfil Profissional Avançado ........................................................................... 8 
Pipeline Gráfico ............................................................................................ 9 
ESPAÇO DO OBJETO .............................................................................. 9 
Object Space: .............................................................................................. 9 
World Space: ............................................................................................... 9 
Camera Space: ............................................................................................. 9 
Clipping Space: ............................................................................................ 9 
Canonical Space: ........................................................................................ 10 
Engine De Renderização (Engine 3D) ........................................................... 10 
Transformações 3D: ................................................................................... 10 
Projeção 3D → 2D ...................................................................................... 11 
Culling: ...................................................................................................... 11 
Clipping: .................................................................................................... 12 
Rasterização: ............................................................................................. 12 
A sua importância para a montagem de sistemas de base. ................ 13 
Montagem De Sistemas De Base ................................................................. 13 
Bibliotecas gráficas mais utilizadas (OpenGL e DirectX) .................... 15 
Introdução ................................................................................................. 15 
A melhor biblioteca gráfica dependendo do seu uso e a sua 
importância dentro da computação gráfica. ....................................... 17 
OpenGl: ..................................................................................................... 17 
DirectX ...................................................................................................... 17 
Unidade II – Funcionamento interno de um Game ............................ 19 
Itrodução As Apis ....................................................................................... 19 
AS API NATIVAS .................................................................................. 19 
A Api Gráfica do Windows ........................................................................... 19 
As Api Nativas ............................................................................................ 19 
Xwindow .................................................................................................... 20 
Qt ............................................................................................................. 20 
GTK ........................................................................................................... 20 
WxWidgets ................................................................................................ 21 
 
 
 
Linguagens básicas para programação em API. ................................. 21 
API ............................................................................................................ 21 
Framework .............................................................................................. 21 
Exemplos de Bibliotecas .............................................................................. 22 
C++ .......................................................................................................... 22 
O Processo de Game Loop .......................................................................... 23 
Como Fazer ............................................................................................... 23 
Na Prática .................................................................................................. 24 
Inicialização/Carregamento ......................................................................... 25 
Game Loop ................................................................................................ 25 
Unload/Shutdown ....................................................................................... 25 
Unidade III – Programando Shaders I ............................................... 25 
Tipos de shaders e suas características .............................................. 25 
Introdução ................................................................................................. 25 
O Pipeline Programável ............................................................................... 27 
Vrsão Shader ............................................................................................. 27 
Geometry Shader ....................................................................................... 28 
Pixel Shader (Fragment Shader) .................................................................. 28 
Efeitos básicos com shaders ............................................................... 29 
Introdução ................................................................................................. 29 
Tipos De Efeitos ......................................................................................... 29 
Iluminação ................................................................................................. 29 
Textura ...................................................................................................... 30 
Operações Matemáticas .............................................................................. 30 
Tansparência ............................................................................................. 31 
Unidade IV – Programando Shaders II ............................................... 31 
Efeitos Avançados Com Shaders .................................................................. 31 
Bibliografia ................................................................................................. 33 
 
 
 
 
Unidade I – Sistemas Gráficos 
Arquitetura de placas gráficas 
A placa gráfica (em inglês graphic adapter), tanbém chamadas de placa vídeo 
ou acelerador gráfico, é o elemento do computador encarregadoconverter os 
dados numéricos e transformar em dados gráficos. 
Os computadores de mais baratos, as placas de vídeo estão incorporadas na 
placa-mãe, não possuem memória dedicada, e por isso utilizam a memória viva 
do sistema, normalmente denomina-se memória compartilhada. 
O papel da placa gráfica era inicialmente o envio de pixéis gráficos para uma 
tela, bem como um conjunto de manipulação de gráficos simples: 
 Deslocação dos blocos; 
 Traçado de linhas; 
 Traçado de polígonos; 
 As placas gráficas recentes estão agora equipadas com processadores 
especializados no cálculo de cenários gráficos complexos em 3D! 
PRINCIPAIS COMPONENTES 
 Processador gráfico; 
 Memória vídeo; 
 RAMDAC; 
 BIOS vídeos. 
 
 
 
 
 
Processador gráfico 
Um processador gráfico (chamado GPU, para Graphical Processing Unit), 
constituindo o coração da placa gráfica e encarregue de tratar as imagens em 
função da resolução e da profundidade de codificação selecionada. 
O GPU é assim um processador especializado possuindo instruções evoluídas de 
tratamento da imagem, nomeadamente em 3D. 
Devido à temperatura que pode atingir o processador gráfico, às vezes tem um 
radiador e um ventilador. 
Memória vídeo 
A memória vídeo encarregada de conservar as imagens tratadas pelo 
processador gráfico antes da afixação. Quanto maior é a quantidade de 
memória vídeo, melhor a placa gráfica poderá gerir texturas aquando da 
afixação de cenas em 3D. Fala-se geralmente de frame buffer para designar a 
parte da memória vídeo que serve para armazenar as imagens antes de 
afixação. 
 
 
 
As placas gráficas são tributárias do tipo de memória utilizada na placa, porque 
o seu tempo de resposta é determinante para a velocidade de afixação das 
imagens, bem como a quantidade de memória, jogando com o número e a 
resolução das imagens que podem ser armazenadas no frame. 
RAMDAC 
O RAMDAC (random access memory digital-analog converter) permite 
converter as imagens numéricas armazenadas no frame proteção em sinais 
analógicos a enviar ao monitor. A frequência do RAMDAC determina as taxas de 
atualização (número de imagens por segundo, exprimido em Hertz - Hz) que a 
placa gráfica pode suportar. 
A interface VGA standard: 
As placas gráficas estão quase sempre equipadas com um conector VGA 15 
pinos (Mini SubD, composto de 3 séries de 5 pinos), geralmente de cor azul, 
permitindo nomeadamente a conexão de uma tela CRT. Este tipo de interface 
permite enviar para as telas 3 sinais analógicos que correspondem às 
componente vermelhas, azuis e verdes da imagem. 
BIOS vídeos 
O BIOS vídeos contém os parâmetros da placa gráfica, nomeadamente os 
modos gráficos que esta suporta. 
Interface : 
Trata-se do tipo de bus utilizado para conectar a placa gráfica à placa-mãe. O 
canal AGP está especialmente previsto para aceitar débitos consideráveis de 
dados, necessário para a afixação de sequências vídeo ou 3D. O bus PCI Expres 
possui melhor desempenho que o canal AGP e deve substituí-lo. 
 
 
 
 
 
A sua importância no desempenho do projeto 
Placa de vídeo, ou aceleradora gráfica, é um componente de um computador 
que envia sinais deste para o monitor, de forma que possam ser apresentadas 
imagens ao utilizador. Normalmente possui memória própria. Nos 
computadores de baixo custo, as placas de vídeo estão incorporadas na placa-
mãe, não possuem memória dedicada, e por isso utilizam a memória viva do 
sistema, normalmente denomina-se memória compartilhada. 
Como a memória viva de sistema é geralmente mais lenta do que as utilizadas 
pelos fabricantes de placas de vídeo, e ainda dividem o barramento com o 
processador e outros periféricos para acessá-la, este método torna o sistema 
mais lento. Isso é notado especialmente quando se usam recursos 
tridimensionais. 
Já em computadores bons e mais sofisticados, o adaptador de vídeo pode ter 
um processador próprio, o GPU ou acelerador gráfico. Trata-se de um 
processador capaz de gerar imagens e efeitos visuais tridimensionais, e acelerar 
os bidimensionais, aliviando o trabalho do processador principal e gerando um 
resultado final melhor e mais rápido. O resultado final normalmente é medido 
considerando-se o número de vezes por segundo que o computador consegue 
redesenhar uma cena, cuja unidade é o FPS (quadros por segundo). 
Analisar tipos de placa e sua importância dentro da 
computação gráfica. 
Perfil doméstico 
Se você é um usuário que utiliza seu computador apenas para navegar na 
internet, criar documentos, ouvir músicas e realizar tarefas simples, saiba que a 
aquisição de uma boa placa de vídeo não é necessária para seu perfil. 
Todas as tarefas que você quiser realizar são possíveis em uma simples placa 
onboard, que você já deve possuir em seu computador. 
 
 
 
 
Perfil profissional básico 
Se você trabalha com edição de imagens e vídeos ou outras tarefas na parte de 
design, não tenha dúvida que uma placa de vídeo offboard é fundamental para 
você. 
 É importante optar pelo menos por uma placa intermediária, visto que alguns 
programas trabalham com ferramentas tridimensionais e podem desfrutar da 
GPU. 
Perfil Gamer 
Como o próprio nome sugere, os usuários que se encaixam neste grupo são 
aqueles que procuram se divertir com os mais diversos tipos de games. 
Obviamente que você não precisa da melhor placa disponível no mercado para 
executar os jogos mais recentes, porém, caso esteja procurando por 
tecnologias recentes, uma placa top talvez seja a mais indicada. 
Perfil entusiasta 
Você adora ter o melhor e não pode viver sem overclock? Então, você é um 
entusiasta! Uma placa com duas GPUs é o mais indicado. Talvez, seja 
interessante até optar por uma configuração SLI ou CrossFire. 
Perfil profissional avançado 
Se você deseja montar um estúdio para edição de vídeos em alta definição ou 
para criação de animações profissionais, então, você se encaixa neste perfil. 
Placas comuns da série GeForce e Radeon não atendem suas necessidades. 
Opte por componentes mais robustos, como a ATI FirePro ou a NVIDIA Quadro. 
 
 
 
 
Pipeline gráfico 
Na computação gráfica 3D, o pipeline de gráficos refere-se a sequência de 
passos utilizados para criar uma representação raster 2D de uma cena 3D. É 
um dos conceitos mais importantes de computação gráfica existentes e é 
importante entendê-lo para dominar as APIs gráficas OpenGL e DirectX, pois 
diversas funções destas APIs agem sobre diferentes estágios do pipeline. 
ESPAÇO DO OBJETO 
Object space: 
Este é o espaço aonde ocorre a modelagem do objeto a partir das primitivas 
geométricas. Neste espaço não há uma importância de qual sistema de 
coordenadas foi adotado e o objeto ainda está modelado em espaços infinitos. 
World space: 
Este espaço engloba todo universos e permite-nos expressar as coordenadas de 
forma absoluta, transição do sistema de coordenadas do objeto para o sistema 
de coordenadas 3D(mundo virtual). 
A sua origem é a posição da câmera. 
Camera space: 
No espaço da câmera iremos escolher o posicionamento da câmera, o alcance 
de visualização e qual será tipo de projeção. Nem sempre a câmera será igual 
as coordenadas e assim precisaremos, transportar a cena para o plano da 
câmera. 
Clipping space: 
Nesse espaço está interligada processamentos gráficos, porquê é neste espaço 
aonde é feito o recorte das primitivas gráfica, e com isso interferindo no 
processos que são feitos durante a geração desse espaço. 
 
 
 
Desde o primeiro momento, aonde começamos do espaço do objeto até ao 
espaço do universo, é feita diversas transformações de primitivas. Logo após é 
feito o posicionamento da câmera, que indica o que será virtualizado e que 
posteriormente serão exibidos na tela. 
Canonical space: 
O espaço canônico é o espaço que basicamente faz o mapeamento dos pontos 
para centralizar o volume gerado na etapa anterior para o espaço canônico, 
formandoo Volume Canônico. Já fizemos muitos movimentos nos objetos que 
queremos renderizar e muito provavelmente eles estão distantes da origem. 
Portanto, é nesse espaço que iremos garantir o que será exibido na tela. A tela, 
é composta pelos valores de largura e altura que sempre são positivas e que o 
seu "eixo" é no canto superior esquerdo da tela. 
ENGINE DE RENDERIZAÇÃO (ENGINE 3D) 
O engine 3D será responsável basicamente pelo pipeline gráfico, que é o 
processo de gerar imagens 2D partindo de modelos 3D. Este processo é 
dividido em diversas etapas, sendo as mais importantes: 
 Transformações 3D; 
 Projeção 3D → 2D; 
 Culling; 
 Clipping; 
 Rasterização (iluminação e texturização). 
Transformações 3D: 
Nesta etapa aplica-se o movimento aos modelos 3D. Este movimento consiste 
no seguinte: 
 
 
 
A cada passo do jogo uma matriz irá acumulando o resultado de todos os 
movimentos que o objeto sofreu ao longo de seu histórico. Antes de visualizar a 
cena, será aplicada esta matriz sobre cada vértice que o compõem, 
posicionando-o no local que lhe corresponde naquele instante; 
Projeção 3D → 2D: 
Os vértices que compõem o objeto são coordenadas 3D, porém a imagem do 
modelo deverá ser desenhada numa superfície bidimensional (tela do 
computador). Nesta etapa, os vértices do modelo serão projetados sobre o 
plano de projeção da câmera. É comum encontrar esta etapa do pipeline junto 
com a etapa de transformações 3D, pois em última instância realizar esta 
projeção consiste numa aplicação de matriz de transformação também. 
Culling: 
Existem inúmeras formas de otimizar o processamento gráfico de um jogo. 
Uma destas consiste nos métodos de culling (Cull em inglês significa "refugo, 
escolher, selecionar de dentro de um grupo"). Assim, o que as técnicas de 
culling terão de fazer é saber escolher polígonos adequadamente, de forma que 
numa determinada situação, estejam presentes apenas aqueles que realmente 
importam para a visualização a partir do ponto em que a câmera se encontra. 
Pode-se pensar também da seguinte forma: quais dos polígonos de uma cena 
deverão ser enviados para o pipeline da placa gráfica? Obviamente não se 
deseja enviar algum que não terá nenhuma influência na visualização, mas até 
que ponto é simples realizar esta escolha, de forma rápida. Existem muitos 
algoritmos que farão este tipo de escolha. 
Em muitos casos a eficiência deste procedimento estará atrelada ao tipo de 
agrupamento e ordem de polígonos (um terreno possui uma distribuição de 
polígonos completamente diferente de que um personagem ou do que um 
labirinto). O culling pode ser feito em qualquer estágio do pipeline gráfico. 
 
 
 
Entretanto, é preferível eliminar os polígonos que não interessam o quanto 
antes para evitar processamento desnecessário sob polígonos que futuramente 
poderão ser eliminados. 
Vale a pena ressaltar que um método de culling não anula outro: podem-se ter 
os efeitos somados em muitos casos. 
Clipping: 
Ao projetar polígonos sobre o plano de projeção da câmera, alguns polígonos 
cairão totalmente dentro da área da tela e outros cairão parcialmente dentro, 
ou seja, apenas uma parte do polígono estará na tela de projeção. Para estes 
polígonos é necessário realizar o clipping (recorte), que consiste em criar novas 
arestas e vértices; 
Rasterização: 
Finalmente, a última etapa do processo de renderização consiste em preencher 
os polígonos adequadamente, aplicando o material com o qual estão definidos. 
Inicialmente poder-se-ia pensar em fazer este processo através de um cálculo 
de iluminação para cada um dos pixels (per pixel) do interior de um polígono. 
Entretanto isto seria demasiadamente caro em termos computacionais. Para 
viabilizar este processo realiza-se uma interpolação (rasterização) entre a cor 
de cada um dos vértices que compõem o polígono. Desta forma, o cálculo de 
iluminação é feito apenas para cada vértice (per vertex) visível da malha. Esta 
rasterização também poderia demandar bastante tempo de processamento, 
pois apesar de ser algo simples de ser feito, existem pixels numa tela. 
(processo realizado por um hardware específico a placa gráfica, ou GPU – 
Graphic Processor Unit.) 
 
 
 
A sua importância para a montagem de sistemas de base. 
Montagem de sistemas de base 
O processo básico de geração de imagens tridimensionais por computador para 
aplicações em tempo real ou interativas, amplamente conhecido por pipeline de 
visualização. Trata-se de uma estratégia de visualização que proporciona um 
compromisso razoável velocidade de desenho versus realismo. 
O propósito desta técnica consiste em criar uma projeção 2D da cena 
tridimensional, tomando em linha de conta a iluminação e a perspectiva de 
visualização. O processo assume como entrada uma cena tridimensional, 
consistindo de objetos descritos por polígonos1, fontes de luz e parâmetros de 
visualização, e à qual vai ser aplicada uma sequência de andares de cálculo: 
1 - Atravessar a base de dados que contém o modelo matemático da cena; 
2 - Aplicar o modelo de reflexão local de acordo com o algoritmo de 
sombreamento; 
3 - Aplicar as transformações geométricas de acordo com a posição e a direção 
de um observador; 
4 - Eliminar as faces escondidas (operação designada por back-faces culling); 
5 - Executar o recorte e opcionalmente a transformação perspectiva; 
6 - Calcular os pixéis que irão ser ativados (scan-conversion); 
7 - Calcular a cor de cada um dos pixéis (algoritmo incremental de 
sombreamento); 
8 - Remover as superfícies ocultas; 
9 - Implementar eventuais efeitos visuais (ex: mapeamento de texturas, 
transparências, sombras); 
10 - Filtrar os ruídos (anti-aliasing); 
 
 
 
11 - Escrever a informação respeitante aos pixels na memória de imagem para 
visualização (implementa implicitamente a projeção 2D). 
O fluxo de atividade entre o processo de atravessamento da base de dados da 
cena e a visualização da imagem numa tela pode ser agrupado em dois grandes 
blocos funcionais distintos: 
O bloco dos cálculos geométricos (passos 2, 3, 4 e 5) que fundamentalmente 
converte as primitivas gráficas descritas em coordenadas do Mundo em 
primitivas descritas em coordenadas de tela. 
O bloco de rasterização (passos 6, 7, 8, 9, 10) que converte informação 
geométrica em pixels na tela com informação de cor. 
O processamento geométrico opera no Espaço-Objeto e a rasterização opera 
no Espaço-Imagem. 
Como se referiu anteriormente, a visualização de cenas tridimensionais numa 
tela bidimensional implica a execução de uma projeção. 
Saliente-se que a execução dos passos 1 a 10 envolve operações 
tridimensionais, ou seja, operações onde é necessário conhecer 
obrigatoriamente as três coordenadas, como, por exemplo, a profundidade, 
para poder resolver o problema da visibilidade. 
Deste modo, a projeção é realizada implicitamente apenas no passo 11 quando 
se guarda a informação de cor dos pixéis, pois só aqui se acede à informação 
em x e y, através do acesso à memória de imagem. 
 
 
 
 
 
 
Bibliotecas gráficas mais utilizadas (OpenGL e DirectX) 
Introdução 
De maneira errônea, muitas pessoas acreditam que Computação Gráfica é 
saber usar programas para editar fotos ou trabalhar com desenhos vetoriais, 
tais como PhotoShop, Core Draw, 3DStudio… no entanto isso seria limitar a 
área ao simples uso de aplicações com finalidades específica para criação e 
manipulação de figuras, desenhos, cores, texturas. 
Atualmente todas as áreas da computação dependem de aplicações gráficas de 
alto desempenho. Isso requer naturalmente, grandes recursos de hardware 
para processar estes ambientes e interfaces, além naturalmente da necessidade 
de programadores experientes para lidar com as mais diversas bibliotecas e 
tecnologias existentes. 
A Computação Gráfica é uma área da Ciência da Computação dedicada ao 
estudo e desenvolvimento de técnicase algoritmos para geração de imagens, 
bem como análise e manipulação das mesmas. 
Está presente em diversas áreas do conhecimento, que vão desde aplicações 
para Engenharia em projetos e modelagem de objetos, simuladores e na 
criação de jogos eletrônicos. 
A Computação Gráfica surge somente após a criação de periféricos gráficos de 
entrada e saída, pois antes as informações eram representadas somente por 
meio de caracteres alfanuméricos. A quantidade de cálculos matemáticos em 
aplicações gráficas necessita de muita memória e recursos de processamento 
em termos de velocidade. 
Para aproveitar melhor a capacidade de hardware e facilitar a criação de 
aplicações gráficas, o mais comum é que programadores utilizem bibliotecas 
prontas que trazem uma infinidade de funcionalidades rotinas comuns. 
 
 
 
No caso específico da Computação Gráfica, programadores necessitam de 
rotinas gráficas para elaborar rapidamente programas sem ter a preocupação 
de desenvolver algoritmos básicos, tais como um segmento de reta, inclinação, 
preenchimento de objetos e etc. 
A Open Graphics Library – OpenGL pode ser compreendida como um 
conjunto de rotinas gráficas e de modelagem que facilita o desenvolvimento de 
aplicações gráficas, sejam elas bidimensionais ou tridimensionais. 
A OpenGL é gerenciada por um consórcio independente formado em 1992 
formado por diversas empresas tais como 3DLabs, Apple, NVIDIA, SGI, ORACLE 
(SUN), Microsoft e diversas outras. A OpenGL se trata de uma API para a 
criação de programas gráficos 2D e 3D multiplataforma que serve tanto para 
estações de trabalho potentes ou computadores pessoais. Seu funcionamento é 
semelhante a uma biblioteca da linguagem de programação C. 
Um programa ou aplicação baseado em OpenGL pode ser escrito em alguma 
linguagem de programação que utiliza uma ou mais rotinas da biblioteca 
OpenGL. 
Para facilitar o desenvolvimento de aplicações gráficas, há algumas bibliotecas 
que nos auxiliam com diversas funções para criar janelas e gerenciar eventos. 
As mais utilizadas são a GLU e a GLUT. 
A GLU (OpenGL Utility Library) é mais comum e instalada com a OpenGL. 
Seguem uma rígida padronização nos nomes das funções, sendo utilizado 
sempre o prefixo glu. Destacamos que é usada na definição de matrizes para 
projeção e orientação da visualização, mapeamento de coordenadas e desenho 
de superfícies quadráticas. 
 
 
 
A GLUT (OpenGL Utility Toolkit) foi desenvolvida para facilitar o 
desenvolvimento de interfaces. É um kit de ferramentas independente de 
plataforma que inclui alguns elementos de GUI (Graphical User Interface). Com 
a CLUT podemos por exemplo criar menus pop-ups, gerenciar eventos de 
teclado, mouse. Entendemos que a GLUT encapsula a complexidade das APIs 
dos vários sistemas de janelas que existem hoje em dia. 
A melhor biblioteca gráfica dependendo do seu uso e a sua 
importância dentro da computação gráfica. 
OpenGl: 
OpenGL é definida como "um programa de interface para hardware gráfico". Na 
verdade, OpenGL é uma biblioteca de rotinas gráficas e de modelagem, bi (2D) 
e tridimensional (3D), extremamente portável e rápida. Usando OpenGL é 
possível criar gráficos 3D com uma qualidade visual próxima de um ray tracer. 
Entretanto, a maior vantagem na sua utilização é a rapidez, uma vez que 
usa algoritmos cuidadosamente desenvolvidos e otimizados pela Silicon 
Graphics, Inc., líder mundial em Computação Gráfica e Animação. 
DirectX 
DirectX é um Conjunto de APIs multimídia da Microsoft para Windows. É 
composto por diversas APIs como DirectInput, directSound, direct3D, 
além de alguns outros. É muito utilizado em diversos aplicativos para Windows 
(uma vez que não é multiplataforma) sendo jogo um tipo desses aplicativos 
A versão mais atual da API Direct3D, a principal dentre as que vem com a API é 
a 11. Nas edições atuais algumas APIs foram depreciadas e por isso não são 
inclusas com o DirectX, sendo uma delas a DirectSound. 
 
 
 
 
Como a evolução da Computação Gráfica depende da evolução do hardware, 
recentemente, as novas gerações de placas gráficas possibilitaram o 
desenvolvimento de várias aplicações e um grande avanço em muitas áreas da 
CG. Por exemplo, os jogos eletrônicos hoje apresentam imagens com alto grau 
de realismo, além de permitir a conexão de jogadores através da Internet. 
Muitas imagens podem ser geradas em tempo real devido à possibilidade de 
programar o hardware gráfico. Isso também tem beneficiado a área de 
visualização, que, em geral, trabalha com uma grande quantidade de dados 
que pode ser armazenada na memória das placas gráficas. 
Por isso, a programação de hardware gráfico tem sido uma área em grande 
evolução. A Unidade de Processamento Gráfico – do inglês “Graphics Processing 
Unit"(GPU) foi desenvolvida inicialmente como um hardware destinado a 
aumentar a eficiência e o poder de processamento gráfico para tarefas de 
renderização. 
Hoje, a GPU apresenta-se como um hardware de processamento versátil e de 
alto poder de computação. 
Tornou-se uma possibilidade real na busca por soluções para processamento 
em grandes volumes de dados, seja como complemento, seja como alternativa 
ao uso de CPUs multicore ou de sistemas distribuídos. 
A utilização da GPU em computações de propósito geral é de especial interesse, 
uma vez que para diversas aplicações, ainda não existem formulações 
sequenciais suficientemente rápidas de serem computadas. 
 
 
 
Unidade II – Funcionamento interno de um Game 
 
INTRODUÇÃO AS APIS 
Existem muitas bibliotecas de programação de uma interface gráfica para um 
software. E a portabilidade, a rapidez de execução, a velocidade e o custo de 
desenvolvimento, a estabilidade e a licença de seu software dependerão da sua 
escolha de biblioteca de gráfica. 
AS API NATIVAS 
A Api gráfica do Windows 
 
Alguns sistemas implementam sua interface gráfica no próprio sistema 
operacional, é o caso do Windows cuja parte gráfica se encontra dentro do 
núcleo do sistema operacional. Como mencionado anteriormente, a interface 
gráfica do Windows não é implementada no nível do usuário, mas no nível do 
kernel, que tem a vantagem de obter interfaces de rápida execução. 
No entanto, o uso direto da API (Application Programming Interface ou 
Interface de Programação de Aplicativos) do Windows também tem muitas 
desvantagens: 
AS API NATIVAS 
Esta API tem pouca abstração, o gerenciamento da IHC (Interação humano-
computador) é feito através do uso de funções de baixo nível. 
Desenvolver uma IHC com esta API vai demorar mais e pode esconder alguns 
bugs. No entanto, uma biblioteca, cuja abordagem é de baixo nível poderá, 
eventualmente, permitir mais possibilidades em gráficos. Esta API não é 
portátil. O seu software não pode ser usado fora do Windows, a menos que 
você use a emulação. 
 
 
 
Você pode usar esta API em C ou C++ usando os MFC e, claro, em vários 
idiomas. Note que a programação de interfaces gráficas como uso da API do 
Windows é, muitas vezes, mais confortáveis com IDE como o Microsoft Visual 
C++. 
Xwindow 
É uma biblioteca de terceiros, mas como ela se situa na base do sistema IHC, 
em alguns Sistemas Operacionais como o Linux/Unix. Você pode usar 
XWindows para desenvolver interfaces gráficas, mas ainda neste caso você 
corre o risco de ter uma biblioteca com pouca abstração e que, portanto, 
exigirá mais tempo de desenvolvimento. 
Por outro lado, você obterá um software totalmente portátil: XWindow também 
existe no Windows. Outro ponto importante, algumas implementações do 
Xwindow são livres (XFree, XOrg). 
Qt 
Qt é uma biblioteca gráfica portátil, disponível para o Unix/Linux e o Windows. 
Ele é conhecido por ter uma arquitetura confortável. Qt é destinado ao uso em 
C++, mas você também pode usá-lo com muitas outras linguagens (C/Python, 
etc ...). Como exemplo de Qt, basta ver o desktop KDE no Linux ou no softwareAmarok. 
GTK 
Como a Qt, GTK é uma biblioteca livre e portátil. Também é apreciada. O 
software Gimp, por exemplo, foi feito com a Gtk. Outro exemplo é o desktop 
Gnome usado no Linux. Gtk foi escrita em C mas pode ser utilizada em várias 
outras linguagens. 
 
 
 
WxWidgets 
Sua particularidade é a de produzir janelas com a mesma aparência como se 
ela tivesse sido programada usando a API nativa do sistema. 
Linguagens básicas para programação em API. 
API 
Uma API (Aplicação Programável Interface, ou “interface de programação” ou 
“interface para o acesso programado às aplicações) é um conjunto de funções 
que permitem aceder aos serviços de uma aplicação, através de uma linguagem 
de programação. Uma API permite fornecer um certo nível de abstração ao 
programador, o que quer dizer que ela mascara a complexidade do acesso a 
um sistema ou a uma aplicação, propondo um jogo de funções standard das 
quais só os parâmetros e os valores devolvidos são conhecidos. 
Assim, por analogia com um automóvel, o motorista não tem de conhecer o 
funcionamento mecânico do motor de um veículo para poder conduzi-lo. 
Apenas uma interface, composto por um volante, pedais, quatro piscas, faróis 
de nevoeiro, buzina, etc. lhe é acessível: trata-se, de certa maneira, da 
interface proposta ao utilizador. 
Graças ao API, um programador não tem, por conseguinte, de se preocupar 
com a forma como uma aplicação distante funciona, nem com a maneira como 
as funções foram aplicadas para poder utilizá-las num programa. Uma API pode 
estar disponível para uma linguagem específica ou estar disponível para várias 
linguagens de programação. 
Framework 
O termo “Aplication Framework” (traduzam “Quadro de aplicação”, “planos de 
aplicação” ou “base de aplicação”) designa um conjunto estruturado de API, 
organizado num ambiente de execução. 
 
 
 
O termo “Aplicação Framework” é utilizado geralmente sob a forma abreviada 
de “Framework” 
Exemplos de bibliotecas 
 
– OpenGL: conjunto de funções para desenhar diretamente no buffer da 
placa de vídeo; 
– OpenCV: conjunto de funções para processamento de imagem e visão 
computacional; 
– OpenAL: conjunto de funções para processamento, síntese e execução 
de áudio. 
 
Na prática, para usar uma biblioteca basta incluir uma chamada para ela 
no início do código, por exemplo: 
 
Para usar OpenGL em C ou C++ devemos ter uma linha no início do código 
assim: 
#include “GL/gl.h” 
“gl.h” é uma INTERFACE de programação que contém declarada todas as 
funções de OpenGL que você pode usar no seu programa. 
 
A diferença entre uma biblioteca e um aplicativo é que: 
 
 Um aplicativo tem um executável (arquivos binários no Linux ou “.exe” 
no windows) e 
 Uma biblioteca não tem, pois ela é só um conjunto de funções pré-
compiladas (no linux arquivos. O, no windows arquivos .dll) 
Não faz sentido bibliotecas serem executadas do nada, elas devem ter suas 
funções chamadas por aplicativos. 
C++ 
Linguagem de programação compilada multi-paradigma (seu suporte inclui 
linguagem imperativa, orientada a objetos e genérica) e de uso geral. A 
linguagem é considerada de médio nível, pois combina características de 
linguagens de alto e baixo níveis. Desde os anos 1990 é uma das linguagens 
comerciais mais populares, sendo bastante usada também na academia por seu 
grande desempenho e base de utilizadores. 
 
 
 
Bjarne Stroustrup desenvolveu o C++ (originalmente com o nome C com 
classes) em 1983 no Bell Labs como um adicional à linguagem C. 
Novas características foram adicionadas com o tempo, como funções virtuais, 
sobrecarga de operadores, herança múltipla, gabaritos e tratamento de 
exceções. Após a padronização ISO realizada em 1998 e a posterior revisão 
realizada em 2003, uma nova versão da especificação da linguagem foi lançada 
em dezembro de 2014, conhecida informalmente como C++ 
O Processo de Game Loop 
É a estrutura base de qualquer implementação de Jogo Digital e deve ser 
corretamente estruturado para que tenhamos o comportamento correto em 
nosso Jogo. 
 
“O personagem está parado esperando que o usuário acione alguma 
coisa para que ele possa executar, mas o jogo está acontecendo...” 
 
A partir da visão do personagem, nos mostra que para que as coisas fluam 
dentro do jogo não é necessário nenhum evento externo. 
O fluxo do jogo segue na linha do tempo atualizando o estado de cada objeto, 
independentemente de qualquer comando. Essaé a ideia de Game Loop. 
COMO FAZER 
Olhando o referencial do programador, vamos formalizar a ideia de Game Loop 
e transforma-la em um pseudo-código. Primeiramente podemos perceber que o 
Game Loop é executado incessantemente e que a única situação em que ele 
para, é quando o jogo não está em execução. Uma estrutura que formaliza 
essa ideia do ponto de vista das linguagens de programação são os laços de 
repetição. 
 
Um exemplo prático bem simplório seria: 
 
 
 
 
O comando onEnterFrame no actionScript. 
onEnterFrame=function(){ 
código que se repetirá durante a espera de um 
comando 
} 
 
Outro seria um laço de while 
While (jogo_parado){ 
código que se repetirá durante a espera de um 
comando 
Incrementa algo 
} 
O CONCEITO 
 
enquanto (oJogoEstaRodando) 
inicio 
 calcule a proxima posicao do inimigo com base na atual 
 se (o inimigo atingiu a parede) 
 inverta a direção 
 senão 
 assume a posicao calculada 
 fim se 
 pinte a situacao de jogo atual 
 espere 40 milisegundos 
fim 
 
NA PRÁTICA 
 
while (isRunning) { 
 game.processLogics(); 
 game.renderGraphics(); 
 sleep(40); 
} 
O método sleep 
public void sleep(int millis) { 
 try { 
 Thread.sleep(millis); 
 } catch (InterruptedException e) {} 
} 
 
O ciclo de vida de um jogo 
 
Um jogo normalmente passa pelas seguintes fases: 
 
 
 
 Inicialização/Carregamento; 
 Game Loop; 
 Unload/Shutdown. 
Inicialização/Carregamento 
Define os valores padrão e preliminares, consulta e inicializa informações 
baseadas no usuário, carrega os conteúdos gráficos e os não gráficos, etc. 
Game Loop 
Executa a lógica de repetição do jogo e os cálculos de layout e renderização. 
Unload/Shutdown 
Salva o estado atual, libera e descarrega conteúdos, etc. 
Unidade III – Programando Shaders I 
Tipos de shaders e suas características 
INTRODUÇÃO 
Até pouco tempo atrás, pelos idos de 2003, predominava a renderização gráfica 
pelas GPUs através do pipeline fixo, pelo qual passa todo o dado de uma 
aplicação gráfica 3D que usava efetivamente uma placa de vídeo. Apesar de 
rápido e com a velocidade crescendo a cada dia, tal processo apresentava 
limitações, uma vez que não era possível ter um controle fino sobre o dado que 
era passado pelo pipeline, sendo que estes se sujeitavam aos algoritmos 
internos realizados na renderização e presentes dentro da própria GPU. 
 
 
 
Com a necessidade de realismo e desempenhos combinados crescendo sempre, 
motivada pela demanda dos consumidores quer sejam eles usuários comuns de 
aplicações gráficas, quer sejam pesquisadores científicos, muitos métodos 
haviam surgido para aumentar o realismo na imagem, vários deles através da 
renderização de multipasse. Entretanto, isto não foi o suficiente e a disputa 
comercial aliada aos rápidos avanços na área de computação gráfica, tiveram 
como consequência o surgimento dos shaders, ou seja, o nascimento das 
primeiras placas de vídeo com pipeline programável. 
Destas placas a primeira placa de vídeo com alguma presença de shaders foi a 
Geforce 3 TI que possibilitava ao desenvolvedor programar um vertex shader. 
Obviamente, que como era uma tecnologia nova, ela enfrentava uma série de 
limitações que com o tempo foram superadas ou, minimizadas. 
Seguindo o modelo criado pela Geforce 3 TI, outras placas de vídeo começaram 
a incorporar shaders em sua arquitetura, dando maior flexibilidade e controle 
do programador sobre os programas gráficos produzidos.Não demorou muito para que o DirectX 8 introduzisse suporte a shaders e para 
que o OpenGL 1.4 o fizesse também na forma de uma extensão padronizada 
pela ARB (Architeture Review Board), organização que era responsável na 
época pela decisão quanto aos rumos do OpenGL. Contudo, ainda que tal 
flexibilidade fosse possível, o código para que fosse possível manipulá-la era um 
tipo de Assembly, padronizado pela ARB. Porém, ainda que padronizado o 
assembly da placa de vídeo, como de qualquer outro hardware, é programação 
em baixo nível, sendo propensa a erros. 
Dessa dificuldade surgiram pesquisas que culminaram nas invenções das 
linguagens de shading de alto nível CG, HLSL, GLSL, as quais baseavam suas 
estruturas no C e, conseqüentemente retiravam uma grande parte da 
complexidade da implementação, bem como, diminui o tempo de aprendizagem 
da linguagem, por se basear numa linguagem amplamente conhecida e 
difundida, o C. 
 
 
 
Assim desde 2003 até 2009, ano da presente publicação muitos avanços 
ocorreram como o aprimoramento dos pixeis e vertex shaders, a criação do 
shader de geometria, a unificação dos shaders nas placas de vídeo mais 
modernas e o amplo interesse acadêmico na GPU e o possível uso desta para 
uso não apenas de aplicações gráfica, mas de aplicações de propósito geral, 
GPGPU (General Purpose GPU). 
O PIPELINE PROGRAMÁVEL 
O pipeline programável nada mais é do que a repetição dos eventos que 
ocorrem no pipeline fixo, mas com um controle mais fino pela parte do 
programador, já que permite que este programe certos estágios do pipeline, 
alterando a saída que resultaria deste em sua versão fixa. Para isto existem três 
tipos de shader. O vertex shader, o geometry shader e o pixel shader. 
Cada um deles será explicado mais adiante com suas características, a fim de 
expor a funcionalidade de cada um, deixando claro porquê é usado e como é 
usado. 
 VERTEX SHADER 
Tem por responsabilidade substituir o processo de manipulação dos vértices 
presente no pipeline fixo, permitindo ao programador manipular as 
transformações geométricas, o posicionamento e cor dos vértices, bem como o 
processo de iluminação e geração de coordenas de textura na parte dos 
vértices. Diante de suas responsabilidades o vertex shader é extensivamente 
usado, estando presente nos mais variados tipos de algoritmos aplicados ao 
programa em si e, portanto, tem importância fundamental no contexto do 
pipeline programável. Frente a esta posição ele vêm sofrendo constantes 
avanços, evoluindo junto e, em paralelo, aos outros shaders, à medida que o 
hardware evolui. 
 
 
 
 
GEOMETRY SHADER 
O Geometry Shader não tem correspondência no pipeline fixo de renderização. 
Sua principal função é a de criar ou remover vértices, permitindo um maior 
controle na geometria que passa pelo pipeline programável, aumentando ou 
diminuindo o nível de detalhe de acordo com o necessário, permitindo com que 
uma enorme variedade de efeitos sejam possíveis, como melhor interpolação 
de vértices com a adição de novos vértices quando necessário, renderização de 
silhueta, entre outros. Apesar de ser flexível e capaz de uma série de efeitos 
interessantes o Geometry Shader é relativamente novo, sendo incluído na API 
DirectX em sua versão 10, no ano de 2006, este shader é ineficiente se 
comparado com os outros e deve ser usado cuidadosamente para que se tire 
proveito de seus benefícios e o resultado seja um shader eficiente em sua 
tarefa. 
PIXEL SHADER (FRAGMENT SHADER) 
Para dar mais poder de expressão e flexibilidade aos artistas e programadores 
as linguagens de shading foram inventadas. As primeiras delas eram offline, 
uma vez que para a época (1995) era proibitiva a renderização em tempo real 
com código de shading programável. Assim softwares como o Renderman e 
XXX foram inteiramente produzidas para se utilizarem renderização por 
software. Com o tempo foram inventadas outras linguagens para o mesmo fim 
até que finalmente surgissem as linguagens de shading para shaders de Placas 
de vídeo renderizando em tempo real. 
 
 
 
bbEfeitos básicos com shaders 
INTRODUÇÃO 
Efeitos são entidades que podem encapsular vários shaders diferentes, além de 
configurações dos estados do pipeline fixos necessárias para a execução do 
mesmo. Em cada efeito é possível criar uma ou mais técnicas, que são 
utilizadas na renderização das malhas. Cada técnica criada deve definir quais 
shaders serão utilizados para o processamento de vértices, geometria e pixels. 
Isso permite, por exemplo, que duas técnicas diferentes possam utilizar um 
mesmo processamento de vértices, mas possuam diferentes processamentos de 
pixels. A técnica a ser utilizada na renderização de um objeto pode ser 
escolhida em tempo de execução de acordo, por exemplo, com os recursos do 
hardware gráfico do usuário. 
 TIPOS DE EFEITOS 
 Iluminação; 
 Texturas; 
 Operações matemáticas. 
 ILUMINAÇÃO 
Teoria – Phong Lighting - Esta técnica para o cálculo de iluminação foi 
desenvolvida por Bui Tuong Phong na universidade de Utah em 1973. Na época 
de sua concepção ela foi considerada radical (pois era simples demais 
comparado com os modelos da época), entretanto hoje é o mais utilizado em 
aplicações de tempo real. 
 
 
 
 O modelo Phong é essencialmente uma aproximação empírica de um sistema 
de iluminação local (sistemas que consideram apenas a luz que incide 
diretamente nos objetos). Ele descreve como uma superfície reflete a luz, 
sendo uma combinação da reflexão difusa, da reflexão especular e da reflexão 
ambiente. Para uma explicação mais física (incluindo conceitos de Irradiancia, 
radiancia ... ) recomendo a segunda parte do livro Principles of Digital Image 
Synthesis. 
TEXTURA 
Uma das primeiras formas de acrescentar detalhes em uma renderização sem 
acrescentar geometrias é através da utilização de texturas. Geralmente uma 
textura é uma imagem 2D composta por texels (texture elements) que é 
aplicada sobre um triângulo. Esta definição restringe uma gama de aplicações 
interessantes que podemos fazer, por este motivo textura para este tutorial 
deve ser vista por uma visão mais geral: É uma função que mapeia uma 
coordenada n-dimensional a uma informação de 4 componentes que pode 
representar uma cor. 
OPERAÇÕES MATEMÁTICAS 
Na fase de modelagem são definidas as formas geométricas, bem como suas 
posições e proporções. Ou seja, o espaço virtual é confeccionado considerando, 
principalmente, o dimensionamento físico dos objetos que constituem a cena. 
Após a modelagem, torna-se necessário aplicar um conjunto de algoritmos que 
melhorem a impressão visual da cena, ou seja, deve-se aplicar um acabamento 
final para que a imagem possua características foto-realísticas, aproximando o 
ambiente virtual do real. Dessa maneira, há sensação de imersão de um 
usuário em um jogo ou em um aplicativo gráfico qualquer (daí a necessidade 
de um bom posicionamento e movimentação da câmera virtual). 
 
 
 
Para criar esse realismo são utilizados algoritmos de textura como bump 
mapping, parallax mapping e displacement maping. Além disso, também podem 
ser utilizados algoritmos de iluminação global, como radiosidade ou ray-tracing, 
ou até mesmo o acréscimo de efeitos na iluminação local, como técnicas para 
gerar sombras, refração e outros.Esta última etapa é essencial para obter uma 
alta qualidade na cena, porém o custo computacional é muito alto dificultando a 
criação de projetos que necessitam de tonalização em tempo real. 
TRANSPARÊNCIAS 
Para criar esse realismo são utilizados algoritmos de textura como bump 
mapping, parallax mapping e displacement maping. Além disso, também podem 
ser utilizados algoritmos de iluminação global, como radiosidade ou ray-tracing, 
ou até mesmo o acréscimo de efeitos na iluminação local, como técnicas para 
gerar sombras, refração e outros. 
Esta última etapa é essencial para obter uma alta qualidadena cena, porém o 
custo computacional é muito alto dificultando a criação de projetos que 
necessitam de tonalização em tempo real. 
Unidade IV – Programando Shaders II 
Efeitos avançados com shaders 
TIPOS DE EFEITOS 
 Reflexos; 
 Contornos; 
 Vector-shaders; 
 Screen-space; 
 Post-processing. 
 
 
 
 
 
Reflexos: 
Cria efeitos de reflexo, junto com o efeito de iluminação. 
Contornos: 
Detecta e modifica os contornos em tempo real. 
Vertex shader : 
Manipula vértices e consequentemente o formato de objetos. Esses vértices são 
então enviados para os geometry shaders. 
Screen-space: (Mapeamento de espaço na tela) 
Mapeamento de espaço na tela é uma técnica para projetar texturas planas da 
câmera. A configuração do nó para isso é bastante simples. 
O nó da posição da tela indica a posição do pixel atual que está sendo 
processado, no espaço da tela. Ele é definido como "lado a lado" para evitar 
que se estenda por toda a tela. 
Post-processing: (pós-processamento) 
Esta configuração possui efeitos diferentes para cada jogo. O mais comum são 
efeitos de luz como o "bloom" (que é quando a luz se espalha suavemente 
pelo cenário) ou o "motion blur" (que simula o borrão de luz quando há 
movimentos rápidos). 
Outro efeito deste parâmetro é a simulação da mudança de luz quando se 
passa de um ambiente muito escuro para um muito iluminado, como aquele 
clarão que nos deixa cego até nossos olhos se acostumarem, e vice-versa. 
 
 
 
 
BIBLIOGRAFIA 
HUGHES, John F. et al. Computer graphics: principles and practice. Pearson 
Education, 2013. 
LENGYEL, Eric. Mathematics for 3D game programming and computer graphics. 
Cengage Learning, 2012. 
BORESKOV, Alexey; SHIKIN, Evgeniy. Computer Graphics: From Pixels to 
Programmable Graphics Hardware. CRC Press, 2013. 
BIBLIOGRAFIA COMPLEMENTAR: 
BUCKLAND, Mat. Programing AI By Example. Texas: Wordware Publishing, Inc., 
2005. 521 p. 
LUNA, Frank D. Introduction to 3D game programming with DirectX 10. Jones & 
Bartlett Publishers, 2008. 
WRIGHT, Richard S. et al. OpenGL SuperBible: comprehensive tutorial and 
reference. Pearson Education, 2010.

Continue navegando