2009/01/06

Glow



今まで、どうやったらProcessingで輝く効果を作ることができるのか悩んでました。
Quartz Composerだったら簡単にBlendingを「Add」にすれば良かったのですが。
(一般的な画像編集ソフトでの「加算レイヤー」みたいな感じの効果)
Processingではできないのかな、とも思っていました。
でもFlight404の動画とかはちゃんと輝いてるし・・・

そういうのが今日解決しました。
Processingのリファレンスをちゃんと読んだら載ってるじゃないですか!
blend()というのがあったんですね!!
これを使うと様々な効果が得られるようです!!!

ソースコードも載せときます。
汚いし綺麗な動きじゃないですが、まあこの効果を確かめるために適当にやったので、もうちょっと綺麗なのを作れるように頑張ります。


PImage img = createImage(66,66,ARGB);
PImage img2 = createImage(66,66,ARGB);

void setup(){
size(400,400);
background(0);
imageMode(CENTER);
colorMode(HSB,100);
smooth();
frameRate(20);

//create CIRCLE

for(int y=0; y< img.height; y++){
for(int x=0; x< img.width; x++){
int pos = (y*img.width) + x;

img.pixels[pos] = color(0,0);
img2.pixels[pos] = color(0,0);
if(CIRCLE(img.width,img.height,x,y)){
float Dist1 = dist(x,y,img.width/2,img.height/2);
float Dist2 = dist(x,y,img2.width/2,img2.height/2);
Dist1 = map(Dist1,0,33,0,99);
Dist2 = map(Dist2,0,33,0,99);
img.pixels[pos] = color(60,99,99,99-Dist1);
img2.pixels[pos] = color(10,99,99,99-Dist2);
}
}
}
}

float r = 100;

void draw(){
fill(0);
rect(0,0,width,height);
for(int i=0; i<100; i++){
blend(img,0,0,img.width,img.height,
int(random(width)),int(random(height)),img.width,img.height,ADD);
blend(img2,0,0,img.width,img.height,
int(random(width)),int(random(height)),img.width,img.height,ADD);
}

}

boolean CIRCLE(float W,float H,float X,float Y){
float a = H/2;
float b = W/2;

float oval = sq(X-a)/sq(a) + sq(Y-b)/sq(b);
if(oval <= 1){
return true;
}else return false;
}

0 件のコメント:

コメントを投稿