2025年4月10日 星期四

電腦圖學week08

 //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(); // 還原矩陣

//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
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();
}

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


沒有留言:

張貼留言