作者 主题: [ 作业提交 ] P5 Workshop (3rd) @ xinchejian DAY2  (阅读 14251 次)

RavenKwok

  • Sr. Member
  • ****
  • 帖子: 277
  • Artist/ Animator/ Coder/ Cynical Asshole
[ 作业提交 ] P5 Workshop (3rd) @ xinchejian DAY2
« 于: 二月 18, 2012, 08:23:26 下午 »
请大家以回帖的形式提交第二天的作业,附上代码和显示窗口的效果图。提交的作业我会在下周六前审阅完毕。 8)

Please reply this post and submit your DAY2's homeworks( including code and snapshot of the display window ). I'll review your homeworks before next Saturday. XD

光羽

  • Newbie
  • *
  • 帖子: 6
Re: [ 作业提交 ] P5 Workshop (3rd) @ xinchejian DAY2
« 回复 #1 于: 二月 20, 2012, 03:58:12 下午 »
沙发是要抢滴...

偷得浮生半日闲,先完成第一题吧。;D

直觉告诉我要用point(),但是貌似官方的Reference链接到pointLight(),介个pointLight()是粒子光还是材质球?用在3D环境中的?

还有就是默认的java2d渲染太坑爹了吧,500*500的窗口就要等上好几秒钟才出东西,看了前面的作业贴换P2D后速度飕飕的。 8)


程序代码
void setup(){
  size(500,500,P2D);
  background(255);
  smooth();
}

void draw(){
  for(int i= 0; i < screen.width; i++){
    for(int j= 0; j < screen.height; j++){
      stroke(random(255));
      point(i,j);
    }
  }
}
« 最后编辑时间: 二月 20, 2012, 04:00:32 下午 作者 光羽 »

IHan

  • Newbie
  • *
  • 帖子: 4
Re: [ 作业提交 ] P5 Workshop (3rd) @ xinchejian DAY2
« 回复 #2 于: 二月 20, 2012, 04:20:54 下午 »
我的跑的好慢哦....

程序代码
float xPos,yPos;

void setup() {
  size(500,500);
  background(255);
  smooth();
  frameRate(30);
}

void draw() {
  for(int i=0 ; i < width ; i++) {
    for (int j=0 ; j < height ; j++) {
      noStroke();
      fill(random(0,255));
      ellipse(xPos+i*2,yPos+j*2,2,2);
    }
  }
}

光羽

  • Newbie
  • *
  • 帖子: 6
Re: [ 作业提交 ] P5 Workshop (3rd) @ xinchejian DAY2
« 回复 #3 于: 二月 20, 2012, 04:22:51 下午 »
跑的慢,开启P2D模式看看呢。  :P

IHan

  • Newbie
  • *
  • 帖子: 4
Re: [ 作业提交 ] P5 Workshop (3rd) @ xinchejian DAY2
« 回复 #4 于: 二月 20, 2012, 04:56:32 下午 »
我的code开P2D模式后就变全白画面...

Anyway, 我沿用光羽的code,但想试试noise:
程序代码
float noiseTime, noiseIncre;

void setup(){
  size(500,500,P2D);
  background(255);
  smooth();
  noiseTime = random(100);
  noiseIncre = random(0,1);
}

void draw(){
  for(int i= 0; i < screen.width; i++){
    for(int j= 0; j < screen.height; j++){
      stroke(noise(noiseTime)*255);
      point(i,j);
      noiseTime += noiseIncre;
    }
  }
}



可是过一会画面就变全灰的了,why?




RavenKwok

  • Sr. Member
  • ****
  • 帖子: 277
  • Artist/ Animator/ Coder/ Cynical Asshole
Re: [ 作业提交 ] P5 Workshop (3rd) @ xinchejian DAY2
« 回复 #5 于: 二月 20, 2012, 09:09:50 下午 »
@光羽

不错,但是有一个比较大的问题。

你的sketch 的运行速度很慢,原因在于你调用了screen.width 以及screen.height。此二者返回的不是当前窗口的大小,而是你当前电脑分辨率的大小。譬如说我的分辨率为1920*1080,你的程序也就绘制了1920*1080 的矩阵大小,当然因为你的窗口比这个要小,所以多余的点不会显示。

一般可以直接用width 和height 来获取当前的窗口大小,无需调用screen。 : )

另外,pointLight() 用于设置三维环境中的点光源参数。

RavenKwok

  • Sr. Member
  • ****
  • 帖子: 277
  • Artist/ Animator/ Coder/ Cynical Asshole
Re: [ 作业提交 ] P5 Workshop (3rd) @ xinchejian DAY2
« 回复 #6 于: 二月 20, 2012, 09:46:32 下午 »
@IHan

先解答你#2楼的问题。

1, 你代码里声明的xPos 和yPos 完全没有使用到(声明后没有赋值,一直为零,且对其没有任何操作),故可以去掉。
2, random(0,255) 可直接写成random(255)。
3, 关于速度慢的问题,原因在于你绘制的是ellipse(),且有smooth()操作。会占用较多的系统资源。其实完全可以用point 来取代,毕竟单个杂点很小 : )

然后是#4楼的问题。

1, Screen 的问题参见我#5楼回复光羽的帖子。
2, 变灰可能是由于你把float 类型变量noiseTime 递增的操作写在了for 循环嵌套内,导致noiseTime 发生rounding error。

IHan

  • Newbie
  • *
  • 帖子: 4
Re: [ 作业提交 ] P5 Workshop (3rd) @ xinchejian DAY2
« 回复 #7 于: 二月 21, 2012, 12:16:24 下午 »
Re: Homework 02- Circle Arc Grid

程序代码
float cRadius, totalAmount, spacing; 
float arcStart, arcEnd;
float cColor;

void setup() {
  size(500,500);
  smooth();
  background(255);
  colorMode(HSB);
  frameRate (2);
  cRadius =25;
  totalAmount = 25;
  spacing = 0.05*cRadius;
}

void draw() {
  for(int i=0 ; i< totalAmount ; i++ ) {   
    for(int j=0 ; j< totalAmount ; j++ ) {
      fill(cColor,150,230);
      noStroke();
      ellipse(0.5*cRadius+cRadius*i+spacing*i,0.5*cRadius+cRadius*j+spacing*j,cRadius,cRadius);
      fill(cColor+20,180,150);
      arc(0.5*cRadius+cRadius*i+spacing*i,0.5*cRadius+cRadius*j+spacing*j,cRadius,cRadius,arcStart,arcStart+arcEnd);
      arcStart = random (2*PI);
      arcEnd = random (2*PI);
      cColor = random (90,230);
    }
  }
}

光羽

  • Newbie
  • *
  • 帖子: 6
Re: [ 作业提交 ] P5 Workshop (3rd) @ xinchejian DAY2
« 回复 #8 于: 二月 21, 2012, 01:28:02 下午 »
上第二题的代码,主要在颜色控制上花了点时间。

请Raven大力指正。

程序代码
float diam;
float eNoiseSeed,aNoiseSeed;
float xPos,yPos;

void setup(){
  size(510,510);
  background(255);
  smooth();
  eNoiseSeed = random(255);
  aNoiseSeed = random(255);
  diam = 30;
}

void draw(){
  noStroke();
  colorMode(HSB,360,100,100);
  for(int i= 0; i < 17; i++){
    for(int j= 0; j < 17; j++){
      fill(noise(eNoiseSeed)*480,255,255);
      xPos = 15+30*i;
      yPos = 15+30*j;
      ellipse(xPos,yPos,diam,diam);
      fill(noise(aNoiseSeed)*480,255,255);
      arc(xPos,yPos,diam,diam,PI/random(10), PI);
      eNoiseSeed +=1;
      aNoiseSeed +=1;
     
    }
  }
  noLoop();
}

Ting

  • Newbie
  • *
  • 帖子: 8
Re: [ 作业提交 ] P5 Workshop (3rd) @ xinchejian DAY2
« 回复 #9 于: 二月 21, 2012, 02:17:36 下午 »
Well 学楼上同学加了个P2D果然快很多 :P

程序代码


void setup(){

  size(500,500,P2D);
 
}

void draw(){

  for(int i=0;i<width;i++){
    for(int j=0;j<height;j++){
     
      stroke(random(255));
      point(i,j);
     
    }
 
  }
 
}


xurenfang

  • Newbie
  • *
  • 帖子: 6
Re: [ 作业提交 ] P5 Workshop (3rd) @ xinchejian DAY2
« 回复 #10 于: 二月 21, 2012, 02:54:32 下午 »
程序代码
float xStart, yStart;
float spacing;

void setup() {
  size(500, 500, P2D);
  background(255);
  frameRate(30);
  smooth();

  xStart=0;
  yStart=0;
  spacing=1;
}
void draw() {

  for (int i=0;i<width;i++) {
    for (int j=0;j<height;j++) {
      stroke(random(255));

      point(xStart+j*spacing, yStart+i*spacing);
    }
  }
}

RavenKwok

  • Sr. Member
  • ****
  • 帖子: 277
  • Artist/ Animator/ Coder/ Cynical Asshole
Re: [ 作业提交 ] P5 Workshop (3rd) @ xinchejian DAY2
« 回复 #11 于: 二月 21, 2012, 02:55:00 下午 »
@IHan

 :) 效果不错,两个问题。

1, 变量名不恰当。你声明的变量cRadius 在程序中被作为圆的直径使用,而radius 原意为半径。
2, for 循环内一些命令的参数过于繁琐,可以声明一些局部变量来让代码的可读性更好,譬如:

程序代码
float x = cRadius/2+i*(cRadius+spacing);
float y = cRadius/2+j*(cRadius+spacing);
ellipse(x,y,cRadius,cRadius);

RavenKwok

  • Sr. Member
  • ****
  • 帖子: 277
  • Artist/ Animator/ Coder/ Cynical Asshole
Re: [ 作业提交 ] P5 Workshop (3rd) @ xinchejian DAY2
« 回复 #12 于: 二月 21, 2012, 03:00:32 下午 »
@光羽

程序代码
arc(xPos,yPos,diam,diam,PI/random(10), PI);

这条命令中的参数会导致弧的终止弧度恒定不变,且当random(10) 的值在0-1之间时,会导致起始弧度会大于终止弧度,弧就无法正常被绘制。 :)

RavenKwok

  • Sr. Member
  • ****
  • 帖子: 277
  • Artist/ Animator/ Coder/ Cynical Asshole
Re: [ 作业提交 ] P5 Workshop (3rd) @ xinchejian DAY2
« 回复 #13 于: 二月 21, 2012, 03:03:57 下午 »
@Ting

赞。效果没问题,代码简洁干净。但是是站在前人肩膀上捏,哈哈。 ;D

RavenKwok

  • Sr. Member
  • ****
  • 帖子: 277
  • Artist/ Animator/ Coder/ Cynical Asshole
Re: [ 作业提交 ] P5 Workshop (3rd) @ xinchejian DAY2
« 回复 #14 于: 二月 21, 2012, 03:06:21 下午 »
@xurenfang

很不错,代码干净易读。 :)

Tags: ...