2023年10月12日 星期四

LAD Week05

 3D圖形

使用P3D可使用3D功能,可和OpenGL連動

放大縮小旋轉


放大、填面、選轉軸設定

void setup(){
    size(400,400,P3D);//3D功能  
}
void draw(){
  background(#FFFFF2);
  pushMatrix();//備份矩陣
    translate(mouseX,mouseY);//移動
    rotateY(radians(mouseX));//對Y軸轉動
    fill(0,255,0);//面填綠色
    box(100);//3D方塊
    
    noFill();//不填充(透視)
    scale(2);//放大兩倍
    box(100);
   popMatrix();//還原矩陣
}

點線面色彩



少了封閉線,未連接

ensShape()+CLOSE

摺紙


ArrayList<PVector> pt;//大資料結構ArrayList
void setup(){
  size(400,400,P3D);
  pt=new ArrayList<PVector>();
}//初始化,把大的資料結構準備好(裡面放小資料結構)
void draw(){
  background(#FFFFF2);
  for(PVector p:pt){//特殊for迴圈,得小資料結構
    ellipse(p.x,p.y,10,10); 
  }
}
void mousePressed(){
   pt.add( new PVector(mouseX,mouseY));
}//大資料結構內加入小的PVector物件

連接

連接完成後轉動



選點

拖曳改位置

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))); 
  }
}
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;   
      }
    }
  }
}
可以刪除點


沒有留言:

張貼留言