Skip navigation

hoje introduzimos o openframeworks. primeiro configuramos os compiladores e as pastas do openframeworks, revemos as noções de programação com objectos em java no processing, e exemplificamos algumas aplicações feitas com o openframeworks.

configuração dos compiladores

as páginas de setup dos compiladores da equipa do openframeworks são claras e devem ser seguidas passo a passo com atenção. nos pc’s instalamos o codeblocks com mingw, e nos mac’s o xcode.

para ‘instalar’ o openframeworks, basta descarregar o ficheiro da nossa plataforma (006 xcode fat para mac e 006 codeblocks fat para windows), descomprimi-lo e mover a pasta para uma directoria de trabalho à nossa escolha. o que é importante é manter a estrutura de directorias das pastas dentro da versão of que descarregam:

of006/addons/
of006/apps/
of006/libs/
of006/other/

os nossos projectos para compilar consistem apenas do src folder. vamos ter de copiar um projecto dos exemplos do openframeworks.

primeiro temos de criar uma directoria de trabalho dentro da estrutura do openframeworks. criei a directoria apps/somdopensamento/. de seguida copiamos os ficheiros da sessão para dentro desta directoria. os ficheiros trazem uma pasta com o nome do projecto, e uma subpasta src que tem o source code. mas ainda faltam os projectos. este passo é importante, só assim os projectos estarão correctamente configurados para compilação. primeiro copiamos um projecto dos exemplos ou dos addons (se usarmos addons), das pastas nativas apps/examples, apps/addons. (em apps/examples/emptyexample, no xcode copia-se openFrameworks.xcodeproj e openFrameworks-Info.plist, no codeblocks copia-se apps/examples/emptyexample/openFrameworks.cbp). agora as nossas pastas dentro de apps/somdopensamento devem ter os projectos duplicados dos exemplos e uma subpasta ‘src’ que tem os ficheiros .h e .cpp onde está declarado o código c++ que tentamos compilar.

para a configuração dos project files nos compiladores, antes de a iniciarem, devem ter algo como

of006/apps/somdopensamento/sp15_circulo/src/main.cpp
of006/apps/somdopensamento/sp15_circulo/src/testApp.cpp
of006/apps/somdopensamento/sp15_circulo/src/testApp.h
of006/apps/somdopensamento/sp15_circulo/openFrameworks.xcodeproj
of006/apps/somdopensamento/sp15_circulo/openFrameworks-Info.plist

(para os pc’s é semelhante, copiamos o ficheiro de projecto codeblocks que está nos exemplos para este local)

abre-se o projecto no xcode ou codeblocks, e na área de browser do projecto, primeiro removemos todos os ficheiros que lá estão, depois introduzimos os ficheiros .h e .cpp que fazem parte do nosso projecto (no mac arrastam-se os ficheiros para a subpasta src no browser do projecto do xcode, no pc seleciona-se o projecto com o botão do lado direito e selecciona-se add files..). após este passo final, devemos ter o projecto configurado e pronto para o próximo passo, que corresponde à compilação do código fonte, corrigir eventuais erros devolvidos pelo compilador, e ligações às várias bibliotecas de código (linker) que se usam (opengl, opencv, rtaudio, freetype, etc, etc). para compilarmos há-de haver uma opção para build and run.

após a compilação deve surgir dentro da pasta do nosso projecto um ficheiro binário executável na nossa plataforma que corre o código exemplo simples da criação de um círculo que segue o rato.

oop (object oriented programming)

semelhante ao primeiro exemplo do processing, fomos passar as variáveis necessárias à criação de um circulo dentro de uma class, com variáveis e funções. em c++ a definição de classes é muito semelhante ao processing, apenas temos de em conta dois passos importantes.

o primeiro é a inclusão do header apenas uma vez, através das directivas #ifndef CIRCULO_H, #define CIRCULO_H e #endif. a outra noção é terminar a declaração da class no header com um ‘;’ após as chavetas ‘}’ que terminam a declaração da classe.

este é o header da class circulo, e a seguir o ficheiro cpp da mesma class.

15-classh

15-classcpp

no testApp.h, o local onde começamos a programar a nossa função, em vez de termos variáveis float posx, posy, rad como no primeiro exemplo, temos agora um objecto circulo do tipo Circulo que definimos nos ficheiros circulo.h e circulo.cpp anteriores.

15-browser-circulo-class

a função update da testApp no ficheiro testApp.cpp chama a go_mouse(); e a draw simplesmente desenha o circulo no ecran

void testApp::draw(){

ofBackground(58,95,83);

circulo.draw();

}

devemos ver isto.

15-circulo

um segundo exemplo cria uma array de objectos Circulo e todos eles chamam a draw e fazem o update das coordenadas em relação ao rato.

15-circulos

o terceiro exemplo mostra como ter um apontador para objectos de um tipo que nós definimos, class Part, no testApp.h declaramos

Part *p; // um pointer para partículas

int num_p; // o número de partículas

e alocamos memória para o apontador na função

void init_n_parts(int num);

que é declarada no ficheiro testApp.cpp desta forma:

void testApp::init_n_parts(int num){ //pedimos memória para o apontador com tamanho para array com num elementos p = new Part[num]; num_p = num; float w = ofGetWidth()/2.0f; float h = ofGetHeight()/2.0f; for(int i=0; i<num;i++){ float x = w+ofRandom(-100,100); float y = h+ofRandom(-100,100); p[i].init(x,y); } } 15-parts

o quarto exemplo é um port do starfield que vimos como exemplo inicial 3d em processing. aqui o mais importante é o uso de um apontador dentro da class Star que aponta para um valor dentro da testApp, que será igual para todas as estrelas. o apontador é inicializado na função testApp::setup() e a partir desse momento podemos escrever o mesmo valor global para cada estrela.

15-starfield

o quinto exemplo é um exemplo de computer vision, onde exploramos algumas técnicas de identificar blobs nas imagens e tentar usar os dados para representar objectos. já é um exemplo mais complexo, onde criamos um objecto class ComputerVision que vai iniciar a câmara e fazer um tracking de blobs usando o addon ofxOpenCv, que coloca à nossa disposição a biblioteca opencv da intel.

15-blosc

Anúncios

One Comment

  1. ha muito bons tutoriais c++ na net. este é um deles: http://www.cplusplus.com/doc/tutorial/


One Trackback/Pingback

  1. By sessão 18 « O Som do Pensamento on 27 Maio 2009 at 11:41 am

    […] de imagem, som, comunicação por rede, interacções com sons e rato e electrónicas. (sessões 15, […]

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s

%d bloggers like this: