Arquivos da Categoria: C/C++

Flash e Alchemy

Alchemy é um projeto de pesquisa da empresa Adobe Systems onde o objetivo é compilar códigos escritos em C/C++ para o bytecode da AVM2 (máquina virtual usada no Flash Player e Adobe AIR). Logicamente, o código gerado tende a ser mais rápido, graças a massiva otimização dos compiladores C e, também, devido o modelo de memória da linguagem onde – no reducionismo – tudo se resume a bytes.

Logo no começo dessa empreitada eu esperava uma diferença gritante de desempenho entre os códigos gerados. No entanto, de todos computadores que o aplicativo foi testado a maior diferença foi de oito frames por segundo a favor do Alchemy.

O teste consistiu na criação de um sistema de partículas (Particle System em inglês) para simular fogo. Dois renderizadores foram criados: um escrito em Actionscript3 e compilado na IDE do Flash e outro em C compilado com o Cygwin através do Alchemy. O trabalho de cada renderizador consiste em desenhar o sistema de particulas sobre um bitmap que será exibido na tela. Os algoritmos desenvolvidos em ambas linguagens são extremamente semelhantes, ficando as diferenças a cargo dos diferentes conceitos das linguagens.

O código fonte é distribuído sob a licença LGPL (Lesser GNU Public License).
Download ParticleSystem – código fonte (Actionscript3 e C)
Executar ParticleSystem (requer Flash Player 10)

Anúncios

Mensageiro do Vento

Certa vez tive a ideia de simular no computador um mensageiro do vento (wind chime em inglês), passei algum tempo analisando um objeto mas não consegui estabelecer um modelo preciso. O problema foi na matemática, eu não tinha embasamento suficiente e por isso decidi adiar a ideia.

Mas no verão de 2010, depois estudar física e geometria analítica, resolvi dedicar algum tempo nesse projeto. Ele foi criado em C++ com OpenGL e uma foto da janela do meu apartamento. Na parte de física usei vetores para calcular as forças e acelerações envolvidas (com a segunda lei de Newton) sobre as partes que compõe o mensageiro dos ventos. Cada pedaço é tratado como uma partícula que está presa a uma “corda” com a outra extremidade fixa. Quando uma força é aplicada, a partícula só se moverá até onde a corda permitir, comportando-se como um oscilador.

Já na parte de computação gráfica usei shaders para calcular a luz por pixel nos objetos, multisample para suavizar as formas e filtros de textura para a imagem de fundo.

No princípio o objetivo era que o programa fosse multiplataforma, por isso toda chamada referente ao sistema operacional foi isolada e encapsulada. Mas por falta de tempo só a versão para Windows foi desenvolvida.

Ferramentas usadas no desenvolvimento: compilador MingW e IDE Eclipse com o plugin CDT.
O código fonte é distribuído sob a licença LGPL (Lesser GNU Public License).

 

Download WindChime – executável para Windows
Download WindChime – código fonte (inclui zlib e pnglib)