Este artigo foi reproduzido do original final entregue pelo autor, sem edições, correções ou considerações feitas pelo comitê técnico. A C&D não se responsabiliza pelo conteúdo. Outros artigos podem ser adquiridos através do site da revista www.fainor.com.br/revista. Todos os direitos são reservados. Não é permitida a reprodução total ou parcial deste artigo sem autorização expressa da C&D. Visualização Síncrona de Processos com o OpenGL Rogério Henrique C. Araújo Bacharel em Engenharia da Computação pela Faculdade Independente do Nordeste (FAINOR) Vitória da Conquista, BA, Brasil roger_kablam@hotmail.com MSc. Wilton Lacerda Silva Coordenador e professor do Curso de Engenharia da Computação da Faculdade Independente do Nordeste (FAINOR), Professor do CEFET. Vitória da Conquista, BA, Brasil wiltonlacerda@gmail.com RESUMO Este trabalho apresenta o OpenGL como uma interface de programação, utilizando suas funcionalidades na área de visualização aplicada à processos automatizados. O OpenGL quando utilizado como interface tridimensional em processos que exigem visualização e controle, tal como um processo automatizado, mostrou-se eficaz, podendo ser aplicado em processos de natureza real controlados pelo computador, que exigem sincronismo visual entre o processo real e o processo virtual. Verificou-se ainda que esta interface proporciona uma grande gama de possibilidades para aplicações em diversas áreas de automação. 1 INTRODUÇÃO O OpenGL define uma API (Application Programming Interface ou Interface de Programação de Aplicativos), isto é, uma interface multiplataforma e multilinguagem para a criação de aplicações que produzem gráficos computacionais tanto em duas dimensões (2D) como em três dimensões (3D) [1]. Com o grande potencial para a criação de aplicativos tridimensionais cada vez mais realistas e complexos através dos recursos que o OpenGL proporciona, é possível criar programas que representam a realidade, seja um processo industrial automatizado ou um movimento de um objeto, ambos ligados em um computador. Nestes sistemas, os eventos ocorridos no mundo real são reproduzidos em software, os quais requerem maior fidelidade, complexidade e sincronismo. Com um nível de abstração mais alto proporcionado pelo OpenGL, cada movimento do procedimento, o qual será informado ao computador, é possível reproduzi-lo com grande realismo e sincronia. Isto é, o usuário do aplicativo terá uma sensação de estar de fato vendo o processo em tempo real, já que o mesmo traz uma aceleração de hardware em 3D, trabalhando com recursos geométricos, transformações, renderização, efeitos de movimento, transparência e reflexos. Com uma visualização tridimensional do processo, a visão será mais abrangente, detalhada, realista e em tempo real. Diante das inúmeras aplicações do OpenGL, as quais grande parte restringem-se a jogos e simuladores, neste trabalho utilizou o mesmo em um sistema automatizado conectado a um computador, isto é, um software capaz de controlar e reproduzir com fidelidade um processo real na tela do computador. Diante deste, pode-se constatar a eficácia do poder do OpenGL e sincronismo visual entre o processo real e a representação tridimensional. 2 OPENGL Trata-se uma especificação aberta e de uma biblioteca de rotinas gráficas e de modelagem, ou API utilizada para o desenvolvimento de aplicações de Computação Gráfica, tais como jogos e sistemas de visualização oferecendo um 72
controle simples e direto sobre um conjunto de rotinas, permitindo ao programador a especificação de objetos e as operações necessárias para a criação de imagens gráficas de alta qualidade [1]. Possuindo cerca de 250 funções distintas que podem ser aplicadas na construção gráfica de cenas tridimensionais complexas funcionando como uma máquina de estados, nesta interface o controle dos atributos é feito através de um conjunto de variáveis de estado de valores iniciais default, que podem ser alterados se necessário. Como por exemplo, a criação de objetos de mesma cor até que seja definido um novo valor para esta variável. O OpenGL é considerada uma API mais de procedimentos gráficos do que descritiva. Ao invés de descrever a cena e como ela deve aparecer, o programador indica os passos necessários para criar uma aparência ou efeito. Estes passos envolvem chamadas dos vários comandos do OpenGL. Estes comandos desenham gráficos primitivos como pontos, linhas e polígonos em três dimensões. Além do mais, o OpenGL suporta iluminação e sombreamento, mapeamento de textura, blending, transparência, animação e muitos outros efeitos especiais. O OpenGL traz recursos poderosos de renderização, sendo eles em tempo real, o qual requer maior capacidade de processamento do que a renderização normal, a qual não requer tanto poder de processamento. Amplamente utilizado na indústria dos videogames, o OpenGL foi utilizado na criação do famoso jogo para computador DOOM 3, em que todos os recursos deste são utilizados, tais como neblina em tempo real, anti-aliasing (suaviza as bordas de uma imagem), sombras volumosas, mapeamento de imagens, efeitos de movimento, transparência, reflexos, texturas em 3D. Uma implementação de hardware do OpenGL geralmente é realizada na forma de driver de placas gráficas. É observado que as chamadas da API do OpenGL são passadas para o driver do hardware. Este driver não passa sua saída para o GDI do Windows para mostrar na tela, o driver faz a interface diretamente com o display do hardware gráfico, trazendo conseqüentemente a idéia do pipeline do OpenGL. A maior parte dos programas implementados do OpenGL possuem ordem de operações a serem executadas. A palavra pipeline é utilizada para descrever um processo que leva dois ou mais estágios distintos ou passos. A figura 1 a seguir mostra uma versão simplificada do pipeline do OpenGL. Assim como a aplicação faz as chamadas de função do OpenGL, os comandos são colocados no buffer de comandos. Este buffer eventualmente é preenchido com comandos, dados de vértices e texturas. Os comandos e dados passam para o próximo estágio do pipeline quando o buffer é acionado. Transformação e Iluminação é um estágio matematicamente intensivo, onde pontos são usados para descrever a geometria dos objetos, onde são recalculadas de acordo com a localização e orientação do objeto. Os cálculos da iluminação são para indicar o brilho das cores em cada vértice. Após a rasterização, a imagem é mandada para o frame buffer, memória do dispositivo gráfico que apresentará a imagem na tela [2]. Figura 1 Versão Simplificada do pipeline do OpenGL Fonte: (WRIGHT; LIPCHAK; HAEMEL, 2007). Para o funcionamento do OpenGL no Microsoft Windows, são necessários alguns arquivos específicos, os quais podem variar de nome da extensão da biblioteca auxiliar do compilador (que pode ser da extensão.a ou.lib, dependendo do compilador utilizado), porém as funções são as mesmas. As bibliotecas do OpenGL são encontradas como parte do sistema operacional Microsoft Windows, e também podem ser baixadas no site oficial do OpenGL: http://www.opengl.org. O gl.h é o leitor primário do OpenGL. Por convenção, deve estar na pasta GL do compilador que será utilizado. O glu.h é o leitor da biblioteca de utilidades do OpenGL, colocado na mesma pasta que o gl.h. O arquivo opengl32.lib é uma biblioteca que contém os comandos para as funções do OpenGL e deve ser colocado na pasta de biblioteca do compilador [3]. O glu32.lib é outra biblioteca que contém os comandos para as funções da biblioteca de utilidades do OpenGL. O opengl32.dll é uma biblioteca de link dinâmico que contém as funções de implementação e está ligada aos drivers de hardware de vídeo, é encontrada na pasta de sistema do Windows (system32). O glu32.dll é outra biblioteca de link dinâmico que contém as funções de implementação da biblioteca de utilidades do OpenGL, encontrada na pasta system32 do Windows [4]. O GLUT (OpenGL Utility ToolKit) é um conjunto de ferramentas para a criação de programas OpenGL, o qual é suportado pela maior parte das plataformas. Como o OpenGL não suporta diretamente nenhuma forma de janela, menus ou entrada, o GLUT oferece a funcionalidade de todas estas áreas, provendo uma API portátil, a qual permite que os programas rodem em várias plataformas. O GLUT suporta janelas múltiplas para a renderização OpenGL, respostas a eventos baseados em Callback de funções, rotinas idle e timers, criação de menus pop-ups, suporta bitmaps e traz uma grande variedade de funções para gerenciamento de janelas [2]. Tanto o OpenGL, quanto sua biblioteca auxiliar GLUT, possuem extensa documentação na internet, acessível a todos que desejam aprendê-la. Ao contrário de sua grande rival, a Direct3D da Microsoft, o OpenGL não necessita da instalação de uma API para poder programá-la, e também é observado que o mesmo mostra-se mais consistente e portátil que o Direct3D. O OpenGL pode ser implementado em algumas linguagens de programação, tais como C++ e Java, o que traz comodidade para o programador da utilização da linguagem que lhe é mais conveniente. 3 VISUALIZAÇÃO TRIDIMENSIONAL EM MOVIMENTO A visualização pode ser conceituada como o uso de imagens para representação de informação significativa[5]. A mesma possui muitos ramos, tais como a Visualização Científica, de Informação, Geográfica, de Negócios, Estatística, de Processo e Visualização de Software. Todos os tipos de visualização possuem o mesmo objetivo de transformar o dado em uma representação visual útil que possa trazer ao observador humano um melhor entendimento. Nos dias atuais, esta transformação é feita através de recursos gráficos gerados por computador [6]. Com a constante evolução da computação gráfica e dos hardwares capazes de realizá-la, é possível gerar gráficos cada vez mais realistas e complexos em diversos tipos de 73
aplicações. A interface homem-máquina traz inúmeras possibilidades na construção de telas, as quais ilustram o processo com parâmetros, variáveis e outros objetos tais como elementos lógicos como botões liga/desliga, potenciômetros deslizantes e caixas de valores de set points. A montagem de tais telas depende da visão do processo do programador. Uma técnica de visualização baseia-se numa representação visual e mecanismos de interação que permitem ao usuário a manipulação desta representação, para que o mesmo compreenda os dados que serão representados. O nível de abstração deve ser alto, pois o usuário está somente interessado na observação das características ou padrões no conjunto de dados. A visualização proporciona ao usuário uma percepção visual para melhor análise e compreensão das informações, através da combinação da computação gráfica, interface homem-computador e manipulação de dados. Contanto, cabem aos projetistas de sistemas de visualização definir a melhor forma de representação gráfica, de fácil interpretação. Em uma representação bidimensional de um determinado processo, a imagem é constituída somente de largura e altura, medidos no plano cartesiano como coordenadas x e y. Este tipo de visualização possui uma limitada quantidade de informações que só a representação tridimensional pode demonstrar. Sabe-se que adicionando perspectiva a uma imagem em 2 dimensões, cria-se uma sensação de profundidade e mais realismo à imagem, pode-se observar a diferença entre as duas técnicas na figura 2, apresentada a seguir. descritivas, não terá um detalhamento apropriado da situação. É interessante, no entanto, que a representação seja tridimensional e em movimento, isto é, que todos os eventos sejam fielmente reproduzidos em forma de animação 3D. Quando se trata de percepção, pode-se dizer que animação é a indução da ilusão do movimento a partir do seqüenciamento rápido de imagens estáticas. A partir deste evento, o cérebro humano o interpreta como algo contínuo. As chamadas FPS (frames por segundo) definem o número de imagens que são exibidas por segundo. Em um vídeo em DVD no formato NTSC, a taxa é de 24 FPS. Inicialmente, as técnicas de animação eram baseadas em representação bidimensional, em que cada imagem era desenhada em 2D, e outras em seqüência, formando uma animação. Esta técnica ainda é utilizada hoje em dia, porém com o a utilização de computadores como ferramenta na criação de animações, houve um grande avanço, surgindo a animação de objetos tridimensionais, trazendo também um grande aumento na complexidade. Diferente da técnica de animação 2D, em que desenhos são feitos cena por cena, a animação 3D é baseada em comandos e processos de movimentação de cada estrutura do objeto, que deve ser detalhadamente realizada pelo animador. Isto é, ele deve posicionar manualmente cada articulação do objeto para a animação do mesmo (Figura 3). Quanto mais estruturas móveis existirem em um objeto, mais complexa será a animação do mesmo. Em computação gráfica, quanto maior o número de FPS da animação tridimensional, mais rápida será a animação, e com uma bagagem maior de movimentos representados com maior precisão. Figura 2 Objetos com medidas bi e tridimensionais Fonte: (WRIGHT JR.; LIPCHAK; HAEMEL, 2007, p. 11). A tela do computador mostra uma plana achatada numa superfície plana e não duas imagens com diferentes perspectivas para cada olho. Portanto, o que se pode considerar como gráficos de computação gráfica 3D é na verdade, uma aproximação do verdadeiro 3D. Esta aproximação é feita da mesma maneira que em pinturas de quadros realistas, em que é aplicada uma profundidade aparente, utilizando-se dos mesmos truques que a própria natureza fornece para as pessoas que só possuem um olho. O efeito de perspectiva é proporcionado através da aplicação de efeitos de cores, texturas, iluminação, sombreamento, trazendo à percepção ocular humana uma imagem tridimensional [2]. Com o passar dos anos, tais técnicas foram cada vez mais aperfeiçoadas para criar aplicativos com imagens cada vez mais realistas. O OpenGL traz vantagens quanto à visualização tridimensional devido a sua capacidade atual de performance em gráficos 3D em tempo real, que já são utilizados em diversos tipos de aplicações, sejam de simulação, jogos, arquitetura ou medicina. Quando uma informação é representada na tela de forma estática, pode significar que não há eventos ocorrendo com o sistema, isto é, o usuário ao deparar com uma representação parada na tela, somente com informações Figura 3 Animação tridimensional Fonte: (COMPUTER ARTS,2008). Uma outra ferramenta de animação surgiu para facilitar e aperfeiçoar animações, em especial o movimento do corpo humano, foi a técnica de Captura de Movimento, que inicialmente foi utilizada em aplicações médicas. Posteriormente, a mesma técnica passou a ser utilizada em filmes com efeitos especiais, tais como o Exterminador do Futuro 2 (1993). Esta técnica de captura registra por um processo de amostragem, a posição de cada ponto (sensor) localizado no corpo da pessoa que fará os movimentos a serem capturados como mostrado na figura 4 a seguir. Devido a animação de um corpo humano ser bastante complexa, esta técnica mostra-se mais eficaz para esta utilização [7]. 74
Figura 4 Captura de movimentos Fonte: (CENTRAL PIEDMONT COMMUNITY COLLEGE, 2008) 4 APLICAÇÃO DO OPENGL EM UM SISTEMA AUTOMATIZADO Tanto a animação bidimensional quanto a tridimensional podem ser trabalhadas com o OpenGL, sendo que a animação 3D mostra-se mais atraente, interessante e com uma maior quantidade de informações e detalhes. Quando uma aplicação que utiliza visualização 3D está ligada a um dispositivo a qual será reproduzido todos seus movimentos, a resposta do software é imediata e síncrona com os eventos ocorridos com o dispositivo. Para a comprovação deste, foi desenvolvido um sistema automatizado que possui seus eventos representados e controlados pelo computador. Foi implementado um software capaz de monitorar e controlar um hardware (em forma de maquete) que tem funções de sensoriamento e atuação que serão monitorados pelo software. O hardware tem como função principal a seleção de objetos de acordo com o tamanho especificado pelo usuário. O mesmo identifica os objetos e faz a mensuração dos mesmos, para posteriormente aceitá-los ou rejeitá-lo. Os objetos a serem medidos são constituídos de caixas com cores referentes a cada tamanho (vermelha: 6cm; amarela: 5cm; verde: 4cm e azul: 3cm). O hardware é composto de 5 sensores, 3 atuadores, 2 esteiras e 1 medidor de tamanho. A estrutura física do hardware é constituída de material derivado da madeira chamado MDF (Fibra de Média Densidade), com medidas de 75cm de largura, 74,5 cm de altura e 60cm de profundidade (ver figura 5 a seguir). O software, que é capaz de monitorar o processo em execução, mostrando a exata situação na tela do computador em terceira dimensão. Inicialmente foi confeccionada a maquete virtual do hardware com a utilização do programa de modelagem 3D Studio Max. As partes do hardware foram medidas e modeladas de acordo com sua proporção e cor, tentado ao máximo aproximar a figura tridimensional modelada com a realidade. Foram observados também a movimentação das articulações e partes móveis do hardware para que pudessem ser reproduzidos com o máximo de sincronismo e fidelidade no software. As ferramentas utilizadas para a elaboração do projeto são compostos por programa compilador da linguagem C++, o DEV-C++ na versão 4.9.9.2, em que foi instalada a biblioteca do OpenGL, e a biblioteca auxiliar Glut, para a compilação dos códigos que foram utilizados. Também foi utilizada uma biblioteca auxiliar chamada ModelType, para importar as figuras modeladas do 3D Studio Max, para que sejam animados e utilizados em aplicações do OpenGL. Esta aplicação fornece ao usuário a liberdade para explorar visualmente cada parte do hardware virtual em execução sincronizada com o hardware real. Este monitora e controla o hardware e rejeita os objetos de tamanho especificado pelo usuário. Cada etapa do processo é reproduzida com fidelidade na tela, a movimentação de cada parte do hardware também é representada no software. A figura 5, a seguir, ilustra a tela principal do software. Figura 6 Software que controla e reproduz eventos do Hardware Figura 5 Hardware controlado por software A seguir serão descritos de forma breve algumas funções que o software realiza em conjunto com o hardware, de forma simultânea. Na implementação do software, a animação de cada parte móvel da maquete tridimensional foi programada separadamente, para que cada função responsável pela movimentação de determinada parte pudesse ser chamada independentemente. Foi observado o tempo de movimento de objetos (reais) em cada esteira para que se pudesse estabelecer uma taxa padrão de movimentação dos objetos virtuais, também foi observada a rotação dos motores responsáveis pelos movimentos das esteiras e empurradores. Cada sensor de presença do hardware, localizado em locais estratégicos, envia sinal para o software, que aciona a animação do objeto detectado, trazendo a movimentação correspondente e em tempo real. 75
O sistema desenvolvido tem como função principal a seleção de objetos rejeitáveis de acordo com o tamanho escolhido pelo usuário, e é evidenciada a sincronia de movimentos do real com o virtual. Na fase inicial do processo, o usuário escolhe o tamanho de objeto rejeitável e inicia o sistema. O dispersador de objetos rotaciona e empurra uma caixa para a esteira, e esta segue em movimento contínuo para a seguinte etapa. As figuras 7 e 8 a seguir, foram capturadas ao mesmo tempo em que o processo ocorreu, representando respectivamente os eventos virtual e real. Houve a preocupação de verificar o tempo que este dispersador levava para retornar a sua posição de origem, para que a animação tridimensional do mesmo fosse evidenciada de forma condizente ao dispositivo em movimento e com a caixa que acabou de ser inserida no sistema. Figura 9 Objeto sendo empurrado para a rampa (virtual) Figura 7 Processo iniciado (virtual) Figura 10 Objeto sendo empurrado para a rampa (real) Figura 8 Processo iniciado (real) Em outra fase do sistema, em que o objeto já foi medido, o mesmo chega ao fim da primeira esteira, e é detectado por um sensor que aciona o empurrador de objetos. O empurrador real foi observado e seu movimento rotacional também foi reproduzido em sincronia com o empurrador virtual. Esta etapa é demonstrada nas figuras 9 e 10 (virtual e real). O restante dos procedimentos deste sistema foi programado com a mesma preocupação em manter o sincronismo dos eventos reais com os virtuais, isto é, com a observação no funcionamento e movimentação de cada parte do sistema. 5 CONSIDERAÇÕES FINAIS O OpenGL pode fornecer uma visualização tridimensional, permitindo uma maior compreensão e melhor acompanhamento do processo. Pode-se observar o processo em qualquer ângulo e qualquer ponto de visualização. Também foi verificada a eficiência dos seus comandos, os quais resultam em uma representação condizente e síncrona com o dispositivo que o mesmo representa. Além deste acompanhamento visual mais eficiente, o OpenGL pode oferecer uma gama de possibilidades que podem constituir novos projetos com novas funcionalidades. Algumas delas podem ser citadas como detecção de erros e possíveis problemas no sistema, a utilização da captura de movimentos utilizando o OpenGL como biblioteca gráfica, experimentos científicos em tempo real e outros. As possibilidades que a visualização tridimensional traz para o acesso a informações são muitas, pois enriquece a bagagem de informações que o sistema traz, resolvendo problemas que a visualização bidimensional não poderia solucionar. Recursos tais como a captura de movimento podem ser utilizadas em conjunto com o OpenGL para a criação de aplicações com resposta cada vez mais rápido, tais como na área médica, em que um movimento do corpo humano pode capturado para avaliação de ossos ou outras partes. A captura de movimentos também pode ser aplicada em programas que exigem o controle da mão humana, isto é, para pegar e executar certas operações que simulam 76
a mão humana, tais como aplicações em realidade virtual que simulam um objeto que pode ser movido através de movimentos com as mãos do usuário através de dispositivos de captura como por exemplo uma luva com sensores. Uma visualização para ser mais eficaz, deve conter o máximo de informações possíveis numa apresentação, porém deve ser de fácil interpretação. 6 REFERÊNCIAS [1] TUFTE, E. R. The visual display of quantitative information. Cheshire, CT: Graphics Press, 1983. [2] WRIGHT JR., Richard S.; LIPCHAK, Benjamin; HAEMEL, Nicholas. Opengl: superbible. Ed. 4. EUA: Addison-Wesley, 2007 [3] HAWKINS, Dave Astle, Kevin. Beginning opengl game programming. Course PTR, 2004 [4] BARBOSA SOBRINHO, Marcionílio, Tutorial de utilização do pengl, 2003 [5] ROMANI, Luciana A. S.; DA ROCHA, Heloísa V. O uso de técnicas de Visualização como subsídio à formação de comunidades de aprendizagem em EaD. 2001 [6] STASKO, J.; DOMINGUE, J.; BROWN, M.H.; Price, B. A. Software visualization programming as a multimedia experience. Massachusetts: MIT Press. 1997. [7] VIEIRA DA SILVA, Fernando W. S.; Um Sistema de Animação Baseado em Movimento Capturado, 1998 [8] ANAND, Vera B. Computer graphics and geometric modeling for engineers. NewYork: John Wiley & Sons, 1993 [9] CENTRAL PIEDMONT COMMUNITY COLLEGE. Laboratories/Studios. Disponível em: << http://www.cpcc.edu/smv/labratories-studios>> Acesso em: Nov de 2008 [10] COHEN, Marcelo; MANSSOUR, Isabel. Opengl: uma abordagem prática e objetiva. Editora Novatec, 2006 [11] COMPUTER ARTS. Rigging complex joints. Disponível em: << http://www.computerarts.co.uk/tutorials/3d and an imation/rigging_complex_joints >> Acesso em: Nov de 2008 [12] FREITAS, Carla Maria Dal Sasso; CHUBACHI, Olinda Mioka Introdução à visualização de informações: revista de informática teórica e aplicada. Volume VIII. Número 2, 2001 77