Processing으로 발광 표현을 시도했다.
3768 단어 processing
Processing을 사용하여 발광 표현을 사용해보십시오.
이 기사에서는 Processing을 사용하여 발광 표현을 이용한 작품 예를 소개합니다.
기법
Processing에서 발광 표현 라고 하는 기사의 코드를 이용하셔서, 이것을 클래스로 해 어레인지했습니다.
약간의 인터랙티브성을 갖게 하기 위해서, 마우스를 움직이면 구가 커지도록 쓰고 있습니다.
소스 코드도 올려 둡니다.
PImage img;
float t=0;
float amp;
float r=120;
float min_radius = 120;
float max_radius = 200;
pixel_circle[] c=new pixel_circle[6];
void setup(){
fullScreen(P3D);
frameRate(45);
hint(DISABLE_DEPTH_TEST);
blendMode(ADD);
imageMode(CENTER);
for(int num=0;num<6;num++){
img=createLight(random(0.6,0.9),random(0.3,0.5),random(0.6,0.8));
c[num]=new pixel_circle(r,img);
}
}
void draw(){
background(15,20,50);
translate(width/2,height/2,0);
rotateX(frameCount*0.01);
rotateY(frameCount*0.01);
rotateZ(frameCount*0.01);
translate(-width/4*amp,0,0);
amp=cos(radians(t))*cos(radians(t));
change_color(c,amp);
r = change_radius(c,r);
c[0].display();
translate(width/2*amp,0,0);
c[1].display();
translate(-width/4*amp,width/4*amp,0);
c[2].display();
translate(0,-width/2*amp,0);
c[3].display();
translate(0,width/4*amp,-width/4*amp);
c[4].display();
translate(0,0,width/2*amp);
c[5].display();
t++;
}
void change_color(pixel_circle[] c,float amp){
if(amp<0.002){
for(int num=0;num<6;num++){
c[num].change_color();
}
}
}
float change_radius(pixel_circle[] c,float r){
if(dist(mouseX,mouseY,pmouseX,pmouseY)>0){
r+=2;
if(r>max_radius){
r=max_radius;
}
}
else{
r-=2;
if(r<min_radius){
r=min_radius;
}
}
for(int num=0;num<6;num++){
c[num].change_radius(r);
}
return r;
}
PImage createLight(float rPower,float gPower,float bPower){
int side=150;
float center=side/2.0;
PImage img=createImage(side,side,RGB);
for(int y=0;y<side;y++){
for(int x=0;x<side;x++){
float distance=(sq(center-x)+sq(center-y))/50.0;
int r=int((255*rPower)/distance);
int g=int((255*gPower)/distance);
int b=int((255*bPower)/distance);
img.pixels[x+y*side]=color(r,g,b);
}
}
return img;
}
class pixel_circle{
float radius;
float x,y,z;
float velocity=0;
PImage img1;
pixel_circle(float radius1,PImage img2){
radius=radius1;
img1=img2;
}
void display(){
float lastX=0,lastY=0,lastZ=0;
float s=0,t=0;
rotateX(frameCount*0.01);
rotateY(frameCount*0.01);
while(s<=180){
float radianS=radians(s)%(2*PI);
float radianT=radians(t)%(2*PI);
float x=radius*sin(radianS)*cos(radianT);
float y=radius*sin(radianS)*sin(radianT);
float z=radius*cos(radianS);
stroke(128);
if(lastX!=0){
strokeWeight(0.2);
line(x,y,z,lastX,lastY,lastZ);
}
pushMatrix();
translate(x,y,z);
rotateY(-frameCount*0.01);
rotateX(-frameCount*0.01);
image(img1,0,0);
popMatrix();
lastX=x;
lastY=y;
lastZ=z;
s++;
t+=velocity;
}
rotateY(-frameCount*0.01);
rotateX(-frameCount*0.01);
velocity+=0.04;
}
void change_color(){
img1=createLight(random(0.5,0.8),random(0.5,0.8),random(0.5,0.8));
}
void change_radius(float r1){
radius=r1;
}
}
결과
[추기] 다른 작품 도 줬습니다!
Reference
이 문제에 관하여(Processing으로 발광 표현을 시도했다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mikittt/items/22671e1a4c35a90ea028
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Processing에서 발광 표현 라고 하는 기사의 코드를 이용하셔서, 이것을 클래스로 해 어레인지했습니다.
약간의 인터랙티브성을 갖게 하기 위해서, 마우스를 움직이면 구가 커지도록 쓰고 있습니다.
소스 코드도 올려 둡니다.
PImage img;
float t=0;
float amp;
float r=120;
float min_radius = 120;
float max_radius = 200;
pixel_circle[] c=new pixel_circle[6];
void setup(){
fullScreen(P3D);
frameRate(45);
hint(DISABLE_DEPTH_TEST);
blendMode(ADD);
imageMode(CENTER);
for(int num=0;num<6;num++){
img=createLight(random(0.6,0.9),random(0.3,0.5),random(0.6,0.8));
c[num]=new pixel_circle(r,img);
}
}
void draw(){
background(15,20,50);
translate(width/2,height/2,0);
rotateX(frameCount*0.01);
rotateY(frameCount*0.01);
rotateZ(frameCount*0.01);
translate(-width/4*amp,0,0);
amp=cos(radians(t))*cos(radians(t));
change_color(c,amp);
r = change_radius(c,r);
c[0].display();
translate(width/2*amp,0,0);
c[1].display();
translate(-width/4*amp,width/4*amp,0);
c[2].display();
translate(0,-width/2*amp,0);
c[3].display();
translate(0,width/4*amp,-width/4*amp);
c[4].display();
translate(0,0,width/2*amp);
c[5].display();
t++;
}
void change_color(pixel_circle[] c,float amp){
if(amp<0.002){
for(int num=0;num<6;num++){
c[num].change_color();
}
}
}
float change_radius(pixel_circle[] c,float r){
if(dist(mouseX,mouseY,pmouseX,pmouseY)>0){
r+=2;
if(r>max_radius){
r=max_radius;
}
}
else{
r-=2;
if(r<min_radius){
r=min_radius;
}
}
for(int num=0;num<6;num++){
c[num].change_radius(r);
}
return r;
}
PImage createLight(float rPower,float gPower,float bPower){
int side=150;
float center=side/2.0;
PImage img=createImage(side,side,RGB);
for(int y=0;y<side;y++){
for(int x=0;x<side;x++){
float distance=(sq(center-x)+sq(center-y))/50.0;
int r=int((255*rPower)/distance);
int g=int((255*gPower)/distance);
int b=int((255*bPower)/distance);
img.pixels[x+y*side]=color(r,g,b);
}
}
return img;
}
class pixel_circle{
float radius;
float x,y,z;
float velocity=0;
PImage img1;
pixel_circle(float radius1,PImage img2){
radius=radius1;
img1=img2;
}
void display(){
float lastX=0,lastY=0,lastZ=0;
float s=0,t=0;
rotateX(frameCount*0.01);
rotateY(frameCount*0.01);
while(s<=180){
float radianS=radians(s)%(2*PI);
float radianT=radians(t)%(2*PI);
float x=radius*sin(radianS)*cos(radianT);
float y=radius*sin(radianS)*sin(radianT);
float z=radius*cos(radianS);
stroke(128);
if(lastX!=0){
strokeWeight(0.2);
line(x,y,z,lastX,lastY,lastZ);
}
pushMatrix();
translate(x,y,z);
rotateY(-frameCount*0.01);
rotateX(-frameCount*0.01);
image(img1,0,0);
popMatrix();
lastX=x;
lastY=y;
lastZ=z;
s++;
t+=velocity;
}
rotateY(-frameCount*0.01);
rotateX(-frameCount*0.01);
velocity+=0.04;
}
void change_color(){
img1=createLight(random(0.5,0.8),random(0.5,0.8),random(0.5,0.8));
}
void change_radius(float r1){
radius=r1;
}
}
결과
[추기] 다른 작품 도 줬습니다!
Reference
이 문제에 관하여(Processing으로 발광 표현을 시도했다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mikittt/items/22671e1a4c35a90ea028
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Processing으로 발광 표현을 시도했다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mikittt/items/22671e1a4c35a90ea028텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)