Bibliotecas Processing
O Processing é voltado para
Por padrão, o Processing é tem recursos limitados
O Processing pode ser estendido através de bibliotecas
+ -Bibliotecas são conjuntos de arquivos que permitem a utilização de novos recursos no Processing
Bibliotecas são conjuntos de Classes e Métodos
Chamadas de "core libraries"
Não precisa instalar nada
Video
Rede
Som
...
"Contributed Libraries"
Geradas pela comunidade
+ - ~ Oficiais
+ - Outras
Core libraries
Acesse a documentação da biblioteca
+ -Ir no menu Sketch > Import Library
import ddf.minim.signals.*;
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.effects.*;
Definir as variáveis (objetos) que representam a instância de uma classe da Biblioteca
Minim minim; AudioPlayer player; AudioInput input;
Inicializar as variáveis
Chamar os métodos da biblioteca
Contributed Libraries
Fechar o Processing
Fazer o download da biblioteca
Descompactar o arquivo, se necessário
+ -Abrir a pasta de projetos do Processing
SE não existir a pasta libraries, dentro da pasta de projetos do Processing, criar esta pasta
+ -Copiar a biblioteca para dentro da pasta libraries
Abrir o Processing
+ - Ir no menu Sketch > Import Library... A biblioteca aparece na lista
~ Agora, siga os passos já utilizados anteriormente para as Core Libraries
Biblioteca Minim
import ddf.minim.*;
// Objetos necessários para trabalhar com som
Minim minim;
// Cada um dos sons
AudioPlayer song;
import ddf.minim.*;
// Objetos necessários para trabalhar com som
Minim minim;
// Cada um dos sons
AudioPlayer song;
void setup()
{
size(100, 100);
// Instancia o objeto
minim = new Minim(this);
// Carrega o som "ocupado.mp3" que está dentro da pasta 'data'
song = minim.loadFile("ocupado.mp3");
song.play();
}
void draw()
{
background(0);
}
void stop()
{
// Importante para interromper o som!
song.close();
minim.stop();
super.stop();
}
~ Precisa da biblioteca OpenCV
import hypermedia.video.*;
// Objeto do OpenCV
OpenCV opencv;
void setup() {
size( 160, 120 );
// Instancia o objeto
opencv = new OpenCV( this );
// Executa o filme
opencv.movie( "bunny.avi" );
}
void draw() {
// Lê um frame
opencv.read();
// Exibe o frame na tela
image( opencv.image(), 0, 0 );
}
~ Precisa da biblioteca OpenCV
import hypermedia.video.*;
// Objeto do OpenCV
OpenCV opencv;
// Tamanho da Imagem a ser capturada da webcam
final int IMG_WIDTH = 320;
final int IMG_HEIGHT = 240;
void setup() {
// Tamanho da tela
size( IMG_WIDTH, IMG_HEIGHT);
// Instancia o OpenCV
opencv = new OpenCV(this);
// Inicializa a captura
opencv.capture(IMG_WIDTH, IMG_HEIGHT);
}
void draw() {
// Lê imagem
opencv.read();
// Mostra na tela
image( opencv.image(), 0, 0 );
}
// Para tudo
public void stop() {
opencv.stop();
super.stop();
}
// Ver manual das funções em:
// http://www.box2d.org/manual.html
// http://jbox2d.nfshost.com/processing/doc/index.html
// Bug!
// Ver: http://processing.org/discourse/yabb2/YaBB.pl?num=1213404906/15
//import org.jbox2d.testbed.tests.*;
//import org.jbox2d.util.blob.*;
//import org.jbox2d.testbed.timingTests.*;
import org.jbox2d.testbed.*;
import org.jbox2d.dynamics.contacts.*;
import org.jbox2d.p5.*;
import org.jbox2d.dynamics.*;
import org.jbox2d.common.*;
import org.jbox2d.collision.*;
import org.jbox2d.dynamics.joints.*;
Physics physics;
void setup() {
// Inicializa a tela
size(640,480,P3D);
// Cria a engine de física (o mundo)
// escala: 10 pixels = 1 metro
physics = new Physics(this, width, height);
//
physics.setDensity(1.0f);
}
void draw() {
background(0);
if (mousePressed) {
//Create a body
float x0 = mouseX;
float y0 = mouseY;
// Cria círculo com posição x, y e raio
Body randomBod = physics.createCircle(x0, y0, random(5.0f,15f));
// Cria uma velocidade
Vec2 vel = new Vec2(random(-30.0f,30.0f),random(-30.0f,30.0f));
// Seta a velocidade para o corpo criado
randomBod.setLinearVelocity(vel);
}
}
// Ver manual das funções em:
// http://www.box2d.org/manual.html
// http://jbox2d.nfshost.com/processing/doc/index.html
// Bug!
// Ver: http://processing.org/discourse/yabb2/YaBB.pl?num=1213404906/15
//import org.jbox2d.testbed.tests.*;
//import org.jbox2d.util.blob.*;
//import org.jbox2d.testbed.timingTests.*;
import org.jbox2d.testbed.*;
import org.jbox2d.dynamics.contacts.*;
import org.jbox2d.p5.*;
import org.jbox2d.dynamics.*;
import org.jbox2d.common.*;
import org.jbox2d.collision.*;
import org.jbox2d.dynamics.joints.*;
Physics physics;
void setup() {
// Inicializa a tela
size(640,480,P3D);
// Cria a engine de física (o mundo)
// escala: 10 pixels = 1 metro
physics = new Physics(this, width, height);
}
void draw() {
background(0);
}
// MousePressed é chamado quando o botão do mouse é pressionado
void mousePressed() {
// Dá uma densidade aos corpos criados
physics.setDensity(1.0f);
//Cria um corpo (círculo) na posição do mouse
float x0 = mouseX;
float y0 = mouseY;
Body randomBod = physics.createCircle(x0, y0, random(5.0f,15f));
// Atribui uma velocidade em x e em y para o corpo
Vec2 vel = new Vec2(random(-30.0f,30.0f),random(-30.0f,30.0f));
randomBod.setLinearVelocity(vel);
}
// KeyPressed é chamado quando qualquer tecla é pressionada
void keyPressed() {
// Dá uma densidade 0 aos corpos criados a partir deste ponto.
// Corpos com densidade 0 são estáticos (parados)
physics.setDensity(0);
//Cria um corpo na posição do mouse
float x0 = mouseX;
float y0 = mouseY;
Body randomBod = physics.createRect(x0, y0, x0+random(10, 20), y0+random(10,20) );
// Atribui uma velocidade em x e em y para o corpo
Vec2 vel = new Vec2(random(-30.0f,30.0f),random(-30.0f,30.0f));
randomBod.setLinearVelocity(vel);
}
// Ver manual das funções em:
// http://www.box2d.org/manual.html
// http://jbox2d.nfshost.com/processing/doc/index.html
// Bug!
// Ver: http://processing.org/discourse/yabb2/YaBB.pl?num=1213404906/15
//import org.jbox2d.testbed.tests.*;
//import org.jbox2d.util.blob.*;
//import org.jbox2d.testbed.timingTests.*;
import org.jbox2d.testbed.*;
import org.jbox2d.dynamics.contacts.*;
import org.jbox2d.p5.*;
import org.jbox2d.dynamics.*;
import org.jbox2d.common.*;
import org.jbox2d.collision.*;
import org.jbox2d.dynamics.joints.*;
Physics physics;
float densidade = 0;
int tipo = 0;
int numCorpos = 0;
Body [] corpos;
void setup() {
// Inicializa a tela
size(640,480,P3D);
// Cria a engine de física (o mundo)
// escala: 10 pixels = 1 metro
physics = new Physics(this, width, height);
textFont(createFont("Arial",20));
smooth();
// Limita a quantidade de corpos!
corpos = new Body[100];
}
void draw() {
background(0);
stroke(0);
fill(255);
rect(30, 30, 200, 100);
fill(255,0,0);
text("densidade = " + densidade, 50, 50);
text("tipo = " + tipo, 50, 70);
text("numCorpos = " + numCorpos, 50, 90);
}
// MousePressed é chamado quando o botão do mouse é pressionado
void mousePressed() {
// Dá uma densidade aos corpos criados (zero o corpo fica parado)
physics.setDensity(densidade);
//Cria um corpo (círculo) na posição do mouse
float x0 = mouseX;
float y0 = mouseY;
Body randomBod = null;
Body [] randomBodies = null;
RevoluteJoint joint = null;
// Cria cada um dos tipos diferentes de corpos
switch(tipo)
{
case 0:
// Cria um círculo
randomBod = physics.createCircle(x0, y0, random(5.0f,15f));
break;
case 1:
// Cria um retângulo
randomBod = physics.createRect(x0, y0, x0 + random(5, 15), y0 + random(5,15));
break;
case 2:
// Cria uma caixa
randomBodies = physics.createHollowBox(x0, y0, random(20, 40),random(20,40), 3);
break;
case 3:
// Na criação de um polígono a ordem dos pontos importa!
randomBod = physics.createPolygon(x0+random(10, 20), y0+random(10,20), x0+random(10, 20), y0, x0, y0);
break;
case 4:
// Cria uma junção entre corpos
if(numCorpos>=2)
{
joint = physics.createRevoluteJoint(corpos[numCorpos-1], corpos[numCorpos-2], width/2, height/2);
}
break;
}
if(randomBod!=null) {
// Atribui uma velocidade em x e em y para o corpo
Vec2 vel = new Vec2(random(-30.0f,30.0f),random(-30.0f,30.0f));
randomBod.setLinearVelocity(vel);
corpos[numCorpos++] = randomBod;
}
if(randomBodies!=null) {
// Atribui uma velocidade em x e em y para o corpo
for(int i=0;i<4;i++)
{
Vec2 vel = new Vec2(random(-30.0f,30.0f),random(-30.0f,30.0f));
randomBodies[i].setLinearVelocity(vel);
corpos[numCorpos++] = randomBodies[i];
}
}
// todo: Melhorar isso!
if(numCorpos>=95)
{
numCorpos = 0;
}
}
// KeyPressed é chamado quando qualquer tecla é pressionada
void keyPressed() {
if(key==CODED) // Teclas especiais
{
if(keyCode==UP) {
densidade = densidade + 1;
}
if(keyCode==DOWN) {
densidade = densidade - 1;
}
if(keyCode==LEFT) {
tipo--;
}
if(keyCode==RIGHT) {
tipo++;
}
}
}