2025年4月10日 星期四

12750530李忻穎_week08

作業1:畫出鋼彈模型
  • 程式碼:
//week08_1_loadShape_shape
size(400,400,P3D);  //(3) 要有P3D的OpenGL 3D 功能
PShape gundam = loadShape("Gundam.obj");  //(1) 讀入3D模型
translate(width/2, height/2);  //放到畫面中心
pushMatrix();  //備份矩陣
  translate(0,100);  //(5)再往下移一點點
  scale(10,-10,10);  //(4)把模型放大 shape(10) 上下要再倒過來
  shape(gundam,0,0);  //(2)畫出3D模型
popMatrix();  //還原矩陣
  • 執行結果:


作業2:改成互動模式的程式風格
  • 程式碼
//week08_2_PShape_gundam_setup_draw_push_scale_shape_pop
//改成互動模式的程式風格
PShape gundam;
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();
}
  • 執行結果:

















作業3:
  • 程式碼:
//week08_3_another_obj_large
PShape gundam;  //要再把 Gundam.obj等檔案拉進來
void setup(){
  size(400,400,P3D);
  gundam = loadShape("FinalBaseMesh.obj");
}
void draw(){
  background(128);
  lights();
  translate(width/2,height/2+100);
  pushMatrix();
    scale(10,-10,10);
    rotateY(radians(frameCount));
    shape(gundam,0,0);
  popMatrix();
}
  • 執行結果:

作業4:
  • 程式碼:
//week08_4_gundam_body_head
//慢慢把「切割開」的模式,逐一組合起來
//把四個檔案拉進來AO.jpg body.mtl body.obj Diffuse.jpg
PShape body,head;
//頭的兩個檔案 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);  //(3)再掛回原來的地方
    rotate(radians(x));  //(2)轉動
    //translate(x/10,y/10);  //要放在小x,y的座標
    //println(x/10,y/10)//印出座標, 等一下要取上面的數
    translate(0, -22.5);
    shape(head, 0, 0);
  popMatrix();
  shape(body,0,0);
}
float x=0, y=0;
void mouseDragged(){
  x += mouseX -pmouseX;
  y -= mouseY -pmouseY;
}

  • 執行結果:



沒有留言:

張貼留言