2016年5月29日 星期日

Processing 基礎 (三) 陣列&燈光

Processing 基礎 (三)  陣列&燈光

          Processing 是視覺繪圖軟體,陣列&燈光是視覺化少不了的,陣列能產生一的連續的表面,燈光可強調立體感。是用 Processing3.11 範例修改。

範例 一 陣列


float[][] distances;  //設定變數
float maxDistance;
int spacer;

void setup() {
  size(640, 640);
  maxDistance = dist(width/2, height/2, width, height);
  distances = new float[width][height];
  for (int y = 0; y < height; y++) {
    for (int x = 0; x < width; x++) {
      float distance = dist(width/2, height/2, x, y);
      distances[x][y] = distance/maxDistance * 255;
    }
  }
  spacer = 10;      
  strokeWeight(7);      //筆畫大小=7
  noLoop();            //只執行一次
}

void draw() {
  background(0);
  for (int y = 0; y < height; y += spacer) {
    for (int x = 0; x < width; x += spacer) {
      stroke(distances[x][y],x,y);       //設定畫筆顏色
      point(x + spacer/2, y + spacer/2); //畫點
    }
  }
}



範例二 燈光


void setup() {          //設定環境
  size(640, 480, P3D);  //畫面大小 604 X 480 啟用3D
  noStroke();          //物體無邊框
  fill(#EA217F);       //填入顏色 #EA217F
}

void draw() {    //開始畫圖
  noStroke();    //無邊框
  background(0);   //背景黑色
  float dirY = (mouseY / float(height) - 0.5) * 2;    //設定變數dirY
  float dirX = (mouseX / float(width) - 0.5) * 2;     //設定變數dirX
  directionalLight(204, 204, 204, -dirX, -dirY, -1);  //設定燈光來源
  translate(width/2 - 100, height/2, 0);      //把座標0,0 設在螢幕寬/2 -100 螢幕高/2
  sphere(80);                 //畫一個半徑80的空心球
  translate(200, 0, 0);       //把坐標0,0右移200
  sphere(80);               //把坐標0,0右移200
}



sphere()

sphere() 空心的圓球這圓球是很多三角形組合成的

語法 :

sphere(半徑)

directionalLight()

      directionalLight()平行光源,directionalLight(v1, v2, v3, nx, ny, nz)須設定平行光源的顏色與來源,v1, v2,v3 可以是RGB或HSB,nx,ny燈源方向,例如 y = -1 表示燈源從底部往上照。

語法 :

directionalLight(v1, v2, v3, nx, ny, nz)

point()

      point()繪製一個點,第一個參數是該點的水平值,第二值是該點的垂直值,可選的第三值是深度值。

語法 :

point(x, y)
point(x, y, z)


參考資料 : https://processing.org/
         

沒有留言:

張貼留言