作者 主题: [ 作业讨论 ] DAY3 - Grainy Screen 雪花屏  (阅读 10006 次)

RavenKwok

  • Sr. Member
  • ****
  • 帖子: 277
  • Artist/ Animator/ Coder/ Cynical Asshole
[ 作业讨论 ] DAY3 - Grainy Screen 雪花屏
« 于: 十月 31, 2011, 08:33:06 下午 »
作业需要达到的效果图在DAY3 pdf 第19页上。

提示:用两个for 循环的嵌套来完成。 8)
« 最后编辑时间: 十月 31, 2011, 08:36:05 下午 作者 RavenKwok »

Linyew

  • Newbie
  • *
  • 帖子: 7
Re: [ 作业讨论 ] DAY3 - Grainy Screen 雪花屏
« 回复 #1 于: 十一月 01, 2011, 10:31:13 上午 »


因为计算次数的关系(100,00次),速度慢下来了。有何方法可以更进?

程序代码
int totalAmount;
void setup() {
  size(500, 500);
  noStroke();
  totalAmount = 100000;
}

void draw() {
  background(255);
  for (int i=0; i<totalAmount; i++){ drawGrain(random(width), random(height), random(2), random(254));}
}

void drawGrain(float x, float y, float mySize, float myColor) {
  fill(myColor);
  ellipse(x, y, mySize, mySize);
}

RavenKwok

  • Sr. Member
  • ****
  • 帖子: 277
  • Artist/ Animator/ Coder/ Cynical Asshole
Re: [ 作业讨论 ] DAY3 - Grainy Screen 雪花屏
« 回复 #2 于: 十一月 01, 2011, 02:21:38 下午 »
@Linyew

提升运算速度的话,可以开启P2D 渲染模式。另外,直径为random(2) 的圆有些没有必要,直接用point() 来代替之反而更好。

代码如下。 ::)

程序代码
int totalAmount;
void setup() {
  size(500, 500,P2D);
  noStroke();
  totalAmount = 100000;
}
void draw() {
  background(255);
  for (int i=0; i<totalAmount; i++){ drawGrain(random(width), random(height),random(255));}
}
void drawGrain(float x, float y,float myColor) {
  stroke(myColor);
  point(x, y);
}

calvinhuang

  • Newbie
  • *
  • 帖子: 8
Re: [ 作业讨论 ] DAY3 - Grainy Screen 雪花屏
« 回复 #3 于: 十一月 01, 2011, 03:37:46 下午 »
颜色为什么只有一种啊
程序代码
void setup() {
  size(400, 400,P2D);
}
void draw() {
  background(255);
  for (int x=0; x<width; x++){
    for(int y=0; y<height; y++){
      stroke(HSB,random(360), 100, 100);
      //[color=red]strokeWeight(random(0,2));[/color]
      point(x,y);
    }
  }
}

RavenKwok

  • Sr. Member
  • ****
  • 帖子: 277
  • Artist/ Animator/ Coder/ Cynical Asshole
Re: [ 作业讨论 ] DAY3 - Grainy Screen 雪花屏
« 回复 #4 于: 十一月 01, 2011, 11:05:01 下午 »
@calvinhuang

stroke(HSB,random(360), 100, 100);

俺就不继续解释了哦。。。自己查一下官方Reference 吧。 ::)

kulala

  • Newbie
  • *
  • 帖子: 6
Re: [ 作业讨论 ] DAY3 - Grainy Screen 雪花屏
« 回复 #5 于: 十一月 03, 2011, 12:25:07 上午 »
尝试了下用不同的渲染模式,不同的画点的方式。效果差别还挺大的。
程序代码
import processing.opengl.*;


float i,k;

void setup(){
//size(500,500,P2D);
//size(500,500,P3D);
size(500,500,OPENGL);
background(0);
lights();
i = 0;
k = 0;
}

void draw(){
  noStroke();
  fill(0);
  rect(0,0,500,500);
  fill(255);
  for (i=0;i<500;i+=1.4) {
    for (k=0;k<500;k+=1.5){
    //ellipse(i+random(0,2.3),k+random(0,3.1),random(0,1.5),random(0,1.5));
    //ellipse(i+random(0,250),k+random(0,250),1,1);
    stroke(255);
    //stroke(HSB,random(360),100,100);
    point(i+random(0,3),k+random(0,3));
    //point(i+random(0,500),k+random(0,500));
    }
  }
}

RavenKwok

  • Sr. Member
  • ****
  • 帖子: 277
  • Artist/ Animator/ Coder/ Cynical Asshole
Re: [ 作业讨论 ] DAY3 - Grainy Screen 雪花屏
« 回复 #6 于: 十一月 03, 2011, 04:31:19 下午 »
@kulala

不仅仅是效果,有时执行效率也会相差蛮大的。 :)

钱 卓 韵

  • Newbie
  • *
  • 帖子: 7
  • 学习中 恩
Re: [ 作业讨论 ] DAY3 - Grainy Screen 雪花屏
« 回复 #7 于: 十一月 04, 2011, 03:40:51 上午 »
睡不着起来交作业什么的 >:(
程序代码
int totalAmount;

void setup() {
  size(500, 500,P2D);
  totalAmount = 500;
}
void draw() {
  background(255);
  for (int i=0;i<totalAmount;i++) {
    for (int j=0;j<totalAmount;j++) {
      stroke(random(255));
      point(i, j);
    }
  }
}

RavenKwok

  • Sr. Member
  • ****
  • 帖子: 277
  • Artist/ Animator/ Coder/ Cynical Asshole
Re: [ 作业讨论 ] DAY3 - Grainy Screen 雪花屏
« 回复 #8 于: 十一月 04, 2011, 08:59:09 上午 »
@钱 卓 韵

啧啧,很好。简洁明了。 ;) 去做一下DNA Helix 那个吧。

Tags: