week05
第一步 畫出3D的盒子並跟著滑鼠移動
void setup(){
size(400, 400, P3D);//3D功能
}
void draw(){
background(#FFFFF2);
pushMatrix();//備份矩陣
translate(mouseX, mouseY);//移動到滑鼠位子
box(100);//3D的盒子、方塊
popMatrix();//還原矩陣
}
第二步 旋轉
void setup(){
size(400, 400, P3D);
}
void draw(){
background(#FFFFF2);
pushMatrix();
translate(mouseX, mouseY);
rotateY(radians(mouseX));//對Y軸轉動
box(100);
popMatrix();
}
第三步 變透明
noFill();//無填充(變透明)
第四步 大的盒子包小的盒子(綠色)
......
void draw(){
background(#FFFFF2);
pushMatrix();
translate(mouseX, mouseY);
rotateY(radians(mouseX));
fill(0,255,0);//綠色
box(100);
noFill();
scale(2);//放大2倍
box(100);
popMatrix();
}
第五步 點線面色彩
size(400, 400, P3D);
beginShape();
fill(255,0,0); vertex(200,0);
fill(0,255,0); vertex(0,400);
fill(0,0,255); vertex(400,400);
endShape();
size(400, 400, P3D);
noFill();
beginShape();
vertex(200,0);
vertex(0,400);
vertex(400,400);
endShape(CLOSE);
第七步
ArrayList<PVector>pt;//大的資料結構ArrayList(可長可短的陣列)
void setup(){
size(400,400,P3D);
pt = new ArrayList<PVector>();
}//初始化,把大的資料結構準備好(裡面放小的資料結構)
void draw(){
background(#FFFFF2);
for(PVector p : pt){//特殊的for迴圈,得小資料結構
ellipse(p.x, p.y, 10,10);
}
}
void mousePressed(){
pt.add(new PVector(mouseX, mouseY));
}//大的資料結構裡,加入小的PVector的物件
第八步 連出圖形
ArrayList<PVector>pt;
void setup(){
size(400,400,P3D);
pt = new ArrayList<PVector>();
}
void draw(){
background(#FFFFF2);
for(PVector p : pt){
ellipse(p.x, p.y,10,10);
}
beginShape();
for(PVector p : pt){
vertex(p.x, p.y);
}
endShape();
}
void mousePressed(){
pt.add(new PVector(mouseX, mouseY));
}
第九步 按右鍵會轉動
........
void draw(){
background(#FFFFF2);
pushMatrix();
if(mousePressed && mouseButton == RIGHT){
translate(200,200);
rotateY(radians(frameCount));
translate(-200,-200);
}
for(PVector p : pt){
ellipse(p.x, p.y,10,10);
}
beginShape();
for(PVector p : pt){
vertex(p.x, p.y);
}
endShape();
popMatrix();
}
void mousePressed(){
if(mouseButton == LEFT){
pt.add(new PVector(mouseX, mouseY));
}
}
第十步 用滑鼠換顏色(左中右)
void setup(){
size(400,400,P3D);
}
void draw(){
background(255);
if(mousePressed && mouseButton == LEFT) background(255,0,0);//紅
if(mousePressed && mouseButton == CENTER) background(0,255,0);//綠
if(mousePressed && mouseButton == RIGHT) background(0,0,255);//藍
}
更新(下面會有字出現)
.........
void mousePressed(){
if(mouseButton == LEFT) println("LEFT");
if(mouseButton == CENTER) println("CENTER");
if(mouseButton == RIGHT) println("RIGHT");
}
第十一步
ArrayList<PVector>pt;
void setup(){
size(400,400,P3D);
pt = new ArrayList<PVector>();
for(int i = 0; i<20; i++){
pt.add(new PVector(i*20, 20));
}//假設畫面中,點好了20個頂點
}
void draw(){
background(255);
for(PVector p:pt){//畫出20個頂點
ellipse(p.x,p.y,10,10);
}
if(ans!=null) ellipse(ans.x, ans.y, 15, 15);
}
PVector ans = null;
void mousePressed(){
for(PVector p:pt){
if(dist(p.x, p.y, mouseX, mouseY)<5){
ans=p;
}
}
}
第十二步 按中鍵會有雙圈圈並可以移動左鍵可增加頂點
ArrayList<PVector>pt;
void setup(){
size(400,400,P3D);
pt = new ArrayList<PVector>();
for(int i = 0; i<37; i++){
pt.add(new PVector(random(400), random(400)) );
}//假設畫面中,隨機點好了37個頂點
}
void draw(){
background(255);
for(PVector p:pt){//畫出全部頂點
ellipse(p.x,p.y,10,10);
}
if(ans!=null) ellipse(ans.x, ans.y, 15, 15);
}
PVector ans = null;
void mouseDragged(){//mouseDragged
if(mouseButton==CENTER && ans!=null){
ans.x = mouseX;
ans.y = mouseY;
}
}
void mousePressed(){//mousePressed
if(mouseButton==LEFT) pt.add(new PVector(mouseX, mouseY));
else if(mouseButton==CENTER){
for(PVector p:pt){
if(dist(p.x, p.y, mouseX, mouseY)<5){
ans=p;
}
}
}
}
第十三步 最後
............
void mousePressed(){
if(mouseButton==LEFT) pt.add(new PVector(mouseX, mouseY));
else if(mouseButton==CENTER){
for(PVector p:pt){
if(dist(p.x, p.y, mouseX, mouseY)<5){
ans=p;
}
}
}
else if(mouseButton == RIGHT){//右鍵,要刪掉 用傳統for迴圈
for(int i=0; i<pt.size(); i++){//要寫兩行才等於厲害的1行
PVector p = pt.get(i);
if(dist(p.x, p.y, mouseX, mouseY)<5){//找到夠近的點
pt.remove(i);//把第i個點刪掉,會把大資料結構右邊的都左移一格
}
}
}















沒有留言:
張貼留言