。組裝鋼彈模型
1.上周的程式碼
//week09_01_gundam_head
PShape body, head;
void setup() {
size(400, 400, P3D);
body = loadShape("body.obj");
head = loadShape("head.obj");
}
void draw() {
background(255);
translate(width/2, height/2+100);
sphere(5);//原點點
scale(10, -10, 10);
shape(head, 0, 0);
shape(body, 0, 0);
}
加上T-R-T
//week09_02_gundam_head_puh_TRT_pop
PShape body, head;
void setup() {
size(400, 400, P3D);
body = loadShape("body.obj");
head = loadShape("head.obj");
}
void draw() {
background(255);
translate(width/2, height/2+100);
sphere(5);//原點點
scale(10, -10, 10);
shape(body, 0, 0);
pushMatrix();
translate(0, 22.5);
rotateY(radians(mouseX-200));
rotateX(radians(mouseY-50));
translate(0, -22.5);
shape(head, 0, 0);
popMatrix();
}
float x=0, y=0;
void mouseDragged() {
x+= mouseX - pmouseX;
y+= mouseY - pmouseY;
print(x/10,y/10);
}執行結果:
2.組裝上臂//week09_03_gundam_uparm_upuparm
PShape uparm1,upuparm1;
void setup() {
size(400, 400, P3D);
uparm1 = loadShape("uparm1.obj");
upuparm1 = loadShape("upuparm1.obj");
}
void draw() {
background(255);
translate(width/2, height/2+100);
sphere(5);//原點點
scale(10, -10, 10);
shape(upuparm1, 0, 0);//上上臂
pushMatrix();
translate(-4.1,19.9);
rotateX(radians(mouseY-100));
translate(4.1,-19.9);
//translate(mouseX/10.0, -mouseY/10.0);//移動,尋找適合的座標
//println(mouseX/10.0, -mouseY/10.0);//印出座標
shape(uparm1, 0, 0);//上臂
popMatrix();
}執行結果:
3.組裝上臂+手//week09_04_gundam_uparm_upuparm_hand
PShape uparm1,upuparm1,hand1;
void setup() {
size(400, 400, P3D);
uparm1 = loadShape("uparm1.obj");
upuparm1 = loadShape("upuparm1.obj");
hand1 = loadShape("hand1.obj");
}
void draw() {
background(255);
translate(width/2, height/2+100);
sphere(5);//原點點
scale(10, -10, 10);
shape(upuparm1, 0, 0);//上上臂
pushMatrix();
translate(-4.1,19.9);
//rotateX(radians(mouseY-100));
translate(4.1,-19.9);
//translate(mouseX/10.0, -mouseY/10.0);//移動,尋找適合的座標
//println(mouseX/10.0, -mouseY/10.0);//印出座標
shape(uparm1, 0, 0);//上臂
pushMatrix();
translate(-4.5,17.5);
rotateX(radians(mouseY-100));
translate(4.5,-17.5);
//translate(mouseX/10.0, -mouseY/10.0);//移動,尋找適合的座標
//println(mouseX/10.0, -mouseY/10.0);//印出座標
shape(hand1, 0, 0);//手
popMatrix();
popMatrix();
}
執行結果:
。關節&鍵盤滑鼠事件4.利用鍵盤事件切換要旋轉的關節+滑鼠拖曳X軸旋轉角度//week09_05_gundam_uparm_upuparm_hand_keyboard_mouse_angle
PShape uparm1,upuparm1,hand1;
void setup() {
size(400, 400, P3D);
uparm1 = loadShape("uparm1.obj");
upuparm1 = loadShape("upuparm1.obj");
hand1 = loadShape("hand1.obj");
}
float []angle = new float[20];//20個關節角度
int ID = 0; //用來指定關節的代碼,angle[ID]的資料會儲存旋轉的角度
void keyPressed(){
if(key=='1') ID = 1; //按下鍵盤1指定到第一個關節(肩膀)
if(key=='2') ID = 2; //按下鍵盤2指定到第二個關節(手肘)
}
void mouseDragged(){
angle[ID] += mouseX - pmouseX;//X軸的移動 改變關節角度
}
void draw() {
background(255);
translate(width/2, height/2+100);
sphere(5);//原點
scale(10, -10, 10);
shape(upuparm1, 0, 0);//上上臂
pushMatrix();
translate(-4.1,19.9);
rotateZ(radians(angle[1]));
translate(4.1,-19.9);
//translate(mouseX/10.0, -mouseY/10.0);//移動,尋找適合的座標
//println(mouseX/10.0, -mouseY/10.0);//印出座標
shape(uparm1, 0, 0);//上臂
pushMatrix();
translate(-4.5,17.5);
rotateX(radians(angle[2]));
translate(4.5,-17.5);
//translate(mouseX/10.0, -mouseY/10.0);//移動,尋找適合的座標
//println(mouseX/10.0, -mouseY/10.0);//印出座標
shape(hand1, 0, 0);//手
popMatrix();
popMatrix();
}
執行結果:
。存檔&讀檔5.把移動,旋轉的紀錄存檔後再讀取,做成動畫//week09_06_saveStings_loadStrings
void setup(){
size(300,300);
rect(10,10,80,80);
rect(110,110,80,80);
save("file.png");
another = loadStrings("lines.txt");//如果沒有檔案會指定為空指標
}
int x = 10, y=10, ID=0;
void draw(){
background(204);
if(another != null){
int [] now = int(split(another[ID],' '));//整數陣列,將another(字串陣列)裡的資料轉換、分割
rect(now[0],now[1],80,80);//now是現在從another陣列裡讀進的座標
ID=(ID+1) % another.length; //指定為陣列中的第ID筆資料
//draw函式本身以每秒60次的速度運行,ID會自動每幀+1
}
rect(x,y,80,80);
}
void mouseDragged(){
x += mouseX - pmouseX;
y += mouseY - pmouseY;
//String now = x + " " + y;//儲存現在座標的字串
lines.add(x + " " + y); //println(now);//在陣列裡新增字串
}
ArrayList<String> lines = new ArrayList<String>();//JAVA的list陣列
String[] another; //讀進來的字串
void keyPressed(){
String[] arr = new String[lines.size()];//宣告字串,大小為陣列line的大小
lines.toArray(arr);//把陣列轉換儲存為字串
if(key=='s') saveStrings("lines.txt", arr);//按下鍵盤s鍵儲存為"lines.txt"
}
save("檔名")可以儲存視窗畫面為圖檔
saveStrings("檔名", 字串)將字串儲存為文字檔
loadStrings("檔名");在速寫本中讀進檔案
執行結果:
讀進資料的部分:




沒有留言:
張貼留言