你的世界是甚麼形狀?你喜愛的又是甚麼形狀?三角形?五角?八角?這個範例做了一個polygon()的函數,用polygon()函數能做出任何的正多邊形。
Processing 是做動畫用的,很多設定概念都來自於動畫,這範例看起來是三個多邊形在轉動,事實上是電腦不斷的算出每個多邊形的頂點然後畫線填滿。
第二段是畫星星,star()這個函數能畫出任何光芒數的星星。
用 Processing 網站所提供的範例更改。
畫多邊形
void setup() {
size(640, 480); //畫面大小640 X 480
frameRate(60); //畫面更新速率 60/秒
}
void draw() {
background(102); //背景設為 灰階 102
pushMatrix();
fill(255,0,0); //填滿紅色
translate(width*0.2, height*0.5); //坐標0,0切換到畫面寬度*0.2高度*0.5的位置
rotate(frameCount / 100.0); //旋轉
polygon(0,0,100, 3); // 3角形
popMatrix();
pushMatrix();
fill(0,255,0); //填滿紅色
translate(width*0.5, height*0.5);
rotate(frameCount / 50.0);
polygon(0, 0, 80, 20); // 20角形
popMatrix();
pushMatrix();
fill(0,0,255); //填滿藍色
translate(width*0.8, height*0.5);
rotate(frameCount / -100.0);
polygon(0, 0, 70, 7); //7角形
popMatrix();
}
void polygon(float x, float y, float radius, int npoints) { //多邊形函數
float angle = TWO_PI / npoints;
beginShape();
for (float a = 0; a < TWO_PI; a += angle) {
float sx = x + cos(a) * radius;
float sy = y + sin(a) * radius;
vertex(sx, sy);
}
endShape(CLOSE);
}
pushMatrix()
translate();是重新定義坐標原點,translate(50,50)會把坐標0,0重新定位在原本50,50的地方,在下一次translate(50,50)坐標0,0會在畫面100,100的位置,一般都跟pushMatrix();popMatrix()配合使用。
語法 :
translate(x, y)
translate(x, y, z)
語法 :
frameRate(速率)
語法 :
beginShape()
beginShape(類型)
類型
POINTS, LINES, TRIANGLES, TRIANGLE_FAN, TRIANGLE_STRIP, QUADS, QUAD_STRIP
語法 :
endShape()
endShape(CLOSE)
參考資料 : https://processing.org/
Processing 是做動畫用的,很多設定概念都來自於動畫,這範例看起來是三個多邊形在轉動,事實上是電腦不斷的算出每個多邊形的頂點然後畫線填滿。
第二段是畫星星,star()這個函數能畫出任何光芒數的星星。
用 Processing 網站所提供的範例更改。
畫多邊形
void setup() {
size(640, 480); //畫面大小640 X 480
frameRate(60); //畫面更新速率 60/秒
}
void draw() {
background(102); //背景設為 灰階 102
pushMatrix();
fill(255,0,0); //填滿紅色
translate(width*0.2, height*0.5); //坐標0,0切換到畫面寬度*0.2高度*0.5的位置
rotate(frameCount / 100.0); //旋轉
polygon(0,0,100, 3); // 3角形
popMatrix();
pushMatrix();
fill(0,255,0); //填滿紅色
translate(width*0.5, height*0.5);
rotate(frameCount / 50.0);
polygon(0, 0, 80, 20); // 20角形
popMatrix();
pushMatrix();
fill(0,0,255); //填滿藍色
translate(width*0.8, height*0.5);
rotate(frameCount / -100.0);
polygon(0, 0, 70, 7); //7角形
popMatrix();
}
void polygon(float x, float y, float radius, int npoints) { //多邊形函數
float angle = TWO_PI / npoints;
beginShape();
for (float a = 0; a < TWO_PI; a += angle) {
float sx = x + cos(a) * radius;
float sy = y + sin(a) * radius;
vertex(sx, sy);
}
endShape(CLOSE);
}
按"撥放"後有三個物體在旋轉
按 "播放"後
畫星星
void setup() {
size(640,480);
}
void draw() {
background(102);
pushMatrix();
fill(#FCB71F);
translate(width*0.2, height*0.5);
rotate(frameCount / 200.0);
star(0, 0, 5, 70, 3);
popMatrix();
pushMatrix();
translate(width*0.5, height*0.5);
fill(#EA9763);
rotate(frameCount / 400.0);
star(0, 0, 60, 100, 12);
fill(#F06711);
ellipse(0, 0, 100,100);
popMatrix();
pushMatrix();
fill(#B1B1DE);
translate(width*0.8, height*0.5);
rotate(frameCount / -100.0);
star(0, 0,30, 70, 5);
popMatrix();
}
void star(float x, float y, float radius1, float radius2, int npoints) { //星狀函數
float angle = TWO_PI / npoints;
float halfAngle = angle/2.0;
beginShape();
for (float a = 0; a < TWO_PI; a += angle) {
float sx = x + cos(a) * radius2;
float sy = y + sin(a) * radius2;
vertex(sx, sy);
sx = x + cos(a+halfAngle) * radius1;
sy = y + sin(a+halfAngle) * radius1;
vertex(sx, sy);
}
endShape(CLOSE);
}
按 "播放"後
Processing 函數
rotate()
rotate()物體繞著原點旋轉,物體旋轉會是整物體的矩陣都一起轉動,配合pushMatrix()translate(x, y)popMatrix()一起使用。
語法 :
rotate(角度)
pushMatrix()
popMatrix()
pushMatrix();popMatrix()是一組的, pushMatrix()後 translate()開始變換坐標0,0的相對位置popMatrix()後會把坐標恢復為系統預設坐標。
語法 :
pushMatrix()
.
.
popMatrix()
translate()
translate();是重新定義坐標原點,translate(50,50)會把坐標0,0重新定位在原本50,50的地方,在下一次translate(50,50)坐標0,0會在畫面100,100的位置,一般都跟pushMatrix();popMatrix()配合使用。語法 :
translate(x, y)
translate(x, y, z)
frameRate()
frameRate()指定畫面更新速率,frameRate(30)就是每秒30幅,這跟電腦的運算能力也有關係,電腦能力不足時會無法達到指定的更新速率。語法 :
frameRate(速率)
beginShape()
beginShape()會沿著指定的端點畫直線或是點到endShape()結束,未指定參數時beginShape()會沿著指定的端點一直畫直線,beginShape(POINTS) 只會畫點,beginShape(LINES)會在兩點間劃出一條線,第2點不會與第3點連接,beginShape(TRIANGLES)每三點畫出一個獨立三角形....。語法 :
beginShape()
beginShape(類型)
類型
POINTS, LINES, TRIANGLES, TRIANGLE_FAN, TRIANGLE_STRIP, QUADS, QUAD_STRIP
endShape()
endShape()是結束畫形狀的函數,endShape()最後一點不會連接到第一點。endShape(CLOSE)會把最後一個頂點連接到第一個頂點。語法 :
endShape()
endShape(CLOSE)
參考資料 : https://processing.org/
沒有留言:
張貼留言