DESENVOLVIMENTO DE FILMES SOBRE FENÔ MENOS DA FÍSICA, QUÍMICA E MATEMÁTICA BASEADO EM UM VISUALIZADOR 3D Lú cio Cézar S. Rebouças (IC) a, José Silvério E. Germano b a Divisã o de Ciência da Computaçã o, ITA, CTA, 12228-900, Sã o José dos Campos, SP, Brasil b IEFF, Departamento de Física, ITA, CTA, 12228-900, Sã o José dos Campos, SP, Brasil Neste trabalho implementamos uma nova versã o do programa RhindGL, um visualizador de fenômenos físicos feito em C++ para Windows 95/98 criado em uma iniciaç ã o científica anterior, acrescentando-lhe novas funcionalidades, tais como a visualizaç ã o de molé culas químicas em 3 dimensõ es, o plot de funç õ es da forma z = f(x, y) e a criaç ã o de arquivos em formato de vídeo a partir da captura de telas das possíveis simulaç õ es. The goal of this work is a implementation of a new version of RhindGL, a physical phenomena software vizualization in C++ for Windows 95/98 created in a previous scientific iniciation, increasing it new functionalities, like 3 dimensional chemical molecules visualization, vizualization of z = f(x, y) mathematical functions and the possibility of construction of files in video format using screens captured from the simulations in RhindGL. Keywords: OpenGL; GLUT; MFC; simulaç ã o 3D; RhindGL; PDB; AVI 1. INTRODUÇ Ã O Com o rá pido crescimento que a informá tica tem tido nos ú ltimos anos, uma á rea em especial, denominada computaçã o grá fica, tem se tornado uma grande aliada em vá rios ramos do conhecimento. Além das aplicações convencionais em á reas da engenharia, tais como: construçã o de protótipos de automóveis sofisticados, visualizaçã o do interior de ambientes antes de serem construídos, simuladores de aviões, temos também importantíssimas aplicações na medicina, como por exemplo: tomografia computadorizada, ultra-sonografias que constróem imagens em 3 dimensões com alto grau de detalhamento a ponto de se poder visualizar o rosto de uma criança antes do seu nascimento .... Com a popularizaçã o dos computadores pessoais, desenvolveu-se também um grande segmento da computaçã o grá fica, que sã o os excelentes jogos em 3D que existem hoje em dia para PC's. Toda essa tecnologia de software que foi desenvolvida para a criaçã o dos jogos, foi trazida de aplicações em simuladores militares que tiveram grande expansã o no final da década de 80. Uma outra importante vertente da computaçã o grá fica, que tem chamado a atençã o nos ú ltimos anos, é o segmento da educaçã o denominado ensino a distancia. Com a crescente rapidez e confiabilidade das conexões via Internet, já é possível se pensar hoje em dia na criaçã o de ambientes virtuais onde se pode disponibilizar cursos online dos mais variados assuntos. Dentro dessa filosofia, o departamento de física do ITA tem um projeto de ensinar física bá sica utilizando recursos de informá tica, tanto dentro do ambiente da sala de aula bem como pela Internet. Dessa forma, a criaçã o de simulações de fenômenos físicos, de preferência em 3D é de fundamental importância para dar suporte a projetos ligados ao ensino da física. Uma das formas mais eficientes de se disponibilizar essas simulações é através de um ambiente virtual de fá cil interatividade com o usuá rio, com a possibilidade de poder salvar suas animações em formato de vídeo, para possível reproduçã o em outros computadores ou na Internet. Em uma iniciaçã o científica anterior, foi primeiro desenvolvido um ambiente virtual (chamado RhindGL) onde se podia observar animações em 3D dos fenômenos físicos estudados, com a possibilidade do usuá rio ter um alto grau de interatividade com o software a fim de facilitar o processo de visualizaçã o. A versã o 2.0 do RhindGL que foi desenvolvida nesta iniciaçã o científica, teve como objetivo a adiçã o de novas funcionalidades à versã o anterior. Dentre essas novidades podemos citar: inclusã o da possibilidade de se estudar funções em 3D que sã o fundamentais no estudo da matemá tica, animações de moléculas químicas em 3D como ferramenta no auxílio no estudo da química e a possibilidade de salvar qualquer dessas animações em formato de vídeo. 2. A VERSÃ O RHINDGL 1.1 A versã o 1.1 do visualizador RhindGL foi feita para o ambiente Windows em C++, utilizandose OpenGL[0] (Open Graphics Library), que é um pacote de funções para a construçã o de aplicativos interativos em 3 dimensões, compatível às linguagens C e C++. Devido a OpenGL nã o possuir a parte de interface com o usuá rio, utilizamos o compilador Microsoft Visual C++ que possui as facilidades da Microsoft Foundation Class Library (mais conhecido como MFC)[1] para interaçã o com o usuá rio. A primeira simulaçã o escolhida para ser implementada em RhindGL 1.1 foi a simulaçã o de interferência de ondas circulares. Essa simulaçã o possui a possibilidade de termos a interferência de até 3 ondas, onde cada uma delas pode possuir características diferentes. Para ficar mais fá cil a visualizaçã o das cristas e dos vales da onda resultante, colocamos uma tonalidade de cores, que vã o do azul ao vermelho, passando pelo verde (ver figura 1). Figura 1: RhindGL 1.1 com a simulaçã o de uma onda circular tridimensional Com o auxílio do mouse, podemos rodar o objeto enquanto a animaçã o está acontecendo, podendo também usar efeitos de zoom, tanto através do teclado quanto através de ícones na barra de ferramentas. Podemos também salvar os parâmetros de uma dada simulaçã o em um arquivo de simulaçã o do tipo *.rhi para que esta simulaçã o possa ser novamente carregada pelo programa. 3. A VERSÃ O RHINDGL 2.0 Pensamos em adicionar novas funcionalidades à versã o 1.1 de RhindGL. As funcionalidades escolhidas foram: · Construçã o de moléculas químicas; · Visualizaçã o de funções matemá ticas da forma z = f(x, y); e · Criaçã o de arquivos em formato de vídeo a partir da captura de imagens das simulações. Utilizando os ícones da barra de tarefas na seqüência com que eles sã o habilitados, conseguimos gerar um arquivo AVI. Saiba que: · ISC (Init Screen Capture): inicia a captura de telas para a formaçã o do arquivo AVI com uma dada freqüência e uma dada qualidade. · SSC (Stop Screen Capture): finaliza a captura de telas para a formaçã o do arquivo AVI. · AVI: Cria o arquivo AVI em um diretório determinado pelo usuá rio a partir das telas capturadas anteriormente. Estes ícones sã o habilitados na barra de ferramentas conforme a demanda. A barra de ferramentas, com as novas funcionalidades, é mostrada a seguir: Figura 2: A barra de ferramentas da versã o 2.0 de RhindGL · · Assim, a versã o 2.0 de RhindGL tem a capacidade de salvar dois tipos de arquivo diferentes: Arquivos de simulações (*.rhi) que guarda os parâmetros de cada simulaçã o; e Arquivos em formato de vídeo (*.avi). 4. CONSTRUÇ Ã O DE MOLÉ CULAS QUÍMICAS Através de buscas na internet sobre a existência de visualizadores específicos para moléculas químicas em 3 dimensões, encontramos vá rios ambientes de construçã o de moléculas químicas foram encontrados e entre eles havia vá rios tipos de arquivos que guardavam as moléculas, dentre eles havia um tipo de arquivo muito interessante: o tipo PDB [2]. PDB (Protein Data Bank) é um formato de arquivo onde estruturas de macromoléculas biológicas sã o descritas de maneira tridimensional. Muitas dessas macromoléculas possuem estruturas que foram determinadas experimentalmente. Esse formato de arquivo serve uma grande comunidade de pesquisadores e estudantes. Um exemplo: a molécula de metano. ATOM 1 C1 xxx 1 -0.000 0.000 -0.000 ATOM 2 H2 xxx 1 -0.531 -0.164 0.964 ATOM 3 H3 xxx 1 0.713 0.848 0.110 ATOM 4 H4 xxx 1 0.559 -0.922 -0.277 ATOM 5 H5 xxx 1 -0.740 0.238 -0.796 TER CONECT 1 2 3 4 5 CONECT 2 1 CONECT 3 1 CONECT 4 1 CONECT 5 1 END Nesta busca, encontramos também um programa[3] que convertia arquivos PDB em dois arquivos em C com códigos em OpenGL. Como o nosso projeto foi feito em C++, tivemos que adequar esses códigos gerados de C para C++ e incluímos no projeto da nova versã o de RhindGL. Feitas as adequações, a versã o 2.0 de RhindGL conta com 4 moléculas químicas para visualizaçã o: uma molécula de metano (ver figura 2a), uma de ciclohexano (ver figura 2b), uma de ATP (Adenosina Tri-Fosfato) (ver figura 3a) e um trecho da estrutura cristalina de um diamante (ver figura 3b). 5. A VISUALIZAÇ Ã O DE FUNÇ Õ ES A partir do término da implementaçã o da animaçã o de interferência de ondas em um plano, vimos uma nova linha de açã o que poderia ser seguida para o crescimento do projeto do visualizador: a visualizaçã o de funções do tipo z = f(x, y), onde x, y e z sã o referencias ao sistema de coordenadas retangulares (ver figuras 4 e 5). Percebemos que a classe utilizada para criarmos a animaçã o de interferência de ondas circulares já existente no visualizador, a classe CGLWave, poderia ser reutilizada para a visualizaçã o das funções do tipo z = f(x, y), em coordenadas retangulares, pois o que muda é somente a equaçã o a ser plotada. Esta classe desenha uma grade de polígonos retangular no espaço e centrada na origem, onde cada vértice de um polígono possui uma tripla (x, y, z = f(x, y)). O par (x, y) da a posiçã o da projeçã o desse vértice no plano xy e z nos dá a distância do vértice a essa sua projeçã o. (a) (b) Figura 2: (a) Molécula de metano e (b) molécula de cicloHexano (a) (b) Figura 3: (a) Molécula de Adenosina Tri-Fosfato (ATP) e (b) estrutura cristalina de um diamante. (a) (b) Figura 4: Funçã o f(x, y) = x*sin(y)+y*sin(x) como: (a) saída do visualizador e (b) saída no Maple. (a) (b) Figura 5: Funçã o f(x, y) = sin(x) + cos(y) como: (a) saída do visualizador e (b) saída no Maple. 6. ARQUIVOS EM FORMATO DE VÍDEO O formato AVI[4] (Á udio Vídeo Interleaved) é um formato de multimídia criado pela Microsoft. Em um arquivo AVI, os elementos de vídeo sã o guardados alternadamente no arquivo, daí o nome interleaved. Na pesquisa sobre a criaçã o de arquivos AVI, encontramos um programa, com o código fonte livre[5], que tem como entrada uma seqüência de arquivos BMP onde a ordem de inserçã o desses arquivos em uma fila determina a ordem com que as respectivas imagens serã o colocadas no arquivo AVI. Dividimos a criaçã o do arquivo AVI em duas partes: · A captura das imagens da simulaçã o; e · A criaçã o do arquivo AVI propriamente dito. 6.1 A Captura de imagens Para que tenhamos a impressã o de animaçã o no futuro arquivo em formato de vídeo, devemos capturar as telas a uma dada freqüência. Para tal, utilizamos o conceito de threads[6] para que a captura das telas possa ser feita enquanto a simulaçã o esteja ocorrendo. As telas capturadas sã o convertidas em arquivos BMP. Os arquivos BMP gerados na má quina do usuá rio serã o deletados após o término da criaçã o do arquivo AVI correspondente. 6.2 A Criação do arquivo em formato de vídeo Para a criaçã o do arquivo AVI, criamos uma thread assim como foi feito para a captura das imagens. Isso serviu para garantir que as animações iriam continuar sendo mostradas sem falhas na tela. Esta thread coloca os arquivos BMP dentro de um streaming AVI a uma dada freqüência definida pelo usuá rio do programa e como foi mencionado anteriormente, no final da criaçã o do arquivo AVI, os arquivos BMP’s sã o deletados. 7. CONCLUSÕ ES Como produto final desta iniciaçã o científica criamos um visualizador de fenômenos físicos em 3 dimensões, de funções matemá ticas e de moléculas químicas. O usuá rio deste programa pode escolher 3 tipos diferentes de simulaçã o: · interferência de ondas circulares; · visualizaçã o de moléculas químicas; e · visualizaçã o de funções da forma z = f(x, y). Na simulaçã o de interferência de ondas circulares, o usuá rio pode entrar com os parâmetros da simulaçã o. Já nos outros dois casos, o usuá rio pode escolher uma molécula química ou uma funçã o para ser visualizada mas nã o pode modificar determinados parâmetros além da posiçã o de câmera, tais como, cores dos á tomos no caso da simulaçã o de moléculas químicas e . O usuá rio tem a possibilidade de criar arquivos de simulaçã o (do tipo *.rhi) salvando os parâmetros de cada simulaçã o e arquivos em formato de vídeo (*.avi) gerados a partir da animaçã o das simulações existentes no programa. Como sugestões para continuaçã o deste trabalho, podemos citar: · O aumento da quantidade de simulações de fenômenos físicos, moléculas químicas e funções em 3 dimensões; · A diminuiçã o do tamanho dos arquivos em formato de vídeo escolhendo outro formato de compressã o, como por exemplo, MPEG; · A implementaçã o da escala numérica das funções plotadas; · Transformar o fundo das simulações transparentes, ou seja: fazer o fundo cinza das figuras acima ficarem transparentes quando for implementada uma funçã o print no visualizador. AGRADECIMENTOS Agradecemos o apoio do PIBIC-CNPQ pelo auxílio financeiro dado. Gostaríamos de agradecer também ao Prof. José Silvério Edmundo Germano por ter acreditado que o trabalho poderia ser feito, mesmo para uma pessoa que tinha pouco contato com programaçã o em geral. Gostaríamos de agradecer também ao Prof. Fá bio Carneiro Mokarzel1 por ter dado todo o apoio técnico e sempre disponível para debater e tirar dú vidas. REFERÊ NCIAS BIBLIOGRÁFICAS [0] OpenGL Tutorial: http://nehe.gamedev.net/ http://www.sgi.com/software/opengl/ [1] MFC Tutorial: Special Edition Using Visual C++ http://nps.vnet.ee/ftp/Docs/C/Using%20Visual%20C++%206/ [2] PDB User’s Guide: http://www.rcsb.org/pdb/docs/format/pdbguide2.2/guide2.2_frame.html [3] 3Dwin4: http://www.stmuc.com/thbaier/ [4] AVI File Creation: http://www.shrinkwrapvb.com/avihelp/avihelp.htm [5] CAvi Source Code: http://www.programmersheaven.com/zone10/cat542/15375.htm [6] Using Threads in C++: Special Edition Using Visual C++ - Chapter 27 1 O Prof. Fá bio Carneiro Mokarzel é Professor Doutor e atual Chefe do Depto. de Engenharia de Software da Divisã o de Ciência da Computaçã o do ITA.