先畫一個3D的盒子(方塊)。
程式碼:
void setup()
{
size(400, 400, P3D); //Processing的3D功能
}
void draw()
{
background(#B7E3FF);
pushMatrix(); //備份矩陣
translate(mouseX, mouseY);
box(100); //3D的盒子或方塊
popMatrix(); //還原矩陣
}
-------------------------------------------------------------------------------加上對Y軸旋轉。
程式碼:
void setup()
{
size(400, 400, P3D); //Processing的3D功能
}
void draw()
{
background(#B7E3FF);
pushMatrix(); //備份矩陣
translate(mouseX, mouseY);
rotateY(radians(mouseX)); //對Y軸轉
box(100); //3D的盒子或方塊
popMatrix(); //還原矩陣}
-------------------------------------------------------------------------------讓外面再套一個沒有填顏色的盒子。
程式碼:
void setup()
{
size(400, 400, P3D); //Processing的3D功能
}
void draw()
{
background(#B7E3FF);
pushMatrix(); //備份矩陣
translate(mouseX, mouseY);
rotateY(radians(mouseX)); //對Y軸轉
fill(0, 50, 50); //盒子的面填色
box(100); //3D的盒子或方塊
noFill(); //面不填色
scale(2); //放大2倍
box(100); // 盒子大小100,但上面還有放大2倍,所以是200
popMatrix(); //還原矩陣
}
-------------------------------------------------------------------------------利用頂點畫出一個三角形並且上色。
程式碼:
size(410, 410, P3D);
beginShape();
fill(0, 150, 50); vertex(200, 0);
fill(50, 0, 150); vertex(0, 400);
fill(150, 50, 0); vertex(400, 400);
endShape();
-------------------------------------------------------------------------------可是當我們把顏色去掉之後,會發現右邊的線並沒有畫上去。
程式碼:
size(410, 410, P3D);
noFill();
beginShape();
vertex(200, 0);
vertex(0, 400);
vertex(400, 400);
endShape();
-------------------------------------------------------------------------------如果補上close函式後,就可以把線完整的畫出來了。
程式碼:
size(410, 410, 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(#B7E3FF);
for(PVector p : pt)
{
ellipse(p.x, p.y, 10, 10);
}
}
void mousePressed()
{
pt.add(new PVector(mouseX, mouseY));
} //大的資料結構裡,加入小的PVector的物件。-------------------------------------------------------------------------------再來是讓我們點出第二個點開始會有線和面出現。程式碼:ArrayList<PVector> pt; //大的資料結構ArrayList void setup() { size(400, 400, P3D); pt = new ArrayList<PVector>(); } //初始化,把大的資料結構準備好(裡面放小的資料結構) void draw() { background(#B7E3FF); for(PVector p : pt) //特殊的for迴圈,得到小的資料結構 { ellipse(p.x, p.y, 10, 10); } beginShape(); for(PVector p : pt) //特殊的for迴圈,得到小的資料結構 { vertex(p.x, p.y); } endShape(); } void mousePressed() { pt.add(new PVector(mouseX, mouseY)); } //大的資料結構裡,加入小的PVector的物件。-------------------------------------------------------------------------------加上右鍵3D旋轉。程式碼:ArrayList<PVector> pt; //大的資料結構ArrayList void setup() { size(400, 400, P3D); pt = new ArrayList<PVector>(); } //初始化,把大的資料結構準備好(裡面放小的資料結構) void draw() { background(#B7E3FF); pushMatrix(); if(mousePressed && mouseButton==RIGHT) { translate(200, 200); rotateY(radians(frameCount)); translate(-200, -200); } for(PVector p : pt) //特殊的for迴圈,得到小的資料結構 { ellipse(p.x, p.y, 10, 10); } beginShape(); for(PVector p : pt) //特殊的for迴圈,得到小的資料結構 { vertex(p.x, p.y); } endShape(); popMatrix(); } void mousePressed() { if(mouseButton==LEFT) { pt.add(new PVector(mouseX, mouseY)); } } //大的資料結構裡,加入小的PVector的物件。-------------------------------------------------------------------------------利用滑鼠的左右鍵和中鍵,讓我們按下的時候畫面會變顏色。
程式碼: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); }-------------------------------------------------------------------------------畫20個點,感測我們點了哪個點,然後再用更大的圓圈起來。程式碼: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() { if(mouseButton==CENTER && ans!=null) { ans.x = mouseX; ans.y = mouseY; } } 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; } } } }-------------------------------------------------------------------------------最後加上可以刪除點的程式碼。因為從頭開始刪會要後面的的全部移動,很浪費時間。所以程式碼是從後面開始 (i-1)。程式碼: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))); } //假設畫面中,點好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 mouseDragged() { if(mouseButton==CENTER && ans!=null) { ans.x = mouseX; ans.y = mouseY; } } 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(int i=0; i<pt.size(); i++) { PVector p = pt.get(i); if(dist(p.x, p.y, mouseX, mouseY) < 5) { pt.remove(i); } } } }






沒有留言:
張貼留言