2025年4月10日 星期四

12750113-week08

 week08-1_loadShape_shape

// week08_1_loadShape_shape
size(400,400,P3D); // Step03: 要有 P3D 的 OpenGL 3D 功能
PShape gundam = loadShape("Gundam.obj"); // Step01: 讀入 3D 模型
translate(width/2, height/2);
pushMatrix(); // 備份矩陣
  translate(0,100); // Step05: 再往下一點點,比較好看
  scale(10,-10,10); // Step04: 把模型放大 shape(10) 上下要再倒過來
  shape(gundam,0,0); // Step02: 畫出 3D 模型
popMatrix(); // 還原矩陣

用老師給的模型做出一個鋼彈
Step01 就是把模型拉到程式


week08-2_PShape_gundam_setup_draw_push_scale_shape_pop
// week08_2_PShape_gundam_setup_draw_push_scale_shape_pop
// 轉動它,要改成互動模式的程式風格
PShape gundam; // 要再把 Gundam.obj 等檔案,拉進來
void setup(){
  size(400,400,P3D);
  gundam = loadShape("Gundam.obj");
}
void draw(){
  background(128);
  translate(width/2, height/2+100);
  pushMatrix();
    scale(10,-10,10);
    rotateY(radians(frameCount));
    shape(gundam,0,0);
  popMatrix();
  pushMatrix();
    translate(100,0,0);
    scale(10,-10,10);
    shape(gundam,0,0);
  popMatrix();
}
做兩個鋼彈
一個會旋轉一個不會旋轉

week08-3_another_obj_large_bad_mtl
// week08_3_another_obj_large_bad_mtl
PShape gundam; // 要再把 Gundam.obj 等檔案,拉進來
void setup(){
  size(400,400,P3D);
  gundam = loadShape("FinalBaseMesh.obj");
}
void draw(){
  background(128);
  translate(width/2, height/2+100);
  pushMatrix();
    scale(10,-10,10);
    rotateY(radians(frameCount));
    shape(gundam,0,0);
  popMatrix();
}
匯入一個obj模型,再造假一個mtl檔案


用與week08-2同一個程式做出一個會轉的人體模型


week08_4_gunda_bodym_head
// week08_4_
// 慢慢把「切割開」的模型,逐一組合起來
size(400,400,P3D);
translate(width/2, height/2+100);
// 身體的4個檔案body.obj、body.mtl、AO.jpg、Diffuse.jpg
PShape body = loadShape("body.obj");
scale(10,-10,10);
shape(body,0,0);
將老師傳的檔案
匯入body.obj、body.mtl、AO.jpg、Diffuse.jpg
先做身體


// week08_4_
// 慢慢把「切割開」的模型,逐一組合起來
// 身體的4個檔案body.obj、body.mtl、AO.jpg、Diffuse.jpg
PShape body, head;
// 頭的2個檔案 head.obj、head.mtl
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(10); // 基準點
  scale(10,-10,10);
  pushMatrix();
    translate(x/10,y/10); // 要放在小x,y的座標
    shape(head,0,0);
  popMatrix();
    shape(body,0,0);
    
}
float x = 0, y = 0;
void mouseDragged(){
  x += mouseX - pmouseX;
  y -= mouseY - pmouseY;
}

一開始
讓頭可以跟著滑鼠移動


// week08_4_gunda_bodym_head
// 慢慢把「切割開」的模型,逐一組合起來
// 身體的4個檔案body.obj、body.mtl、AO.jpg、Diffuse.jpg
PShape body, head;
// 頭的2個檔案 head.obj、head.mtl
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(10); // 基準點
  scale(10,-10,10);
  pushMatrix();
    translate(0,+22.5); // Step03: 再掛回原來的地方
    rotate(radians(-x)); // Step02: 轉動
    //translate(x/10,y/10); // 要放在小x,y的座標
    //println(x/10,y/10); // 印出座標,等下要取代上面的數值
    translate(0.0,-22.5); // Step01: 我們的頭的中心,有放在旋轉中心
    shape(head,0,0);
  popMatrix();
  shape(body,0,0);
    
}
float x = 0, y = 0;
void mouseDragged(){
  x += mouseX - pmouseX;
  y -= mouseY - pmouseY;
}

一開始
可以跟著滑鼠做x座標的轉動





















沒有留言:

張貼留言