Animações Gráficas com Linguagens de Programação

É bem provável que o primeiro contato com a informática e computação gráfica, hoje, venham dos jogos de videogame. Do primitivo PC XT até chegar as modernas estações SILICON hoje, houve um grande trabalho em todas as etapas da evolução da informática para se obter o máximo com o mínimo de evolução que se obtinha em termos gráficos. Desde os tempos dos jogos de ATARI ninguém ficou esperando muito para que algo melhor surgisse e botaram a mão na massa.

Existe quem tenha tentado fazer animações usando caracteres ASCII, usando um padrão de formatação de textos chamado ANSI. Para quem é do tempo das BBS, deve se lembrar disso. Um exemplo desse tipo de animação pode ser visto em http://www.asciimation.co.nz/.

Entretanto, um outro tipo de segmento na indústria de software, diferentemente dos “artistas” que faziam esse tipo de animação, estava interessado em usar animações em seus programas: o segmento de jogos em computador.

O desafio de se fazer animações no computador, com qualidade, sempre foi um dos mais importantes objetivos para o que hoje se chama de indústria de entretenimento eletrônico. Maior ainda para os programadores de plantão, que geralmente “estufam o peito” e fazem muitas coisas “no braço”. Hoje, jogos como Final Fantasy X (http://na.square-enix.com/games/FFX/) não são nada sem a avançada técnica da animação que o jogo possui.

Bem, sem toda a pretensão de se fazer um Final Fantasy X no seu computador apenas lendo este artigo, mostraremos como fazer uma animação extremamente simples usando a linguagem C e uma biblioteca gráfica disponível na internet.

Linguagem C e Allegro

Para executar a nossa “proeza” de fazer uma animação gráfica, usaremos a linguagem C e sua estrutura. Recomendamos o compilador GCC, disponível em versões para quem usa Linux (http://www.gnu.org/software/gcc/gcc.html), DOS através do DJGPP (http://www.delorie.com), ou Windows através do MingW (http://www.mingw.org) ou Cygwin (http://sourceware.cygnus.com/cygwin/).

O responsável pela “mágica” da animação e quem vai facilitar a nossa vida na programação é a biblioteca gráfica Allegro (http://alleg.sourceforge.net/).

A Allegro é uma biblioteca multimídia desenvolvida para a programação de jogos. Para quem estiver usando DJGPP, basta descompactar o Allegro dentro do diretório do DJGPP com os diretórios padrão e entrar no diretório “…allegro”. Digite “make”. A biblioteca irá se compilar automaticamente. Então digite “make install” para instalar a biblioteca.

A respeito do texto, apesar de utilizarmos a linguagem C como referencial, ele se destina a programadores de outras linguagens com outras bibliotecas gráficas, bastando para adaptar as técnicas apresentadas, observar o código fonte disponível aqui no site e os respectivos comentários a cada função.

Um ponto que nos motivou a utilizar a biblioteca Allegro é que ela é multiplataforma e possui versões para Windows, Macintosh, Linux e outros ambientes, podendo ser utilizada por inúmeros compiladores. Por isso, entendemos que a abrangência desse texto seria maior do que se utilizássemos Delphi ou outra linguagem/ferramenta.

Para aprender a instalar a biblioteca gráfica Allegro em diferentes plataformas, sugerimos que você leia os arquivos “*.txt”, no diretório “…allegrodocsbuild” e veja o arquivo mais apropriado a sua necessidade (DJGPP.txt, MSVC.txt, UNIX.txt, etc…).

O que é uma animação?

Animação é fazer com que coisas dêem a impressão de movimento. No computador, assemelha-se a produção de um desenho animado, onde várias figuras, levemente diferentes, serão sobrepostas a uma velocidade que você não perceba que isto está acontecendo, dando assim a impressão de movimento. Uma animação será tão mais perfeita quanto mais quadros houverem entre os estados inicial e final da animação.

Para a criação de uma animação usando uma linguagem de programação, temos duas formas a seguir, para criarmos nossos “quadros”:

  1. Criar os quadros todos na memória, utilizando-se de rotinas da biblioteca gráfica, como linhas e círculos (para saber mais sobre funções gráficas básicas de alegro, veja o nosso tutorial de allegro na seção Textos e Artigos);
  2. Utilizar imagens criadas/capturadas em outros programas, como Corel Photopaint e Adobe PhotoShop.

Cada uma dessas técnicas tem vantagens e desvantagens. No primeiro caso, conseguiremos uma boa “economia” de memória, porém, criar imagens complexas pode ser uma tarefa realmente complicada. No segundo caso, o quadros criados externamente são inseridos facilmente com as rotinas da biblioteca, entretanto, a alteração dessas imagens se torna realmente difícil por meio do código do programa, de modo que essas alterações pareçam tranparentes.

Utilizando-se estas duas técnicas, uma complementando a outra, podemos elaborar cenários complexos e flexíveis conhecendo apenas algumas poucas funções básicas da biblioteca gráfica, como veremos adiante.

EXEMPLO 1: O programa a seguir demonstra, através de comandos gráficos simples, uma animação de um círculo na tela.

[c]
#include <conio.h> /* Necessário para a função getch() */
#include <allegro.h> /* Cabeçalho da biblioteca */
int main()
{
/* Variável inteira. Importante para o laço for */
int x;
/* Inicializa a biblioteca gráfica */
allegro_init();
/* Autodetecta a placa de vídeo e usa resolução de 640×480 */
set_gfx_mode(GFX_AUTODETECT,640,480,640,480);
/* instala timer. Não é importante agora, serve aqui a função rest() abaixo funcionar */
install_timer();
/* desenha o primeiro círculo , na posição 0,100, com raio 100*/
circlefill (screen, 0, 100, 100, 15);
/* loop para animação através da tela */
for (x = 1; x < 320; x++) {
/* faz pequena pausa para se enxergar a animação*/
rest (10);
/* apaga circulo anterior */
circlefill (screen, x – 1, 100, 100, 0);
/* desenha novo circulo em nova posição */
circlefill (screen, x, 100, 100, 15);
}
/* Aguarda uma tecla ser presionada */
getch();
/* Termina a biblioteca Allegro*/
allegro_exit();
/* termina main() de forma padrão */
return 0;
}
/* Macro do Allegro para que o programa seja compilado corretamente em plataformas diferentes do DOS */
END_OF_MAIN();
[/c]

Flickering

Ao executar o programa, percebemos que existe uma tremulação no círculo. Se não ocorreu nada, experimente aumentar os valores do raio em “circlefill” (é o penúltimo parâmetro) para 150 ou mesmo 200. Se ainda assim nada aconteceu, parabéns! Você tem um supercomputador! Mas nós, meros mortais, teremos esse “problema”. O que aconteceu é o chamado efeito de flickering (tremulação, em inglês).

O efeito flickering acontece porque o desenho do círculo deve ser feito ao mesmo tempo que o monitor atualiza a tela do monitor. Quando desenhamos na memória de vídeo diretamente, como fizemos no exemplo, há uma falta de sincronia entre o que está sendo desenhado e o que se está desenhando na memória de vídeo naquele momento. É exatamente o mesmo efeito que acontece quando tentamos filmar uma televisão em uma câmera de vídeo. Ao ver o filme, percebemos uma tremulação na imagem da televisão filmada. É a falta de sincronia entre as imagens exibidas e as que estão sendo desenhadas no filme.

Double Buffering

Para solucionar o problema, existem várias técnicas de programação. A mais simples e comum consiste na técnica do double buffering. Nessa técnica criamos um buffer onde desenhamos toda a tela antes de enviarmos a tela ao vídeo. Desta forma a tela é atualizada inteiramente e de uma só vez, eliminando o problema do flickering.

O ponto forte dessa técnica é o fato de ser facilmente implementada e funcionar muito bem na grande maioria dos casos, servindo também como ponto de partida para técnicas mais avançadas, como o triple buffering, dirty rectangles, entre outros.

EXEMPLO 2 – ([download id=”4″]) O exemplo 2 você poderá baixar na área de download deste site. Consiste no mesmo programa do exemplo 1, com a adição da técnica de double buffering. Adicionamos também, uma animação de uma seqüência de figuras criadas externamente exemplificando assim todas as técnicas e recursos citados acima. Leia atentamente os comentários no código do programa, pois o código mostra o que faz cada função.

É claro que este artigo não esgota de maneira alguma o que se pode falar sobre animação gráfica. Mas conseguimos explicar um pouco a respeito de um dos maiores problemas ao tentar se fazer uma animação gráfica com linguagens de programação. O programa apresentado aqui pode parecer trivial, mas é o fundamento para outras coisas mais interessantes, como programação de jogos. É claro que você pode estar vendo apenas uma bola andando na tela. Eu, ao contrário, vejo a “estrela da morte” se preparando para entrar em ação. Use você também a sua imaginação. O próximo grande jogo/animação da temporada pode ser o seu…

Até a próxima.

Mecanismos disponíveis para a avaliação de aprendizes através de computadores

Por Dalton Lopes Martins

1. INTRODUÇÃO

Avaliar, sob determinada visão pedagógica, é questionar e refletir sobre o processo de transmissão da informação e a forma como essa informação transforma-se em conhecimento. A computação e a ciência da informática trouxeram a automatização de vários processos técnicos, científicos e industriais. A questão em relevância no contexto desse artigo é de que forma a avaliação pode ser encarada como um processo, de que forma a computação pode se inserir nesse processo para automatiza-lo, através dos mecanismos de que dispomos hoje.

2. EMBASAMENTO

O levantamento bibliográfico para o embasamento deste artigo levou em consideração questões que pudessem levantar reflexões a respeito do processo da avaliação, em primeiro momento. A partir disto, quando esse processo foi melhor compreendido, passou-se a pesquisar a forma como a avaliação pode ser realizada através do uso de computadores. Tendo como referência temas como agentes, lógica fuzzy, bancos de dados e analisadores de lingüísticos, o resto dos artigos complementou a informação necessária nos temas acima citados.

3. OPINIÃO

Segundo o artigo “O processo de avaliação na educação à distância”, há várias formas diferentes de se enfocar a avaliação: tradicional (utiliza de verificação de curto prazo e prazo mais longo; punição e reforço positivo), tecnicista (avaliação de comportamentos observáveis e mensuráveis, controle de comportamento face a objetivos pré-estabelecidos), libertadora (a verificação direta da aprendizagem é desnecessária, pois a avaliação ocorre da prática vivenciada entre educador/educando e a auto-avaliação em termos de compromisso assumido com a prática social), progressista (a avaliação é realizada a qualquer momento, pois sua preocupação é diagnosticar falhas e valoriza outros instrumentos que não as provas). Dentro do contexto de cada uma das formas acima mencionadas, os computadores podem ser usados.

No entanto, antes de se partir para uma análise propriamente dita dos mecanismos disponíveis para a avaliação de aprendizes através dos computadores deve-se questionar o que se deseja avaliar. Em uma abordagem generalista, o artigo “Evaluation for distance educators” enumera uma série de pontos a serem observados a esse respeito: uso da tecnologia, formato das aulas, clima do curso, quantidade e qualidade da interação com outros estudantes e com o professor, conteúdo do curso, testes, serviços de suporte, realizações dos estudantes, atitude dos estudantes e o professor. Esses tópicos oferecem variadas métricas que podem se adaptar a diferentes visões pedagógicas a respeito do processo da avaliação, rompendo a barreira limitante da visão tradicional.

Algumas ferramentas que podem auxiliar no processo de obtenção e análise dessas métricas acima mencionadas são propostas nos artigos de embasamento. O artigo “Ferramentas de análise e acompanhamento de cursos” propõe uma técnica que analisa o log (arquivo de registro de acesso de páginas http) gerado automaticamente pelos servidores e realiza uma filtragem de onde é gerado um arquivo com as informações mais relevantes (identificação do usuário, data e hora da utilização e a página acessada). Dessa forma pode-se gerar um banco de dados e analisar as informações para se levantar características comportamentais do usuário em relação ao sistema.

Já em PEREIRA RODRIGUES (2000), propõe uma técnica de avaliação através de agentes, que podem interagir com o ambiente, comunicando-se com outros agentes, influenciando o comportamento dos mesmos, ou seja, possibilitando a mudança de estratégia ou metodologia de ensino, caso se perceba um baixo desempenho do estudante.

Dessa forma, o agente interage com as ações do estudante no sistema computacional e pode auxiliar na análise de vários quesitos que não podem ser diretamente medidos através de provas e testes tradicionais. Já em ZHOU (1999), é proposta uma técnica baseada em lógica fuzzy, que está ligada a análise de situações onde não há condições de contorno bem definidas para um conjunto de atividades ou observações, dando determinados pesos a certas ações previamente estabelecidas e obtendo-se uma métrica relativa a essa análise. Essas algumas das ferramentas propostas e que somente podem ser implementadas através do auxílio de computadores.

No artigo “O processo de avaliação na educação à distância” é mencionado alguns sistemas de avaliação na web. Vale a pena aqui citar alguns. CyberQ é um sistema onde tem-se a implementação de uma estratégia de avaliação multi-característica e multi-método de vários alunos e em diferentes níveis, agregando um grande número de informações para avaliações futuras. Carnegie Mellon University é um sistema baseado em bancos de dados, onde é armazenado todo o conteúdo do curso, através de informações declarativas, e processadas por um sistema genérico. WebCT é um sistema que tem a capacidade de registrar conversas em um banco de dados, permitindo o monitoramento dessa conversação; também permite gerar perguntas on-line que são feitas enquanto o aluno está acessando a página.

Todos esses sistemas agregam determinadas técnicas e tecnologias que permitem várias abordagens pedagógicas e praticamente contemplam todas os pontos sugeridos como métricas para a realização de uma avaliação completa do processo educativo, permitindo-se considerar diferentes perfis de estudantes, suas capacidades e limitações, possibilitando-se dessa forma que a avaliação fuja da estigma de um processo traumático para o estudante e se torne um mecanismo de construção efetivo do conhecimento.

4. CONTRA-POSIÇÃO

Em P. de SOUZA, é dito que um sistema de perguntas e respostas por computador deve ter suas respostas bem programadas, sem a menor chance de gerar dúvidas. Acredito que isso seja um ponto consideravelmente limitante do uso computador, não permitindo e abrindo espaço para a criação de padrões novos de resposta, tornando-se o processo algo mais mecanizado e padronizado do que se deveria esperar de uma avaliação completa do processo educativo.

5. BIBLIOGRAFIA

1. O processo de avaliação na educação à distância. Universidade Federal do Rio Grande do Sul.
2. Ferramenta de análise e acompanhamento de cursos. Projeto Sapiens, Unicamp, 2000.
3. Evaluation for Distances Educators. College of Engineering, University of Idaho.
4. P. DE SOUZA. A avaliação como prática pedagógica. Associação Brasileira de Educação Agrícola Superior – ABEAS.
5. PEREIRA RODRIGUES, Alessandra, (2000). Agente avaliação de ensino e aprendizagem em EAD. Universidade Federal do Rio Grande do Sul, 2000.
6. ZHOU, Duanning, MA, Jian, QIJIA, Tian, KWOK, Ron C. W., (1999). Fuzzy group decision support system for project assessment. Proceedings of the 32nd Hawaii International Conference on System Sciences, 1999

Uso do Collaborative Virtual Environment (CVE) na aprendizagem Colaborativa

Por Dalton Lopes Martins

1. INTRODUÇÃO

Segundo LOGAN et al. (2001), os ambientes colaborativos virtuais (CVE) são formados por mundos virtuais que fornecem gráficos 3-D em tempo real, complementados com texto e/ou áudio para vários usuários conectados em uma rede de computadores. Essa abordagem fornece os elementos técnicos básicos para a aplicação dos CVEs na aprendizagem colaborativa, permitindo-se dessa forma que ocorra interação entre os diversos usuários conectados ao sistema, como já visto anteriormente, através de troca de mensagens, seja por texto ou áudio. No entanto, os CVEs permitem um avanço na forma como se dá a interação através da criação de uma nova metáfora: a interação no espaço virtual.

2. EMBASAMENTO

Para o estudo do tema em questão, alguns pontos de referência para pesquisa foram importantes de forma a permitir uma visão geral. Para tanto, temas como o que é a realidade virtual, como se dá a troca de informações em ambientes CVE, exemplos de ambientes já implementados e suas aplicações em abordagens educacionais foram pesquisados. Os artigos utilizados abordam esses temas de maneira geral, proporcionando o questionamento e a introdução necessária ao tema. Vale destacar o artigo de MANIA e CHALMERS pelo trabalho feito na catalogação e análise de alguns sistemas CVE já implementados. A parte da pesquisa sobre realidade virtual foi baseada nos textos de referência da disciplina nos semestres passados.

3. OPINIÃO

Um ambiente virtual colaborativo (do inglês collaborative virtual environments – CVE) usa a tecnologia de realidade virtual distribuída para suportar o trabalho em grupo. Um CVE deve possuir acesso simultâneo multi-utilizador a um sistema de Realidade Virtual (VR) que permita realizar trabalho cooperativo (BORGES GOUVEIA). Dessa forma, a compreensão da nova metáfora implementada pelos CVEs passa necessariamente pela compreensão do papel da realidade virtual como tecnologia de suporte à cooperação.

Segundo o trabalho de SEROLLI PINHO (1996), a realidade virtual nos permite aprender visitando lugares onde jamais estaremos na vida real, talvez porque o lugar seja muito pequeno para ser visto ou muito grande para ser examinado como um todo, ou muito caro ou muito distante. A potencialidade da realidade virtual está exatamente no fato de permitir que exploremos alguns ambientes, processos ou objetos, não através de livros, fotos, filmes ou aulas, mas através da manipulação e análise virtual do próprio alvo de estudo, sendo que dessa forma, permite-se que o estudante aprenda sobre um assunto inserido no contexto deste assunto e assim receba, a cada ação que fizer, uma realimentação desse contexto.

De tal maneira, o impacto da realidade virtual na aprendizagem colaborativa leva a uma análise de três pontos em específico: o raciocínio espacial, o nível de interesse e o aprendizado individual (AINGE). Usuários que usam a realidade virtual para explorarem perspectivas e relações espaciais auxiliam no seu próprio desenvolvimento do raciocínio espacial, o que era mais difícil antes da VR, devido ao alto nível de abstração exigido. O uso de mundos virtuais pode ser extremamente estimulante, pois estimula a fantasia, a curiosidade e o desafio. O uso da VR também auxilia no desenvolvimento da individualidade no ensino devido ao fato de serem os usuários do sistema que decidem o que fazer e quando fazer. Sendo assim, a realidade virtual pode agregar os elementos que vão permitir a efetiva cooperação, através dessa nova metáfora espacial que surge no ambiente CVE como forma de interação que traduz o contato real para um mundo virtual.

Como essa interação se dá de forma contínua no mundo real, através da aquisição de notícias sobre andamento de projetos, etapas já realizadas ou a serem realizadas de um trabalho, posição que cada membro do grupo ocupa, entre outros fatores, o mesmo torna-se necessário para dar continuidade a interação em mundos virtuais oferecidos pelos CVE. Para isso, LOGAN et al. (2001) discutem o papel dos agentes como observadores e relatores do que acontece em mundos virtuais quando um usuário não está conectado. Esses agentes têm o papel de relatarem informações de posição de usuários no mundo virtual, informações de áudio, formas de ação de outros usuários, foco de atenção, entre outras informações que possam ser relevantes ao usuário no momento em que este voltar a se conectar no mundo virtual. Essa abordagem também pode ser encontrada no trabalho de MIAO e HAAKE (2001).

Vale citar alguns sistemas, como referência, que implementam algumas das idéias acima expostas (MANIA e CHALMERS): DIVE, MASSIVE, VLNet, dVs, Active Worlds, Blaxxun, OnLive!, OZ Virtual, Community Place, Quake, Worlds Chat, SPLINE.

Pensando no novo paradigma apresentado pela aprendizagem colaborativa e pelas abordagens educacionais que o implementam, os sistemas que proporcionam um ambiente virtual colaborativo tornam-se uma ferramenta de auxílio ao ensino de fundamental importância, pois proporcionam interatividade em alto nível, proporcionando a troca de informações, experiências e a necessária validação do conhecimento até mesmo em nível espacial, ou seja, através de uma nova metáfora que permita o relacionamento espacial da informação e do conhecimento.

4. CONTRA-POSIÇÃO

Em BORGES GOUVEIA, diz-se que o uso da VR permite considerar influências da própria estrutura social de um grupo. Creio que isso seja necessário mesmo em abordagens que não utilizam a realidade virtual, pois a estrutura social determina certamente a forma de comunicação e interação de maneira geral.

No trabalho de LOGAN et al. (2001), sugere-se a criação de agentes como forma de conhecimento do que se passa com outros usuários. Isso pode gerar um problema de privacidade e a questão deve ser considerada com muita cautela, ou seja, os usuários observados devem ou não ter conhecimento desses agentes, de que forma eles são inseridos no sistema, são visuais aos usuários ou não, entre outras questões éticas que devem ser abordadas antes da implementação generalizada.

5. BIBLIOGRAFIA

1. AINGE, David J.. Virtual reality in schools: the need for teacher training.
2. BORGES GOUVEIA, Luís Manuel. Ambientes virtuais colaborativos: a procura de formas alternativas de interação. Universidade Fernando Pessoa, Porto, Portugal.
3. LOGAN, Brian, FRASER, Mike, FIELDING, Daniel, BENFORD, Steve, GREENHALGH, Chris, HERRERO, Pilar (2001). Keeping in touch: agents reporting from collaborative virtual environments.University of Nottingham, UK, 2001.
4. MANIA, Katerina, CHALMERS, Alan. A classification for user embodiment in collaborative virtual environments. University of Bristol, UK.
5. MIAO, Yongwu, HAAKE, Jorg M. (2001). Supporting problem based learning by collaborative virtual environment: a cooperative hypermedia approach. Proceedings of the 34th Hawaii International Conference on System Sciences, 2001.
6. SEROLLI PINHO, Márcio (1996). Realidade virtual como ferramenta de informática na educação. SBIE, Belo Horizonte, 1996.

A comunicação mediada por computador como ferramenta de aprendizagem colaborativa.

1. INTRODUÇÃO

Segundo Polesel Filho (2001), a comunicação mediada pelo computador (CMC) possui diferentes funções: entretenimento, comércio, informação. É usada nas comunicações interpessoais, como meio de comunicação de massa, como suporte para fóruns e grupos de discussão, alcançando as mais variadas aplicações. No âmbito deste trabalho, estamos interessados em abordar a comunicação mediada por computador que parte de um indivíduo para um outro ou de um indivíduo para um grupo em relação a aprendizagem colaborativa.

Em seu trabalho “Estudos Sociológicos”, Piaget (Teixeira Filho) afirma que “cooperar na ação é operar em comum, isto é, ajustar por meio de novas operações (qualitativas ou métricas) de correspondência, reciprocidade ou complementaridade, as operações executadas por cada um dos parceiros.” Dessa forma, tenta-se desenvolver e estudar a CMC no âmbito da educação.

2. EMBASAMENTO

O trabalho de pesquisa centrou-se na análise de textos que pudessem proporcionar uma visão da CMC como instrumento de construção do conhecimento e de uma espécie de validação entre os pares da informação adquirida e refletida em um curso, seja ele presencial ou não.

3. OPINIÃO

A comunicação mediada por computador (CMC) assume um papel de extrema importância quando se dimensiona sua capacidade e rapidez na troca de informação, formação de opinião e troca de experiências. No âmbito educacional colaborativo, segundo Matos Coelho, a CMC designa troca textual (principalmente) interativa em redes de aprendizagem, que são constituídas por professores e estudantes, que se comunicam uns com os outros em tempo real, sincronicamente ou em tempos diferentes, seqüencial e assincronicamente.

Há várias formas desenvolvidas pela tecnologia em que essa troca pode ocorrer. Vejamos algumas, segundo o trabalho de Teixeira Primo:

1. e-mails: permite uma discussão assíncrona entre no mínimo duas pessoas, podendo expandir para várias. Certas mensagens não-verbais, como fisionomia ou entonação de voz não podem ser valorizadas em e-mails. Daí, surgem os emoticons, que oferecem pistas de como se sente o redator da mensagem.

2. Lista de discussão: é um serviço que recebe e distribui mensagens de todos os seus “assinantes”. Permite interações mútuas entre diversas pessoas. Permite discussões de muitos-para-muitos. São conhecidas como “comunidades virtuais” e dão a impressão que as pessoas se conhecem muito, mesmo sem terem jamais se encontrado.

3. Chats ou salas de bate-papo: oferecem um ambiente para a livre discussão em tempo real, ou seja, de forma síncrona. Oferecem um palco para diálogos de alta intensidade e para a aproximação de interagentes sem qualquer proximidade física.

4. Vídeo conferência: incorpora as vantagens do chat somando os recursos de emissão e visualização de imagens em vídeo dos interlocutores.

5. Quadro branco: trata-se de um programa que pretende simular o uso de um painel onde todos possam escrever e desenhar.

Em todas essas formas de comunicação, com exceção do e-mail de um-para-um, pode haver o papel do moderador, segundo Matos Coelho, tem seu papel identificado e relacionado com a forma com que os estudantes respondem e participam. O moderador tem o papel de motivar, não deixar dispersar e orientar em muitos casos as discussões. Possui um estilo pedagógico e funções organizacional, social, intelectual, técnica e a familiarização com a tecnologia de comunicação em uso.

Através do cenário acima exposto, pode-se compreender de forma mais clara a maneira pela qual a CMC pode se dar num ambiente de aprendizagem colaborativa, ou seja, as várias maneiras como os estudantes podem trocar informações e se ajudarem mutuamente no processo de validação dessa informação, contribuindo na construção do conhecimento. Mas fica a questão: funciona ou não funciona ?

Em Berge e Collins (1995), algumas pesquisas indicam como resultados que o professor conectado em rede interage mais com seus alunos do que em situações normais, sem perder contudo o contato face-a-face com seus alunos. Em Archee (1993), algumas pesquisas indicam que a CMC causa como efeito uma espécie de camaradagem entre os estudantes que os ajuda formar sua identidade, propósitos de vida e sentimento coletivo.

No entanto, essas são apenas algumas formas de se analisar a questão proposta, pois a profundidade do assunto parece inesgotável já que, por exemplo, não podemos isolar artificialmente um e-mail num laboratório e analisa-lo sem considerar aspectos sociais, políticos, religiosos, filosóficos, entre outros (December, 1995).

Porém, temos alguns indícios e pistas sobre qual caminho trilhar para obter a efetiva interação desejada no paradigma proposto pela aprendizagem colaborativa.

4. CONTRA-POSIÇÃO

Em Teixeira Primo, é dito que os webdesigners que não abrem em seus sites possibilidades de diálogo limitam a interação ao clássico modelo de transmissão de informações. Isso não é necessariamente correto, pois fatores como a inteligência artificial e agentes podem formar as respostas dinamicamente nos sites e, de uma certa forma, se adaptarem ao perfil de cada usuário, transmitindo informações dinâmicas e não estáticas.

Em Archee (1993), é dito que a habilidade para facilitar o consenso da CMC é ilusória. Acredito que isso depende muito do papel do mediador, que deve motivar os que não se expressam e nortear os que fogem do proposto, sendo dessa forma, instrumento de extrema importância no caminho do consenso.

5. BIBLIOGRAFIA

1. ARCHEE, Ray (1993). Using computer mediated communication in an educational context: educational outcomes and pedagogical lessons of computer conferencing. University of Western Sydney, 1993.
2. BERGE, Zane, COLLINS, Mauri (1995). Computer-mediated communication and the online classroom in higher education. Computer Mediated Communication Magazine, Volume 2, Number 3, 1995.
3. DECEMBER, John (1995). Transitions in studying computer-mediated communication. Computer Mediated Communication Magazine, Volume 2, Number 1, 1995.
4. MATOS COELHO, Maria Inês de. Educação a distância, comunicação mediada por computador e a comunidade de aprendizagem: explorando a prática para formação-ação de docentes. Projeto BH2-EAD-UEMG (Protem-CNPq-RNP).
5. POLESEL FILHO, Pedro (2001). A comunicação mediada pelo computador: diferentes formas de contato e aprendizagem. XXIV Congresso Brasileiro da Comunicação, 2001.
6. TEIXEIRA PRIMO, Alex Fernando. Ferramentas de interação na WEB: travestindo o ensino tradicional ou potencializando a educação através da cooperação. Universidade Federal do Rio Grande do Sul.

Agentes de Software: uma breve introdução

Por Dalton Lopes Martins

Após a explosão do uso doméstico da Internet, na metade dos 90, uma tecnologia tornou-se a coqueluche dos desenvolvedores de software para ambientes de rede e sistemas distribuídos: os agentes de software. No entanto, agentes não são programas que rodam apenas em ambientes voltados para redes, como veremos a seguir, mas podem ser utilizados em várias situações, como agentes de interface (lembram-se do “chato” clip do Word?), gerenciadores de desktop, entre outras aplicações.

Mas, o que define, o que determina que um programa seja um agente de software? Um agente é, antes de mais nada, um programa desenvolvido em uma linguagem de programação qualquer. No entanto, há algumas características na implementação de um agente que o diferenciam de um programa clássico.

O agente deve possuir alguns requisitos necessários para que seja considerado como tal: um ciclo de vida contínuo no tempo, um ambiente de atuação, sensores que recolham informações do ambiente, atuadores que causem mudanças no ambiente e autonomia, ou seja, funcionamento independente da interferência do usuário. Agora, podemos definir melhor cada um desses requisitos.

O ambiente é a área de atuação do agente e pode ser, teoricamente, qualquer parte independente que possamos identificar num sistema. Podemos considerar como ambiente o sistema de arquivos local onde podemos ter rodando um agente de mirror, que espelha o conteúdo de um diretório em outro; podemos considerar como ambiente a Internet no caso de agentes spider, que caminham de site em site verificando a validade de links; podemos considerar como ambiente uma LAN (Local Area Network) no caso de um agente que verifique os usuários conectados e as aplicações que usam; ou, até mesmo podemos considerar um ambiente a própria área de desktop do sistema operacional no caso de um agente de interface.

Os sensores são os mecanismos que utilizamos para captar as mudanças que ocorrem no ambiente, como os sockets (mecanismo que cria uma conexão entre duas máquinas através de uma porta de comunicação e do IP de ambas) e os métodos que permitem obter informações do sistema, como rotinas para obtenção de data, hora, listagem de um diretório, etc.

Os atuadores são os mecanismos que utilizamos para efetuar alguma alteração no ambiente, como os próprios sockets (a conexão criada é bi-direcional, permitindo tanto ler quanto escrever), métodos para apagar arquivos, para desenhar algum objeto na tela, exibir informações, etc.

O ciclo de vida de um agente representa o tempo em que ele se encontra em execução no objetivo de realizar uma determinada tarefa. Após esse tempo, o processo que executa o agente irá morrer ou ficará “dormindo” durante outro intervalo de tempo. Como exemplo, podemos imaginar um agente que realiza backup de um servidor FTP para o disco local da máquina de um usuário. Se o agente ficar o tempo todo lendo o servidor, a máquina do usuário irá ficar praticamente paralisada. No entanto, o agente lê as informações de arquivos do servidor, atualiza no cliente e dorme por um tempo, retornando após para novamente procurar por mudanças no ambiente.

A autonomia é a principal característica de um programa que o torna um agente. Ela indica que o programa será executado independente da intervenção do usuário, ou seja, ele será capaz de controlar seu próprio fluxo de ações.

Desta forma, temos caracterizado os requisitos que tornam um programa um agente. A partir disso, podemos imaginar diferentes aplicações e tecnologias que possam servir como motivação e base de apoio no desenvolvimento de programas orientado a agentes na programação de jogos de computador.

Agentes de software e desenvolvimento de Jogos

No desenvolvimento de jogos, um fator importante e essencial é a inteligência que há por trás da interface, ou seja, o mecanismo que vai processar as ações tomadas pelo usuário e gerar uma reação por parte do sistema ao usuário. A programação clássica dessa inteligência se dá através do paradigma comportamental, ou seja, o programa supõe uma série de comportamentos possíveis por parte do usuário e, com base nisto, irá gerar uma reação também previamente determinada. O problema dessa forma de lidar com a inteligência do sistema é que ela limita as ações possíveis por parte do usuário e permite que o mesmo descubra o padrão de análise de movimentos utilizado pelo programa, gerando aquelas cômicas situações onde o usuário cria mecanismos para burlar o sistema e assim avançar no jogo.

Os agentes podem ser utilizados para resolver esses problemas e criar jogos mais dinâmicos e interativos. A autonomia de execução de um agente pode ter vários níveis de complexidade, permitindo desde o nível mais básico onde o agente possa controlar suas próprias ações, até o nível mais alto, onde o agente possa tomar decisões orientado a metas específicas e utilizar mecanismos de análise para verificar se está sendo bem sucedido ou não.

Esse nível de programação exige por parte do programador o conhecimento de alguns conceitos que possam auxiliar no modelamento do agente, como processamento distribuído, threads que permitam a execução paralela de pedaços de um programa, construção paralela de sensores e atuadores que permitam o nível de interação desejada, entre outros fatores.

Iremos trabalhar cada um desses conceitos ao longo do tempo e fornecer exemplos de aplicações desenvolvidas na linguagem JAVA. Por enquanto, fica a idéia e a motivação inicial para se considerar uma nova forma de programação no desenvolvimento de jogos para computadores.

Jogo Generally

Imagem Generally - Tela de jogo

Alguém já teve a vontade de ter um jogo no seu PC, mas que fosse divertido como aqueles jogos do ATARI? Os mais velhos responderão certamente que sim.

Um dos maiores problemas nos jogos atualmente é que eles são tão perfeitos que, ao invés de estimular a imaginação, como os jogos mais antigos faziam, hoje, justamente pecam por não fazer isso. Naquela época, na quase pré-história da informática, dava-se muito mais atenção ao jogo em si, do que a aparência dele (tudo bem, existia uma grande barreira técnica para se fazer o que se faz hoje, mas os jogos eram mais divertidos e bem bolados).

O jogo mais “moderno” que eu conheço e que era uma delícia jogar e que lembrava esses jogos mais antigos, era o jogo ROAD FIGHTER, para MSX. O jogo era simples, com um visual mais bonitinho que um enduro do ATARI (pudera, o jogo era de 1985).

Imagem do jogo Road Fighter - MSX
ROAD FIGHTER, da CASIO. Um grande jogo de corrida para MSX.

Bem, demorou muito para eu achar outro jogo que eu curtisse tanto para jogar. Finalmente, alguém, e é claro que tinha de ser de alguém da Finlândia, resolveu usar inteligentemente os recursos atuais e fizeram o GeneRally, um jogo de carros que vem ocupando bastante meu tempo ultimamente e que com certeza, vai passar a dividir o seu tempo também, ao meio desses DOOMS da vida.

TELA PRINCIPAL, CONTROLES E CONFIGURAÇÃO

Engana-se quem acha que encontrará uma grande apresentação no início do jogo. O jogo vai direto ao ponto, entrando num menu onde contém os jogadores e pistas disponíveis.

Imagem: Generally - Menu principal
Generally – Menu principal

Na parte de cima da tela, você define o tamanho da prova. Ela pode ser por voltas na pista ou por quilômetros. Logo abaixo, está a lista de corredores. Dentro da caixa, estão os jogadores disponíveis. Do lado esquerdo, onde estão as linhas, são os jogadores selecionados que participarão da corrida. O jogo está limitado a 6 jogadores ao mesmo tempo.

O jogo, por default, não possui nenhum tipo de piloto pronto. Você deverá criar um novo piloto selecionando o botão “CREATE DRIVER”. Abrirá uma janela onde você colocará o nome do jogador, se ele é humano ou é o computador (Aqui existe um sistema de IA para o computador jogar como oponente). Após criar ao menos um “DRIVER”, você deverá selecioná-lo e escolher uma das pistas na parte de baixo da tela. Selecione uma delas.

O JOGO

Imagem Generally - Tela de jogo
Generally – Tela de jogo

Se você selecionou apenas 1 corredor na pista, o jogo entra no modo time trial. Ou seja, você vai jogar contra você mesmo e suas melhores marcas. O jogo guarda as suas melhores voltas em cada pista e você deverá ganhar de você mesmo! Se selecionar mais de um piloto, o jogo entra no modo corrida,e você deverá fazer o impossível para ganhar(isso não é nenhum trocadilho — o jogo é difícil mesmo).

Os comandos, por default, são as 4 teclas direcionais para o JOGADOR, sendo a tecla UP o acelerador, DOWN, para brecar e LEFT/RIGHT para virar.

Imagem Generally - Alguns tipos de carros
Generally – Alguns tipos de carros

Uma das coisas legais do jogo é a variedade de carros disponíveis. Tem desde carros de rali, passando por Formula 1, MINI(o carro inglês), até TRUCK. Muito legal.

O EDITOR DE PISTAS

Provavelmente, o grande barato do jogo é o editor de pistas. Particularmente dizendo, eu nunca tinha visto nada parecido. Ele é muito versátil e permite você fazer praticamente qualquer coisa.

Generally – Editor de pistas

O editor de pistas parece um editor gráfico, de tão flexível que ele é. Pode-se fazer qualquer coisa praticamente. Veja o mapa acima (que foi feito em 5 minutos, é verdade). E veja o resultado final:

Generally - Resultado da pista editada
Generally – Resultado da pista editada

Perceba que até mesmo os defeitos da imagem original encontram-se na pista, durante o jogo. Ou seja: PERFEITO!!!

ALGUMAS PEQUENAS PERGUNTAS AOS AUTORES

Quem são vocês e onde vocês moram ?
Meu nome é Hannu Rabina e o meu irmão se chama Jukka Rabina. Nós somos os desenvolvedores do GenneRally. Nós moramos na Finlândia.

Quem teve a idéia original do jogo ?
Jukka teve a idéia original do jogo e iniciou o projeto. Eu me envolvi logo depois.

Vocês tiveram alguma “inspiração” especial para fazer o jogo ?
Sim, um jogo chamado Slicks’n’slide. Não se encontra muitos jogos como ele por ai. Simples e divertido. Eu gostaria de dizer que a idéia nunca foi copiar o “Slicks” porque acho que ninguém conseguiria fazer algo daquele tipo.

Vocês possuem colaboradores para desenvolver o projeto ?
Não. Somente nós programamos ele. Também tem algumas pessoas que testam o jogo antes de atualizarmos o programa para o público.

Que linguagem vocês utilizaram para desenvolver o jogo ?
Somente C++.

Para quando podemos esperar uma nova versão do GeneRally ?
Você pode esperar algo novo sim, mas poderá esperar por muito tempo. Nós estamos desenvolvendo ele e lançaremos uma nova versão quando acharmos que ele está pronto. Não existe data definida.

Se um nova versão do GeneRally for lançada, podemos esperar suporte rede (multiplayer)?
É uma possibilidade. Mas não temos planos para isso também.

CONSIDERAÇÕES FINAIS

O jogo é muito bom. Talvez o único problema dele seja o excesso de rigor que a IA do jogo oferece. A curva de aprendizagem do jogo é média e, ao configurar o “DRIVER” como computador, trate de colocar o número da IA bem baixo, pois caso contrário(e mesmo assim) você terá problemas para vencer.

A melhor notícia é que o jogo é GRATIS!!!!!!!! Pode ser baixado na página oficial do jogo em http://generally.rscsites.org/. Na página, há um forum com dezenas (Acho que centenas) de novas pistas que podem ser baixadas para você jogar no seu computador.

Bom divertimento!!!

Timming no Allegro

Por Daniel Loureiro

Uma das primeiras dúvidas que surge com a programação de jogos é com a temporização (“timming”). Coisas do tipo: “gostaria que o lutador gordo fosse um pouco mais lento que o oponente”, “quero uma contagem regressiva numa velocidade, meu jogador em outra, e o boomerangue dele em outra”, entre outras.

De fato, quando o jogo começa a ficar complexo, é comum termos elementos que executam em velocidades diferentes. Em programação isto é obtido executando trechos de código em velocidades diferentes: o código responsável por atualizar a contagem regressiva deve ser executado em uma velocidade (1 segundo, por exemplo), o código que modifica a animação do personagem em outra, e assim por diante.

O Allegro provê rotinas que facilitam esta tarefa. A primeira coisa que o programador deve fazer, é colocar cada um dos trechos de código em uma função diferente. Desta forma, temos uma função para atualizar a contagem regressiva, outra para movimentar o personagem, outra para animá-lo, etc.

Depois, deve-se chamar uma função específica do Allegro e passar 2 parâmetros: um é a função que desejamos que seja executada em determinada velocidade, o outro é o período entre uma execução e outra (em milésimos de segundo). Assim, passar a função “Mova_Personagem” e o valor 50, fará que “Mova_Personagem” seja executada a cada 50 ms, ou a 20 vezes por segundo (1000/50).

Você pode querer usar as macros do Allegro que convertem segundos para ms, execuções por segundo para ms, execuções por minuto para ms, e até mesmo (para os que gostam de padronizar) ms para ms (!!!). Entre as funções básicas de timing, existem mais 2: uma para a execução automática de uma função e a outra inicializa as funções de timing do Allegro.

Existem também outras funções relacionadas com o timing: algumas inúteis, que são idênticas às tradicionais, porém com outros nomes; outras para sincronização vertical (para melhorar a qualidade gráfica); e outras de uso geral (como uma nova versão para o famoso “delay”).

Abaixo, veremos as 3 funções mais básicas:

  • “int install_int(void (*proc)(), int speed)”. Esta é a função principal, e serve para criar um “timer” (função que será executada automaticamente). Ela põe a função passada pelo 1o parâmetro na lista de funções a serem executadas automaticamente pelo Allegro. Note que “speed” é o período em que a função será executada automaticamente. Se a função já estiver na lista, ela apenas modifica o período dado por “speed”. Obs.: A função passada por parâmetro não pode retornar algo, nem ter parâmetros, isto é, tem que ser algo como: “void Funcao(void)”.
  • “void remove_int(void (*proc)())”. Retira a função da lista (somente se ela existir), parando a execução automática dela.
  • “int install_timer(void)”. Inicializa as funções de timing do Allegro. Já que a função “install_int” chama ela se o programador ainda não o fez, seu uso não é obrigatório, mas recomendado por motivos de padronização.

Para converter para os milésimos usados por “speed”, você pode usar as seguintes macros:

MACRO CONVERTE O MESMO QUE
SECS_TO_TIMER(msegs) Segundos para ms 1000 * msegs
MSEC_TO_TIMER(mseg) Ms para ms mseg
BPS_TO_TIMER (bps) Execuções por segundos para ms 1000/bps
BPM_TO_TIMER (bpm) Execuções por minutos para ms 60000/bpm

Devido à forma com que o Allegro gerencia os “timers”, devemos tomar uma série de medidas em nosso programa:

  1. As variáveis globais que serão alteradas dentro de um “timer” devem ser declaradas com a palavra reservada “volatile”. Volatile, se você não se lembra, faz com que o compilador saiba que determinada variavel “volatile” pode ser alterada por “algo” que não seja exatamente algum código no programa principal.
  2. Após a declaração de um “timer”, devemos usar a macro END_OF_FUNCTION(Nome_da_Funcao_Timer)”.
  3. Todas variáveis globais acessadas (lidas e/ou escritas) nos “timers” devem ser trancadas com a macro “LOCK_VARIABLE(Nome_De_Uma_Variavel)”.
  4. Todas as funções de “timer” devem ser trancadas com “LOCK_FUNCTION(Nome_da_Funcao_Timer)”.
  5. Os “timers” não devem acessar o disco nem outras funções do sistema.
  6. Deve-se fazer os “timers” o mais simples possível.

Exemplo básico:

[c]

volatile int x=0; //Variável glogal modificada em um timer

void Anda(void) { //Timer
x++;
}

END_OF FUNCTION(Anda); //Necessário após a declaração de um timer

int main(void) { //Nosso programa

install_timer(); //Opcional, porém mais legível
LOCK_FUNCTION(Anda); //Obrigatório trancar os timers usados
LOCK_VARIABLE(x); //Obrigatório trancar as variáveis globais usadas nos timers
install_int(Anda, BPS_TO_TIMER(10)); //"Anda" deve ser executado 10 vezes por segundos
while(!Fim_Jogo) {} //Lógica do jogo
return(1);
}
[/c]

Para finalizar, devo destacar que o Allegro permite apenas 16 “timers”. Como as funções de animações FLI, mouse, interface GUI, e música MIDI necessitam de “timers”, se utilizarmos alguns destes recursos, a quantidade de “timers” do usuário fica ainda menor.

É preciso desenvolver um engine para o seu jogo?

UMA ABORDAGEM PELA PROGRAMAÇÃO ORIENTADA A OBJETOS VERSUS PROGRAMAÇÃO ESTRUTURADA

Quando se tem em mente o desenvolvimento de um software, deve-se passar necessariamente pela fase de projeto, onde as idéias a respeito do que se quer fazer são confrontadas com as possibilidades técnicas do grupo de desenvolvimento e uma síntese entre intenção e realidade irá nortear o processo de construção do código. Em se tratando de jogos, a coisa pode se tornar ainda mais complicada, pois geralmente esperamos muito mais de nossos programas do que aquilo que somos realmente capazes de realizar em curto prazo.

Essa fase de projeto de software pode ser traduzida em um detalhamento mais fino das atividades, entradas e saídas que o sistema irá comportar. Isso passa necessariamente por uma escolha primordial: programação estruturada ou programação orientada a objetos. A programação estruturada é aquela que nos permite detalhar o funcionamento de um programa através das funções e procedimentos que o compõem. A programação orientada a objetos nos permite uma outra hierarquia, mais rica e mais complexa, de estruturação, com classes que comportam métodos que podem herdar características de outras classes e assim consecutivamente. A ênfase que se dá ao projeto em programação estrutura é em relação à ação que uma determinada função ou procedimento irá executar, já na programação orientada a objetos a ênfase na fase de projeto se dá ao tipo de dados que se deseja obter e a forma como esses dados serão tratados pelo programa. São dois enfoques bem diferentes e que têm implicações de projeto que resultam em conceitos diferentes para um mesmo software.

Bem, deixemos momentaneamente a questão da programação estruturada e da orientação a objeto de lado para colocar em questão o que se entende por engine e qual deve ser o seu papel.

A palavra engine pode ser traduzida como “motor” ou “máquina”. Um engine pode ser entendido, de tal forma, como uma coletânea de código orientada à ação (execução de ações por parte dos elementos do sistema) que visa ser genérica o suficiente para que possa ser reaproveitada na construção de outros sistemas, enfim, de outros jogos que executem ações semelhantes. Veja que quando falamos de ação, não estamos apenas nos referindo a jogos de ação, mas sim a como um programa toma decisões em tempo de execução com base numa interação por parte do usuário. Essa definição difere consideravelmente do que podemos considerar uma biblioteca de software propriamente dito: uma lib é orientada ao suporte de tarefas de mais baixo nível que dão muito trabalho se forem reescritas a cada novo sistema desenvolvido, ou seja, não tem essa preocupação se ser orientada à ação.

Tomemos como exemplo jogos de RPG e pensemos no papel que um engine pode ter. Essencialmente, a estrutura de programação desses jogos é a mesma, mudando apenas o conjunto de regras que irá nortear o comportamento dos usuários e a forma como os mesmos irão interagir com o sistema. Se tivermos um código genérico o suficiente para passarmos como parâmetro as regras do jogo e as formas de interação, teremos um construído um engine que, de forma geral, pode nos auxiliar em todo o desenvolvimento de jogos desse tipo.

Visto isso, voltemos agora aos conceitos de programação estruturada e orienta a objetos.

A orientação a objetos surgiu como um novo paradigma em programação visando justamente resolver o problema de reaproveitamento de código e da manutenção desse código por pessoas diferentes. Como dissemos acima, a própria ênfase da orientação a objetos se dá nos dados que uma classe deve tratar, ou seja, nos dados que devem ser recebidos como parâmetros e aqueles que devem retornar de um método encapsulado por uma classe, o que torna a tentativa de generalizar o código muito mais eficiente do que na orientação estruturada.

É evidente que tal forma de programação exige disciplina e experiência, já que sempre iniciamos nosso estudo em programação pela forma estruturada e levamos certo tempo até compreender a forma como as classes podem ser estruturadas e vantagem que isso traz ao código final. Também é evidente que para desenvolvermos pequenos jogos, a forma estruturada é mais simples e, diria mais, até mais útil. Mas, a questão que fica, é que se pretendermos desenvolver um trabalho a longo prazo, visando produtividade de construção de código, parâmetros de qualidade na fase de análise do projeto, teste e manutenção, devemos sim nos preocupar em construir engines que sejam orientados a objeto e possam ser constantemente revisados para trazer o nível de generalidade que pretendemos alcançar. Logo, a resposta ao título do texto é: depende do porte e do desenvolvimento a longo prazo do projeto que se pretende criar.

Conheça o GNU Mages

Por João Ricardo Bittencourt

O GNU Mages é um ambiente de simulação para sistemas multi-agentes livremente distribuído criado para testar controladoras inteligentes para agentes em mundos virtuais, criado especialmente para jogos eletrônicos. Eu desenvolvi este ambiente durante o Trabalho de Conclusão no curso de Análise de Sistemas na Universidade do Vale do Rio dos Sinos (UNISINOS) sob a orientação do Prof. Dr. Fernando Osório. No mês de julho o protótipo do GNU Mages, versão 1.0.0 Alfa foi divulgado e está disponível gratuitamente para comunidade sob a licença GNU GPL no site http://www.inf.unisinos.br/~jrbitt/mages .

Atualmente existem muitos trabalhos sobre agentes autônomos, mas na verdade a grande maioria destes está voltada para agentes comunicacionais, do tipo motores de busca na Web, agentes negociadores ou refere-se ao novo paradigma de programação orientado a agentes. Muitos destes projetos estão focalizados somente com a arquitetura de rede e questões de protocolos de comunicação entre agentes. A idéia do GNU Mages é oferecer um ambiente para criação e simulação de mundos sintéticos, que permitem estudar e criar soluções que envolvam Inteligência Artificial (IA) para domínios do tipo jogos.

Além dos jogos eletrônicos, o GNU Mages pode ser usado para efetuar simulações nas áreas de robótica, simulações militares, sociais e biológicas. Sabemos que nos jogos eletrônicos é de suma importância criarmos controladoras inteligentes para os inimigos, aliados, unidades e adversários estratégicos. Evidentemente que não iremos utilizar técnicas de IA extremamente sofisticadas em simples inimigos em um jogo de plataforma quando estes podem ser modelados usando uma simples máquina de estados finitos. Mas quando queremos adicionar nos jogos inimigos realmente poderosos que criam táticas em jogos first person, como Quake e Half Life; ou pretendemos criar um grupo de aliados em um RPG com emoções e agindo de forma independente; ou quando queremos construir unidades táticas com comportamento semi-autônomo em um jogo de estratégia como Warcraft, definitivamente precisamos usar técnicas de IA sofisticadas. Usar um ambiente de simulação, como o GNU Mages, permite projetar facilmente controladoras que poderão ser usadas nestes jogos.

Pelo fato do foco do GNU Mages ser a construção de mundos sintéticos, o ambiente de simulação não está voltado somente para os jogos eletrônicos. O simulador também pode ser usado para avaliação de táticas militares (wargames), estudo de sistemas biológicos (vida artificial) e para projetos de robôs autônomos.

O GNU Mages é totalmente desenvolvido em Java e executa tanto na plataforma Windows, quanto no Linux.

Quanto suas funcionalidades o GNU Mages permite:

  1. Construir diferentes controladoras, usando diferentes tipos de sensores e técnicas de Inteligência Artificial. Possui uma fácil integração com o ANNeF (Artificial Neural Networks Framework) e com o FuzzyF (Fuzzy Logic Framework). Ambas ferramentas são softwares livres voltadas para Redes Neurais Artificiais e Lógica Nebulosa, respectivamente;
  2. Livre distribuição: você é livre para executar, copiar, distribuir, estudar, modificar e aperfeiçoar o ambiente de simulação;
  3. Modelar múltiplos domínios multi-agentes. O GNU Mages oferece classes para modelagem de agentes, ambientes 2D, comunicação entre agentes e interação dos agentes com o ambiente. Inicialmente está sendo distribuído com a versão inicial o conhecido jogo de guerra “Capture the Flag”;
  4. Padronizar todos os dados necessários para as simulações usando XML. Isto facilita o intercâmbio de objetos entre a comunidade e o uso dos arquivos em outras aplicações. Além disso, através destes dados é possível efetuar testes estatísticos para validar as soluções para os domínios modelados;
  5. Criar ambientes 2D usando um editor de mapas. Existe uma carência na comunidade de editores gráficos 2D livremente distribuídos que gerem mapas em um formato que pode ser usado por outras aplicações. Por esta razão o editor 2D do GNU Mages gera mapas formatados em XML, para que qualquer aplicação, plataforma ou linguagem de programação possa utilizar estes arquivos;
  6. Treinar os agentes inteligentes. O GNU Mages possui um ambiente gráfico que permite coletar exemplos para treinar os agentes usando algum tipo de algoritmo supervisionado;
  7. Executar simulações distribuídas usando uma arquitetura cliente-servidor.

Como já foi dito a versão que está sendo distribuída é um protótipo, a versão 1.0.0 Alfa. Por esta razão não é uma versão estável e precisa da ajuda de toda a comunidade para um constante aperfeiçoamento. Por esta razão estou convidando a todos os interessados em participar deste projeto. Caso você seja programador Java ou tenha interesse em participar em um projeto de software livre voltado para as áreas de simulação, Inteligência Artificial e jogos eletrônicos entre em contato. Além de contribuir programando existem várias formas de ajudar o projeto:

  1. Use o GNU Mages! Nunca deixe de usar este simulador e referenciar em seus trabalhos. Simplesmente o fato de usá-lo já é uma grande ajuda;
  2. Divulgue. Fale sobre o GNU Mages para pessoas que tenham interesse neste tipo de ferramenta. Procure divulgá-lo, pois somente desta forma o projeto continua vivo e por conseqüência crescendo e ficando cada vez mais arrojado para toda a comunidade;
  3. Seja um Tester: Você instala o simulador e fica utilizando-o. À medida que erros e problemas surgem, você vai relatando estes problemas para que possamos corrigir estes bugs. Além disso, você pode dar sugestões de novas funcionalidades e pontos que precisam ser melhorados;
  4. Seja um tradutor. Se você não é um profissional da informática, mas domina algum idioma (inglês, espanhol, italiano, russo, japonês, ou qual for outros idioma), você pode nos ajudar na tradução das documentações;
  5. Escreva documentação: Caso você domine alguma parte do GNU Mages você pode ajudar escrevendo manuais, tutoriais e how-tos, relatando sua experiência e facilitando o uso do GNU Mages por toda a comunidade.
  6. E programando é claro! Se você é programador Java e tem interesse neste tipo de aplicação entre em contato, por favor. Precisa-se de programadores.

Viste o site do GNU Mages (http://ww.inf.unisinos.br/~jrbitt/mages) lá você vai encontrar todos os arquivos necessários para a execução do simulador, um guia de instalação e uma série de publicações que tratam especificamente do GNU Mages, incluindo uma versão preliminar do Trabalho de Conclusão que deu origem ao simulador.

Como não podia deixar de ser: Comunidade, uni-vos!

Recursos da/na web que permitem a disponibilização de conteúdos e processos educacionais

Por Dalton Lopes Martins

1. Introdução

Há várias maneiras de se enxergar uma abordagem para o tema recursos da/na web que permitem a disponibilização de conteúdos e processos educacionais. Pode-se falar, por exemplo, de recursos físicos como perfil de hardware desejado, topologia de rede de dados, voz sobre IP, softwares de autoria e tecnologias que, independente da plataforma, sejam voltadas a proporcionar maior interação entre o usuário e a web. Esse artigo, por entender que disponibilização de conteúdo implica a capacidade de acessar e interagir com a informação, escolheu esta última opção para centrar seu foco de estudo

2. Embasamento

Considero que a pesquisa realizada para o tema proposto foi a mais difícil até o presente momento do curso. Tive dificuldades para encontrar um foco dentro da vasta gama de opções que o tema permite. Isso somente foi resolvido com a leitura do texto “Interação na Web” (ver bibliografia), que permitiu encontrar um caminho de pesquisa. A partir deste ponto, a necessidade de se aprofundar em algumas tecnologias levou ao encontro dos outros textos utilizados; explorando-se dessa forma temas como PHP, Servlets, JAVA, CORBA e JSP.

3. Opinião

Segundo Raposo et al. (1999), as grandes vantagens em se desenvolver aplicações disponibilizadas via web estão associadas à fácil acessibilidade: as aplicações ficam disponíveis a uma cada vez mais ampla gama de usuários da web e elas podem ser acessadas de praticamente qualquer lugar (de casa, do trabalho, ou mesmo em trânsito, através da computação móvel); somada a estas vantagens, ainda existe a independência de plataforma das aplicações web.

Para tornar viável as vantagens acima citadas, deve-se disponibilizar a informação, o conteúdo, de forma eficiente e inteligente, de maneira a maximizar um dos maiores interesses na web: a interação. No caso educacional, objeto deste estudo, a interação torna-se ainda mais importante, pois segundo os novos paradigmas da educação, o aprendizado é um processo construído pelo aluno e com intensa realimentação por parte do educador via os recursos disponíveis.

A partir disto, torna-se necessária a disponibilização de tecnologias que implementem esse nível de interação desejado entre o usuário e o objeto de seu estudo. No entanto, as tecnologias básicas da web (HTTP e HTML) ainda impõem algumas limitações no que diz respeito à interação com as aplicações: falta de controle sobre a aparência da interface, o protocolo HTTP não suporta conceito de sessão (possibilita maior controle da comunicação), lentidão de realimentação, não garante taxa de transmissão mínima, entre outros (Raposo et al., 1999).

Porém, a web tem evoluído de sua antiga estrutura estática (o servidor web enviava ao usuário apenas páginas previamente construídas e com conteúdo estático) implementada apenas com hipertexto puro para aplicações mais dinâmicas (o servidor web é capaz de gerar páginas dinamicamente conforme informações obtidas através do usuário, inclusive realizando processamento na máquina local), que permitem intensa troca de informação entre o usuário e o servidor web. Essa evolução tem ocorrido graças a tecnologias como a CGI (Common Gateway Interface), ECMAScript, Java, Java Servlets, Java Beans, Java 2D, Java 3D, JSDT (Java Shared Data Toolkit), CORBA, PHP, VRML, entre outras.

Segundo Volkheimer (2001), Servlets são programas que rodam no lado do servidor e são capazes de gerar conteúdo dinamicamente, ou seja, eles recebem dados do usuário, realizam um determinado processamento e retornam uma página HTML específica para os dados de entrada. Isso, como se pode imaginar, permite implementar processos educacionais como, por exemplo, análise da resposta do usuário a uma determinada questão e uma realimentação por parte do software educacional com base nos dados de entrada.

Já a PHP é uma linguagem de script que é acoplada ao HTML e é interpretada no lado do servidor. Ela é mais direcionada ao trabalho com bancos de dados, já que se relaciona com Oracle, Sybase, Informix, entre outros (Brockmeier, 2000). A PHP auxilia na disponibilização de consultas a bases de dados e no cruzamento de informações, suportando pesquisas e estudos relacionados aos dados analisados. A tecnologia CORBA pode ser utilizada com o mesmo propósito, no entanto, ela possui a vantagem de gerenciar um grande número de usuários ao mesmo tempo, sendo portanto importante no suporte a aplicações que possuem alta demanda de acesso.

Portanto, pode-se concluir que essas tecnologias facilitam e tornam possível a disponibilização de conteúdo e processos educacionais na web, tornando-se dessa forma viável a implementação dos novos paradigmas educacionais através da interação proporcionada pela web.

4. Contra-posição

Os textos utilizados para a elaboração do artigo apresentam as tecnologias e suas características, portanto, não possibilitam margem para contra-posição a algum argumento conceitual.

5. Bibliografia

1. BROCKMEIER, Joe (2000). Introduction to PHP. Linux Magazine, 2001.
2. MORGAN, Bryan (1997). CORBA meets Java. JavaWorld.com, 1997.
3. RAPOSO, Alberto B., MAGALHÃES, Léo P., RICARTE, Ivan L. M. (1999). Interação na WEB. Proposta JAI’99, 1999.
4. VOLKHEIMER, Jeff (2001). Introduction to Servlets, JSP and Servlet Engines. Site DevCentral, 2001.

Jogo Silver

Jogo Silver - Capa do jogo
Jogo Silver
Jogo Silver: Quando a magia é usada a favor do mal…

Silver é um jogo que merece uma posição de destaque na nossa seção de favoritos. Não somente pelo fato do jogo ser bom, mas, como produtores de jogos, temos que olhar com uma certa atenção as experiências bem sucedidas, ou pelo menos, nas boas idéias…

O enredo

Silver não inova em nada no enredo. De certa forma, chega até mesmo a decepcionar.

A história se passa num mundo imaginário Jarrah que é constituido por 8 ilhas, conectadas por pontes. Silver é o mago “malvado” da história, que num belo dia resolveu usar seu poder para dominar as 8 ilhas e junto com seus filhos, Fuge, um assassino terrível, e sua filha, Glass, uma feiticeira, eles transformam Jarrah num mundo marcado pelo terror.

Na ilha central encontra-se HAVEN. E é onde nosa história começa. Silver procura uma noiva para ele e exige o direito da “PRIMA NOCTE” (referencia total ao “direito” que os senhores feudais tinham na Idade Média) e levam todas as mulheres de HAVEN (Isso com certeza indignaria qualquer homem, em qualquer época e é motivo o suficiente para querer sair “quebrando” tudo pela frente… 😀

Bem, tudo estaria bem se Fuge e seus homens não tivessem levado JENNIFER, a sua amada. Bem, é nesse ponto que você entra na história, correndo e lutando, para HAVEN, antes que o navio (carregado de mulheres, diga-se de pasagem!!) saia de HAVEN e levem as mulheres para SILVER. Adianto aqui, e isso é mostrado bem no começo do jogo, que você não chegará a tempo.

Jogo Silver - Capa do jogo
Jogo Silver – Capa do jogo
Jogo Silver: Imagem do jogo
Jogo Silver: Imagem do jogo
Jogo Silver: Imagem do jogo - 02
Jogo Silver: Imagem do jogo – 02
Jogo Silver: Imagem do jogo - 03
Jogo Silver: Imagem do jogo – 03

O que tem de bom no jogo então?

Bem, essa é a parte importante. A primeira coisa é a qualidade gráfica do jogo. Os gráficos são uma mistura de arte tradicional com gráficos poligonais. Você terá oportunidade de ver muitos screenshots aqui neste artigo e poderá comprovar isso.

A mistura é inteligente. Os cenários (o background) são lindíssimos, e o efeito é fantástico. Isso obriga, já que os desenhos são, por assim dizer, digitalizados, o jogo a ter uma espécie de câmera(No melhor estilo de ALONE IN THE DARK), ou seja, o jogo, apesar de contar com movimentos em 3D de todos os personagens, não conta com a mesma mobilidade e variedade em seu cenário. Isso não é um problema. Ao contrário, uma qualidade. Perceba os detalhes nas imagens do jogo.

O detalhe, que deixa o jogo muito interessante é o fato de usarem gráficos poligonais para desenhar os personagens. E, ao contrário do que ocorre em ALONE IN THE DARK, onde fizeram questão de desenhar os personagens enormes e ficava evidenciado que o personagem parecia ser feito de caixa de fósforos, em SILVER, fizeram os personagens relativamente pequenos, evidenciando muito mais o background do jogo do que os personagens. E como os personagens são menores, sobra processamento para dar alguns detalhes a eles, que, se fosse feito em um personagem “grande”, ainda assim, tornariam o jogo esquisito. Ponto para os produtores do jogo. O jogo parece mais natural dessa forma.

Jogo Silver: Imagem do jogo 04
Jogo Silver: Imagem do jogo 04
Jogo Silver: Imagem do jogo 05
Jogo Silver: Imagem do jogo 05
Jogo Silver: Imagem do jogo 06
Jogo Silver: Imagem do jogo 06
Jogo Silver: Imagem do jogo 07
Jogo Silver: Imagem do jogo 07

Músicas e efeitos sonoros

As musicas e efeitos sonoros é outro ponto que merece chamar atenção. Não tem nada de extraordinário nesse quesito, mas está aqui para lembrar-nos o quanto uma trilha sonora e efeitos sonoros são importantes para ambientar o jogo. De nada adiantaria o jogo ser bonito como é e ter uma música de péssima qualidade. Se as músicas não são a melhor coisa do jogo, entretanto elas não atrapalham, o que, convenhamos, já é bastante. Acho que pior do que não ter música num jogo nesse estilo, é ter uma música irritante.

Jogo Silver: Imagem do jogo 08
Jogo Silver: Imagem do jogo 08
Jogo Silver: Imagem do jogo 09
Jogo Silver: Imagem do jogo 09
Jogo Silver: Imagem do jogo 10
Jogo Silver: Imagem do jogo 10
Jogo Silver: Imagem do jogo 11
Jogo Silver: Imagem do jogo 11

Interface

Aqui está, na minha opinião, uma das melhores coisas do jogo. A interface com o jogador. Todos os diálogos estão numa espécie de DIALOG BOX na tela, com a foto de quem está falando (Na versão em português do jogo. Na versão inglesa, as opções são FALADAS e DIALOG BOX), no melhor estilo RPG. Não é uma inovação, é verdade. Entratanto, vale o mesmo comentário sobre as músicas: Não atrapalham. E são simples.

Outro fator a parte é a jogabilidade que o jogo proporciona. É difícil ver um jogo que usa exclusivamente o mouse por um motivo simples: Só existem 2 botões no mouse(Tá, existem 3 botões também, mas o mais difundido por ai são os mouses de 2 botões…). Então, invariavelmente, usa-se o teclado como auxiliar do mouse. O destaque aqui é a forma inteligente de uso do mouse, e, acredito, que se possa fazer cerca de 90% dos comando somente através dele. Tarefas estas que, em outros jogos, são relativamente complexas, como selecionar objetos numa mala, tipo de arma, tipo de armadura, magia, etc…estão a apenas 2 cliques de mouse. E não abre nenhum MENU TEXTO, como é usual nesses jogos, mas um menu gráfico extremamente funcional e agradável.

Concluindo…

Bem, eu ainda não terminei o jogo para dizer se há um grande final ou não (Na verdade já terminei, mas é para dar um suspense 🙂 ), mas o que importa aqui é ver o jogo e tentar aplicar algumas idéias em seus próprios jogos.

A interface é o ponto forte na minha opinião e o ENREDO é ponto fraco. É perceptivel o quanto é “batida” a história e você percebe isso na pobreza dos diálogos. Não é um jogo que inova em nada, entretanto, tecnicamente dizendo, ele é ótimo e serve como base para você se quiser fazer um jogo do gênero. O enredo não chega a estragar o jogo, afinal não é uma obra prima, mas também não atrapalha. É apenas um tema corriqueiro. Mas a qualidade geral do jogo acaba compensando.

Suporte à autoria de documentos e ambientes educacionais: como implementar hipertexto?

Por Dalton Lopes Martins

1. Introdução

A construção de documentos e ambientes educacionais passa necessariamente pelo uso de uma nova linguagem: o hipertexto, a hipermídia. Segundo Oinas-Kukkonen (1994), o desenvolvimento de aplicações hipertexto requer uma boa compreensão da estrutura da aplicação. Isso quer dizer que o processo deve ser muito bem estruturado, e, em alguns casos, isso pode ser interpretado pela necessidade de se desenvolver um “esqueleto” hierárquico.

Em Castro et al., encontramos que o autor, por sua vez, precisa aprender a expressar suas idéias no novo meio – a expressão de idéias não mais se limita às palavras, mas deve incluir as conexões entre os nós. O autor precisa antecipar os usos que o leitor irá fazer da informação apresentada, prevendo as ligações necessárias.O uso dessa nova linguagem leva a um estudo de tecnologias que possam implementá-la.

2. Embasamento

A pesquisa realizada levou em consideração o levantamento de informação a respeito de tecnologias que estão por detrás do hipertexto e da hipermídia. Para tanto, um levantamento de alguns aplicativos e tecnologias de uso popular foi realizado, chegando a nomes como o Toolbook, Hypercard e XML, entre outros. A partir disso, a pesquisa focou em análises e estudos de caso em que as tecnologias acima citadas foram implementadas.

3. Opinião

No desenvolvimento de aplicações hipermídia, há a necessidade de se utilizar de um modelo de base, que possa nortear as etapas de construção do projeto e o uso da tecnologia relacionada. Schwabe et al. propõe o uso do método OOHDM (Object-Oriented Hypermedia Design Method), que é composto por quatro atividades diferentes: projeto conceitual (modela a semântica do domínio da aplicação), projeto navegacional (leva em consideração o perfil do usuário e a tarefa a ser executada, dá ênfase nos aspectos cognitivos), projeto abstrato da interface (modela objetos perceptíveis, implementa as metáforas escolhidas e descreve a interface para os objetos navegacionais) e, por fim, a implementação.

Portanto, para a implementação desse modelo orientado a objeto, entre outros modelos, as ferramentas de software são criadas. Através do trabalho de Dalgarno (1998), podemos encontrar uma análise das características de alguns dos principais aplicativos utilizados na autoria de sistemas construtivistas de aprendizado cooperativo. As ferramentas utilizadas foram: Macromedia Authorware, Macromedia Director, Asymetrix Toolbook, Claris Hypercard, Microsoft Visual J++ e Microsoft FrontPage.

Diversos testes foram realizados nos pacotes acima citados, dentre elas a incorporação de elementos de mídia, incorporação de elementos interativos, implementação de questões e realimentação em caso de erro, implementação de simulações e “micromundos”. Alguns pontos bons e ruins foram levantados de cada pacote e, de maneira geral, pode-se dizer que o FrontPage não foi bem avaliado por não permitir fácil mobilidade de objetos na tela e ficar preso ao paradigma do HTML; o Visual J++ foi muito bem avaliado para o caso da utilização de simulações e “micromundos”, apesar do esforço de programação necessário, o que torna complexo demais para outras aplicações; o Hypercard foi muito bem avaliado na aplicação com recursos multimídias e interatividade limitada; o Director e o Authorware foram bem avaliados para aplicações básicas, envolvendo gráficos e textos com pouca interatividade e de valor questionável para aplicações que exigem alto índice de interação e aplicação de simulações; já o Toolbook apresentou a melhor avaliação geral no suporte a construção de ambientes cooperativos construtivistas de ensino com base nas avaliações realizadas.

O sistema Toolbook é um sistema comercial que permite a construção de pacotes interativos de forma simples e praticamente sem necessidade de programação por parte do usuário, apesar de incluir no sistema uma linguagem chamada Open Script, que é similar ao Visual Basic. Ele é organizado pelo princípio de um livro com capítulos, dando ênfase no projeto da tela e segue a seguinte lógica: o autor inicia pelo conteúdo, desenvolve as telas e constrõe as estruturas nelas (Rest &Brattan, 2001). Uma aplicação normalmente irá envolver texto, áudio, vídeo, animação, gráficos e interatividade por parte do usuário.

Uma outra tecnologia que ainda não foi apresentada é o XML. XML é um método para estruturar dados. Entende-se por “dados estruturados elementos de uma folha de cálculo, cadernetas de endereço, parâmetros de configuração, transações financeiras, desenhos técnicos, entre outros. XML é um conjunto de regras, de linhas diretrizes, de convenções para a concepção de textos formatados que permitem estruturar os dados (fonte: Phal e www.w3.org/xml). Desta forma, XML torna-se uma importante tecnologia que pode suportar a criação de documentos voltados para o ensino, levando-se em conta sua capacidade de estruturar a informação e relação que essa estrutura pode ter com a abordagem orientada a objeto.

Como visto acima, há hoje diversas tecnologias voltadas para o suporte à criação de aplicações educacionais, entre outras. No entanto, elas diferem entre si pela facilidade de uso e flexibilidade na implantação de recursos. O que deve se considerar sempre é que o suporte a autoria deve possibilitar a definição de um vocabulário e de regras para expressar a estrutura do conhecimento e uma metodologia guiando o processo de autoria.

4. Contraposição

Em Rest e Brattan (2001), encontra-se uma descrição de um recurso do Toolbook que é considerado pelos autores como importante e que representa uma vantagem a mais no uso do pacote. O recurso em questão é a limitação de tentativas e limitação de tempo para se responder a uma determinada questão proposta pelo sistema. Como recurso técnico, pode ser interessante, mas como recurso educacional, deve ser questionado. Aparentemente, esse tipo de recurso trás para o computador o peso psicológico da prova clássica e pode se tornar um fator a mais de bloqueio, o que deve ser evitado e reconstruído pela tecnologia.

5. Bibliografia

1. CASTRO, Maria Alice Soares de, GOULARTE, Rudinei, REAMI, Elderclei Regis, MOREIRA, Edson dos Santos. Infra-estrutura de suporte à editoração de material didático utilizando multimídia. Departamento de Ciências de Computação e Estatística ICMSC – Universidade de São Paulo- São Carlos.
2. DALGARNO, Barney (1998). Tools for authoring constructivist computer assisted learning resources: a review. ASCILITE, 1998.
3. OINAS-KUKKONEN, Harri (1994). Lessons learned from developing hypertext applications. In Claude Chrisment (ed.): Information Systems Design and Hypermedia. Cépadués-Éditions, Toulose, France, 1994.
4. PAHL, Claus. An investigation of XML-technologies for infrastructures for Web-based virtual courses. School of Computer Applications, Dublin City University.
5. REST, Tony, DON, Brattan (2001). The use of authoring to produce effective learning materials. CAL-laborate vol. 7 October 2001.
6. SCHWABE, Daniel, ROSSI, Gustavo, BARBOSA, Simone D. J.. Systematic hypermedia application design with OOHDM. Departamento de Informática, Pontifícia Universidade Católica – Rio de Janeiro.

Introdução a História da Computação Gráfica

Por Alessandro Straccia

Podemos dizer que o marco inicial da computação gráfica aconteceu em 1968, na Universidade de Utah, através do professor David Evans e o Dr. Ivan Sutherland. Numa época onde os (poucos) computadores eram dedicados principalmente ao cálculo militar e financeiro, eles enxergavam além: para os dois, os computadores deveriam interagir com o usuário, executando tarefas das mais variadas.

Em 1968, a única interação com o usuário eram os cartões perfurados, o que dificultava a variedade de utilidades da máquina. Foi daí que nasceu a idéia de utilizar gráficos e desenhos para facilitar o trabalho.Assim nasceu a Evans&Sutherland, uma empresa pioneira no ramo da computação gráfica. Sua principal atividade era a criação de aplicações gráficas para simulação. Nela nasceram os primeiros conceitos de desenho vetorial, representação tridimensional em ambiente bidimensional, mapeamento de texturas, entre outros avanços. Foi na E&S também que foram descobertos os grandes gênios da computação gráfica atual, como Jim Clark (fundador da Silicon Graphics), Ed Catmull (fundador da Pixar) e John Warnock (fundador da Adobe). Hoje em dia, a E&S está voltada totalmente para a criação de ambientes simulados, tanto para a indústria militar e civil (simuladores de vôo e de tráfego), quanto para a indústria do entretenimento (cinemas interativos). Entre no site deles para dar uma conferida: www.es.com.

A segunda grande revolução podemos dividir em duas partes: a criação do computador pessoal, em 1976, com o Apple I, que democratizou a utilização do computador. Vale lembrar que a IBM só criou o seu primeiro PC em 1981, e em 1979 a Apple já tinha o Apple II, que rodava gráficos e imagens coloridas.

A segunda grande revolução foi em 1983/84, com a criação do Macintosh, que introduziu ao mundo a GUI (Graphic User Interface), e é a mãe de tudo que conhecemos hoje em dia em termos de computação gráfica. Já imaginou criar um desenho através de linha de comando? Em 1982 tivemos dois grandes acontecimentos: a criação da Adobe Inc, uma das pioneiras em aplicações gráficas (no início, apenas para desktop publishing – depois para todo o mercado), e a criação da Silicon Graphics, que se especializou na criação de hardwares específicos para aplicações gráficas.

Em 1984 eles lançaram a primeira workstation voltada totalmente para gráficos 3D. A criação do Amiga, da Commodore, também foi muito importante para a computação gráfica. Em uma máquina potente e relativamente barata, os profissionais podiam rodar programas de animação 2D, 3D, edição, composição, mixagem de áudio e mais uma infinidade de coisas. Muitas produtoras de vídeo ainda são baseadas, até hoje, em plataforma Amiga equipada com a famosa Vídeo Toaster. Até o começo da década de 80, vimos toda a base para a indústria da computação gráfica ser criada. Graças a esses pioneiros, tivemos em 1982 o primeiro filme a utilizar efeitos de computador, Tron, da Disney.

George Lucas os utilizou também em Guerra nas Estrelas e, a partir daí, a computação gráfica estava estabelecida em Hollywood. Claro que não podemos falar de computação gráfica sem falarmos nos jogos (que, inclusive, é o principal assunto deste site).

Como seria muito extenso incluir este capítulo especial e saudoso neste texto, recomendo que vocês acessem o site Retrospace, da Outerspace (http://outerspace.terra.com.br/retrospace/). Está bem completo e, melhor, em português.

Com a evolução do hardware e, principalmente, do software, vimos coisas inacreditáveis na telona. Quem diria que, em 1991, veríamos um ser de metal líquido se transformar numa pessoa (Exterminador do Futuro 2). Em 1993 os dinossauros voltaram à vida através do computador, em Jurassic Park. Em 1995 tivemos o primeiro filme criado no computador, Toy Story.

Infelizmente nosso Cassiopeia – que começou a ser produzido antes de Toy Story – não conseguiu ser lançado antes dele por problemas técnicos e financeiros. Mas é nossa a honra de ter o primeiro filme criado inteiramente no computador, já que Toy Story escaneou a geometria dos personagens a partir de modelos reais. Algumas curiosidades a respeito de Cassiopeia:

  • Foi utilizado um software de animação e modelagem 3D chamado Topas Animator, que era obsoleto já naquela época;
  • Os personagens e cenários foram criados a partir de formas geométricas simples, como esferas, cubos e cilindros;
  • O “render” foi feito numa rede com 20 computadores 486. Nos últimos meses de produção, os computadores foram roubados, o que atrasou ainda mais a finalização;
  • Cassiopeia 2 está sendo produzido, mas desta vez com equipamentos de ponta e com o software 3D Max, um dos mais utilizados hoje em dia. A última notícia a respeito do filme é que os produtores estão procurando jovens talentos em animação 3D para se juntarem à empreitada.

Nos dias de hoje, estamos vivendo várias revoluções ao mesmo tempo. A maior delas é a democratização das ferramentas de animação e computação gráfica. Se a Apple democratizou o uso dos computadores pessoais através do seu Apple II e Macintosh, o PC hoje é a plataforma mais barata e eficiente para a Computação Gráfica. Praticamente todos os softwares de animação acabaram sendo migrados para a plataforma Windows NT.

Há alguns anos, para se ter um equipamento capaz de rodar esses softwares, era necessário uma plataforma Silicon Graphics (sob o custo de, pelo menos US$ 10.000,00), e um programa de animação que custava a metade, ou até mais que o valor do hardware. Hoje em dia, com R$ 3000,00 você consegue um PC poderoso. A partir de US$300,00 você tem acesso aos principais programas gráficos e de animação.Isso significa que, em sua própria casa, você tem a possibilidade de aprender os principais softwares. Tem até a possibilidade de fazer um filme inteiro no seu PCzinho. Muitas produtoras de animação se aproveitaram dos baixos custos atuais pra entrar no mercado e mostrar o seu valor.Outros fatos importantes que estão revolucionando o mundo da computação gráfica:

  • O cinema digital, que está reduzindo os custos e facilitando a manipulação das imagens e cenas no computador;
  • As novas ferramentas de animação, que estão eliminando as tarefas repetitivas e dando mais tempo aos artistas para aprimorarem as técnicas mais complexas;
  • As modelos virtuais, que literalmente estão dando vida aos seres de computador. Veja Final Fantasy, O Senhor dos Anéis, Guerra nas Estrelas Episódio I (e aguarde o lançamento do 2o filme, que trará mais avanços), e um filme irá retratar bem esse mundo, Simone, com Al Pacino.
  • Hardwares cada vez mais poderosos, que estão diminuindo o tempo de render e de pré-visualização.

É isso aí. É claro que deixei de falar muitas coisas aqui neste texto. Vou continuar minhas pesquisas e num futuro próximo estarei fazendo uma versão 2.0 desta história.