===== Visão Geral ===== A computação gráfica é uma área da ciência da computação que, através de recursos computacionais e diversos algoritmos e aplicações matemáticas diferentes, realiza a representação de dados através de uma imagem, vídeo ou animação. É uma área que possibilita com que as pessoas se aproximem da tecnologia, facilitando o seu entendimento, estando hoje em dia presente em praticamente todas as áreas do conhecimento, desde às partes mais técnicas e exatas até o ramo das artes e produção criativa. {{:c:computer_graphics.jpg?300|}} ===== Histórico ===== * **1950-1960:** O início dos estudos quanto à computação gráfica pode ser datado no início da década de 50, momento em que estava ocorrendo um grande avanço tecnológico, principalmente na área computacional, por conta da Guerra Fria. *__1950__: Muitos atribuem Benjamin Francis Laposky como sendo o responsável por criar o primeiro gráfico computacional, bem como um dos primeiros a fazer arte através da eletrônica. Ele utilizou um osciloscópio de raios catódicos e outros circuitos elétricos e eletrônicos para gerar vibrações eletrônicas que então apareceriam na tela do osciloscópio, tirando fotos dessas imagens na tela para produzir suas artes abstratas. *__1951__: É criado no Instituto de Tecnologia de Massachusetts (MIT) o computador Whirlwind I, como parte de um projeto da marinha americana para simulação de ambientes de voo. O Whirlwind I foi o primeiro computador digital do MIT e também o primeiro a utilizar um display gráfico, sendo capaz de mostrar texto e imagens em tempo real através de uma tela de tubo de raios catódicos (CRT). Esse computador era capaz de receber dados de um radar e sobrepor sobre a imagem geográfica existente na tela um símbolo representando uma aeronave. *__1955__: É criada a caneta óptica, como parte do projeto do Whirwind I. Ela é um dispositivo de entrada do computador, análoga a como se usaria uma touchscreen, mas com maior precisa. Essa é sensível à luz, sendo capaz de identificar o brilho dos pixels de telas CRTs ao redor de onde a caneta está e registrar tal luz, enviando então um sinal para o computador que detecta a sua posição e supõe onde ela estará até que a tela CRT escaneie o pixel em que ela está novamente. Essa tecnologia torna possível uma interação com a tela, selecionando e inserindo comandos. *__1956__: A partir do projeto do Whirlwind I, é criado o computador SAGE (Semi-Automatic Ground Enviroment), um grande sistema de computadores que recebia e coordenava vários tipos de dados recebidos de radares para produzir uma imagem conjunto do espaço aéreo de uma grande área específica. Nesse computador, a caneta óptica era capaz de controlar pela tela a rede de radares do espaço aéreo em tempo real. *__1958__: Primeiro uso de computação gráfica no cinema por John Whitney no filme Vertigo de Alfred Hitchcock, sendo então a primeira animação por computador realizada. *__1959__: Fruto de uma parceria da General Motors e IBM, o DAC-1 (Design Augmented by Computer) foi um dos primeiros programas que utilizou computação gráfica para a realização de designs. O sistema era capaz de manipular desenhos existentes e modificá-los no computador, sem ter que ficar escaneando novos desenhos apenas para pequenas mudanças. Com novos avanços, o programa também se tornou capaz de converter linhas em um objeto 3D, sendo muito utilizado para o desenvolvimento de automóveis. {{:c:light_pen.png?250|}} * **1960-1970:** Nos anos 60, então, que explodem os estudos quanto à computação gráfica, sendo constantemente desenvolvidas novas tecnologias para proporcionar modelagem de imagens digitais e amplamente usadas no mercado, principalmente em empresas automobilísticas, pelos órgãos governamentais (com destaque para o Exército, Marinha e Aeronáutica), e empresas aéreas. *__1962__: Steve Russel do MIT cria o primeiro jogo gráfico de computador, com interface e premissa parecida com os gráficos do Whirlwind I. *__1963__: É criado o “Sketchpad” como parte do trabalho do Dr. Ivan Sutherland, sendo um grande avanço na área da computação gráfica, principalmente para a sua base teórica de software, pois se tratava do primeiro aplicativo de desenvolvimento e modelagem de gráficos. O Sketchpad, então, exibia gráficos no display CRT e os desenhos da caneta eram interpretados como entradas, manipulando e criando novos gráficos, de maneira análoga a um mouse moderno. Assim, tal programa foi a fundação das Interfaces Gráficas do Usuário, da interação computador-humano e da computação gráfica. *__1966__: A NASA, como parte do programa do Laboratório de Propulsão à Jato (JPL) desenvolve um programa de processamento de imagens, o VICAR (Video Image Communications and Retrieval) para trabalhar com imagens da lua tiradas pelas espaçonaves. *__1968__: É apresentado para o público o mouse de computador, um dispositivo de apontar que detecta movimentos em duas dimensões e os traduz para a tela, possibilitando um controle de uma interface gráfica. * **1970-1980:** Já nos anos 70 o seu uso já se torna mais popular, havendo grandes melhorias para deixar os gráficos mais realistas, havendo mais estudos quanto aos gráficos 3D. * Surgem mais jogos com computação gráfica (“Odyssey”, PONG etc.); \\ * Aumenta a presença de computação gráfica nos filmes, com Edwin Catmull se tornando um dos pioneiros na indústria de animação 3D, se envolvendo em trabalhos em empresas como LucasFilms, Pixar e Disney; \\ * Invenção de novas tecnologias e algoritmos, como com novas técnicas de mapeamento e renderização;\\ * Criação do SuperPaint, um precursor dos pacotes modernos de computação gráfica. {{:c:pong.gif?250|}} * **1980-1990:** Os anos 80 possibilitaram a expansão da computação para cada vez mais áreas, com a computação gráfica se tornando mais acessível, moderna e comercializável.\\ * Mais vídeo games sendo lançados, como o jogo The Donkey Kong pela Nintendo; \\ * Apple lança o computador pessoal Apple Macintosh, que abriu caminho para que as pessoas pudessem projetar coisas em seus próprios computadores com os pacotes gráficos inclusos;\\ * Microsoft lança o MS Paint;\\ * São fundadas as empresas SGI e Adobe;\\ * Diversos filmes têm computação gráfica bastante presente em suas produções. * **1990- Dias atuais:** Assim, dos anos 90 até hoje em dia, só houveram mais avanços: * Computação gráfica se torna algo bastante acessível à computadores pessoais, estando ao alcance de qualquer pessoa;\\ * A indústria de jogos eletrônico agora é uma das que mais cresce;\\ * Surge o standar gráfico de programação OpenGL (SGI);\\ * Filmes feitos inteiramente com computadores;\\ * Gráficos são extremamente realistas, os algoritmos são extremamente avançados;\\ * Celulares também são capazes de criar gráficos realistas;\\ * Agora, um rosto humano pode ser criado completamente por computação em tempo real. =====Tipos de Imagem ===== ===Bitmaps/ Gráficos Raster:=== São imagens formadas por um conjunto de pixels, que com a união desses, tem-se a informação de cor. Um pixel consiste em um ponto desse bitmap 2D, um ponto de cor, em que, quanto mais pontos, mais exata a imagem. Em uma imagem bitmap, as bordas sofrem alterações, deixando seus pixels mais claros para suavizar o contorno e, ao e dar zoom, é possível observar se observar esses pixels, ou seja, a imagem fica mais distorcida e menos nítida. O computador se tornar capaz de registrar uma imagem, então, registrando qual cor está presente em cada pixel, representando essas cores com pixels, se há 8 cores, utiliza-se oito bits para armazenar a imagem, 16 cores, 16 bits etc. Esse tipo de imagem, porém, acaba ocupando muito espaço na memória e sua manipulação é difícil, já que qualquer grande alteração deixa a imagem granulada (pelos pixels) ou ilegível. ===Gráficos Vetoriais:=== Dessa forma, as informações da imagem como cor e dimensões são representadas por geometrias simples, como pontos, linhas, curvas e polígonos, que são baseadas em equações matemáticas. A imagem pode então, ser vista como um conjunto de pontos exatamente relacionados uns com os outros (é como posicionar a imagem em cima de um plano cartesiano), de modo que se torna possível redimensionar a imagem sem que ela se altere. \\ {{:c:vector_bitmap.jpg?300|}} =====Principais Áreas no ramo da Computação Gráfica===== ===Modelagem:=== É a tradução de objetos do mundo real (seu tamanho, forma e propriedades) em equações matemáticas que podem ser entendidas e armazenadas pelo computador. É tornar capaz de não apenas visualizar imagens no computador, mas também conseguir mostrar sua estrutura e comportamento. Há três tipos principais de modelagem 3D: * Modelagem Sólida: trabalha com formas primitivas, como esferas, cubos e prismas para construir o objeto; * Modelagem Wireframe: a representação do objeto ocorre através de uma rede de vértices, pontos colocados meticulosamente, unidos por polígonos, sendo capazes de criar superfícies mais complexas; * Modelagem de Superfície: o objeto é representando através de linhas guiadas para definir o formato e curvatura de algo. O software calculará, então, a superfície que conecta essas linhas guiadas. ===Renderização:=== É o processo de, através de um software, gerar uma imagem através de uma base 3D com dados quando à geometria da imagem, ponto de vista, textura, luz, reflexos, neblina, profundidade etc. O programa vai então pegar esses dados, interpretar e aplicar na base, gerando uma imagem resultante mais detalhada e com mais contraste. Há algumas técnicas principais de renderização: * Rasterização: consiste em converter uma imagem vetorial em uma imagem raster. Isso serve para exibir um objeto tridimensional em um meio bidimensional de uma maneira bastante rápida; * Ray Casting: há uma simulação do comportamento da luz, lançando raios a partir do observador para perceber a distância relativa entre os objetos existentes. Essa técnica economiza recursos computacionais, ignorando partes não “visíveis” ao usuário; * Radiosidade: esse método de renderização permite computar as intensidades das energias radiantes chegando a uma superfície (o quanto uma superfície é atingida por raios de luz). Essas intensidades podem então determinar as áreas de penumbra e luz da superfície. ===Animação:=== Através de modelagem e renderização, levando em consideração o tempo como um elemento chave, cria-se a ilusão de movimento através de uma sequência de imagens. É o famoso CGI (computer-generated imagery). Em animações 3D, os objetos vão ser compostos de sua modelagem (a superfície) e de um esqueleto interno, o qual é animado (frequentemente utilizado em objetos humanos, animais etc). Tal técnica deixa a animação mais intuitiva e faz com que os movimentos sejam condizentes com a realidade, e não algo deformando e misturado. ===Interação com o Usuário:=== A computação gráfica está fortemente relacionada com as entradas disponibilizadas pelo usuário, em que muitas vezes é necessário dar um grande controle a ele. Ela também está presente como intermediária entre o dispositivo e o ser humano, servindo de ponte para a melhor compreensão, como em Interfaces Gráficas do Usuário. ===Realidade Virtual:=== É um tipo especial de interface gráfica do usuário, em que se procura gerar um ambiente tridimensional imersivo, interativo e manipulável, devendo ser capaz de receber e interpretar todas as ações/entradas fornecidas pelo indivíduo. ===Processamento de Imagem:=== Muitas vezes considerada uma área à parte da computação gráfica, é o método utilizado para executar algumas operações em uma imagem já existente para melhorá-la ou extrair alguma informação útil. No processamento de imagens se realiza com as imagens: a descrição, armazenamento, transformação, filtragem, melhoramento, reconhecimento de padrões, detecção de borda e reconstrução de objetos, entre outros. ===== Na prática ===== A computação gráfica começa com o Paradigma dos 4 universos, os quais são: *Universo físico> O problema em si; *Universo matemático> Achar equações que resolvem o problema; *Universo de representação> Adaptação para um algoritmo viável; *Universo de implementação> Implementação em si. Na implementação será usado uma linguagem de programação juntamente com uma API. ==== API ==== Application Programming Interface (Interface de programação de aplicações) tem a função de se comunicar com o hardware para criar elementos visuais, desde uma janela que explora arquivos até jogos 3D. Através da linguagem de programação a API vai receber os comandos, fazer o processamento e renderizar na tela. Alguns exemplos de API são OpenGL, DirectX e Windows API. Entre as 3 citadas, o OpenGL roda em outros sistemas operacionais além do Windows, então será brevemente comentado seu funcionamento. ==== OpenGL ==== Open Graphics Library, é uma API versátil e rápida, muito utilizada para criação de Game Engines (mesmo com o DirectX sendo o principal atualmente, o qual é limitado ao Windows), através do OpenGL o programador vai decidir o funcionamento das luzes e sombras, forma de renderização, cores, perspectiva e diversos outros fatores envolvendo o que e como vai aparecer na tela. O OpenGL é específico para cada GPU, por isso há diversas bibliotecas que ajudam em tarefas básicas porém trabalhosas se criadas do zero, como freeGLUT, GLFW e Ecere SDK que usam o OpenGL para implementação de janelas e o GLEW que permite usar o OpenGL de forma mais ampla, tornando o programa multi-plataforma. {{:c:c2_window.png?400|}} \\ //Triângulo feito em OpenGL, simples mas com muitos conceitos por trás. É o Hello World da Computação Gráfica :)// ===== Aplicações ===== ===Educação=== A computação gráfica está sendo capaz de revolucionar o modo em que se aprende e que se treina novos profissionais, sendo capaz de fornecer simulações realistas, testando as habilidades dos futuros profissionais com um custo reduzido e em um ambiente controlado. Um exemplo disso são os simuladores de voo para futuros pilotos, dando-os uma oportunidade de testar os controles sem ter que gastar combustível e arriscar um possível acidente; e simuladores da anatomia humana, diminuindo a necessidade de se dissecar animais ou de se observar cadáveres.\\ Na educação em geral, o uso de gráficos ajuda a contextualizar o que está sendo aprendido, deixando conceitos como átomos, microrganismos ou leis da física menos abstratos, sendo possível de modelá-los ou animá-los para serem observáveis. ===Suporte a outras Indústrias=== A disponibilidade de se criar modelos 3D auxilia as mais diversas indústrias, sendo mais fácil de se criar protótipos e de observar suas propriedades e comportamentos através de diferentes softwares. Muitos designs que antigamente tinham que ser feitos no papel, seja em ramos automobilísticos, no design de produtos, na arquitetura etc., o que dificultava a visualização e era difícil de se corrigir erros. Com a tecnologia, o desenvolvimento e possíveis correções são mais fáceis de serem realizados, agilizando diversos processor. ===Entretenimento=== É inegável dizer que nos últimos anos a computação gráfica se tornou uma grande protagonista da Indústria do entretenimento, seja para filmes ou vídeo games. O uso da computação permite a criação de novos universos, elevando a capacidade criativa de diretores e roteiristas, expandindo infinitamente o que se é possível ver num filme, além de tornar algumas cenas muito mais seguras de serem realizadas, uma vez que podem ser reproduzidas por computador, sem colocar em risco a vida de ninguém. \\ Todos os últimos blockbuster de Hollywood utilizam de algum tipo de CGI ou efeito visual e a qualidade desses, muitas vezes, vai indicar a própria qualidade do filme. Quanto melhor a computação gráfica, especialmente nos jogos, mais imersiva, realista e prazerosa se torna a experiência ===Medicina=== O uso de computação gráfica na área médica não é algo recente, havendo visualizações tridimensionais de tomografias desde o fim dos anos 70. A tecnologia, no entanto, só vem evoluindo, permitindo a expansão de seu uso para outras áreas da medicina, com destaque para diagnósticos, já que o seu uso permite uma visualização detalhada, manipulável e menos invasiva ao paciente, dando mais recursos para o médico identificar o problema (em alguns casos já existe até softwares que identificam padrões e diagnosticam doenças a partir de imagens) e pensar em uma solução.\\ Outra área altamente beneficiada é a das cirurgias, já que, principalmente nas cirurgias plásticas, a mudança ou reconstrução pode ser simulada, dando tanto ao médico quanto ao paciente uma noção do resultado; em outras cirurgias, o processo pode ser simulado, de modo a achar alguma melhoria de execução ou outra alternativa. === Referências === - [[https://www.youtube.com/watch?v=6STSHbdXQWI]] \\ - [[https://pt.wikipedia.org/wiki/OpenGL]] \\ - [[https://nicolbolas.github.io/oldtut/Building%20the%20Tutorials.html]] \\ - [[https://www.cpet.com.br/conheca-a-historia-da-computacao-grafica]] \\ - [[https://blog.ecdd.com.br/guia-o-que-e-computacao-grafica/#:~:text=A%20HIST%C3%93RIA%20DA%20COMPUTA%C3%87%C3%83O%20GR%C3%81FICA&text=Tudo%20come%C3%A7ou%20em%201951%2C%20quando,em%20monitores%20ou%20televisores%20comuns.]]\\ - [[https://www.geeksforgeeks.org/applications-of-computer-graphics/#:~:text=Entertainment%3A,television%20shows%2C%20cartoon%20animation%20films.]]\\ - [[https://all3dp.com/2/types-of-3d-modeling/#:~:text=Within%20CAD%2C%20there%20are%20three,specialized%20for%20their%20specific%20purposes.]]\\ - [[http://www.d54x.ru/books62/2005Shirley.pdf]]