2016年12月29日 星期四

week16_20161229教學軟體設計_豐佳燕筆記


Voxxlr
http://www.voxxlr.com/


掃描









3D laser scanner

過去的laser



We finish scanning the David




用wii的手把做紅外線追蹤



用wii做低成本的電子白板






寫一個程式寫3D模型變成樂高的模式




加入「旋轉」指令







week16~曉瑀上課筆記




161229 week16

http://www.voxxlr.com/













int xRes,yRes,zRes, bunny[][][], inside[][][], millis0;
float angleX=0, angleY=0, myScale=1;
void setup(){
  size(600,400,P3D);
  byte b[]=loadBytes("bunny40.mira");//("bunny80.mira");
  xRes=((b[8] &0x00FF)<<8)+(b[9] &0x00FF);
  yRes=((b[10]&0x00FF)<<8)+(b[11]&0x00FF);
  zRes=((b[12]&0x00FF)<<8)+(b[13]&0x00FF);
  myScale=0.3*width/float(xRes);
  bunny=new int[xRes][yRes][zRes]; inside=new int[xRes][yRes][zRes];
  for(int i=0;i<xRes*yRes*zRes;i++){
    int x=int(i/(yRes*zRes)), y=int(i/zRes)%yRes, z=i%zRes;
    bunny[x][y][z]=b[256+(xRes+yRes+zRes)*8+i];
  }
  for(int i=1;i<xRes-1;i++)
    for(int j=1;j<yRes-1;j++)
      for(int k=1;k<zRes-1;k++)
        if(bunny[i-1][j][k]!=0 && bunny[i+1][j][k]!=0 && bunny[i][j-1][k]!=0 && bunny[i][j+1][k]!=0
            && bunny[i][j][k-1]!=0 && bunny[i][j][k+1]!=0) inside[i][j][k]=1;
}
void draw(){
  println("fps: "+frameRate);
  background(128); noStroke();
  pointLight(128,255,128, width, height, height);
  directionalLight(30,30,30, 0,0,-1);
  directionalLight(40,40,40, 0,1,-1);
  translate(width/2,height/2,0);
  rotateX(-angleY);
  rotateY(angleX);
  rotateX(PI/2);
  scale(myScale);
  translate(-xRes,-yRes,-zRes);
  for(int i=0;i<xRes;i++){
    for(int j=0;j<yRes;j++){
      for(int k=0;k<zRes;k++){
        if(bunny[i][j][k]!=0 && inside[i][j][k]==0){
          pushMatrix();
          translate(2*i,2*j,2*k);
          box(2);
          popMatrix();
        }
      }
    }
  }
}
void mouseDragged(){
  angleX+=0.01*(mouseX-pmouseX);
  angleY+=0.01*(mouseY-pmouseY);
}













記得將三個檔案都丟進程式碼中












根據滑鼠位置移動模型

PShape bunny;

void setup(){
  size(400,400,P3D);
  bunny= loadShape("rocket.obj");
}
void draw(){
  background(255,0,0);
  lights();
  translate(width/2, height/2);
  rotateY( radians(mouseY));
  rotateX( radians(mouseX));
  shape(bunny,0,0);
}



week 16 教學軟體筆記 呂郁欣



week 16 教學軟體筆記 呂郁欣

1.VR 噴漆





















Capturing Dynamic Textured Surfaces of Moving Targets










































2.Project Tango Test in my Room
























3.kinectfusion  名字叫做「KinectFusion」,顧名思義,就是用 Kinect(之前的介紹)來對拍攝到的現實場景做處理、並和虛擬物體作融合(Fusion)

    這個程式會去把目前抓到的深度資訊,重新建立出 3D 的模型出來;而當 Kinect 移動的時候,他則會連續性地追蹤 Kinect 的位置變化(6DOF、而且是不需要特徵點的方法)、並將新的資料結合到目前的模型裡;這些動作,都是使用 GPGPU 的技術、即時做到的。






































TOF :TIME OF Flight 飛行時間












4.scanning the David

Q: 那戶外大型建築怎麼掃描?
A: 義大利有許多大型的雕像,可能5-10公尺高, "數位米開朗基羅計畫" 由跨國的團隊,把大型的雕像掃描起來。























5.
int xRes,yRes,zRes, bunny[][][], inside[][][], millis0;
float angleX=0, angleY=0, myScale=1;
void setup(){
  size(600,400,P3D);
  byte b[]=loadBytes("bunny40.mira");//("bunny80.mira");
  xRes=((b[8] &0x00FF)<<8)+(b[9] &0x00FF);
  yRes=((b[10]&0x00FF)<<8)+(b[11]&0x00FF);
  zRes=((b[12]&0x00FF)<<8)+(b[13]&0x00FF);
  myScale=0.3*width/float(xRes);
  bunny=new int[xRes][yRes][zRes]; inside=new int[xRes][yRes][zRes];
  for(int i=0;i<xRes*yRes*zRes;i++){
    int x=int(i/(yRes*zRes)), y=int(i/zRes)%yRes, z=i%zRes;
    bunny[x][y][z]=b[256+(xRes+yRes+zRes)*8+i];
  }
  for(int i=1;i<xRes-1;i++)
    for(int j=1;j<yRes-1;j++)
      for(int k=1;k<zRes-1;k++)
        if(bunny[i-1][j][k]!=0 && bunny[i+1][j][k]!=0 && bunny[i][j-1][k]!=0 && bunny[i][j+1][k]!=0
            && bunny[i][j][k-1]!=0 && bunny[i][j][k+1]!=0) inside[i][j][k]=1;
}
void draw(){
  println("fps: "+frameRate);
  background(128); noStroke();
  pointLight(128,255,128, width, height, height);
  directionalLight(30,30,30, 0,0,-1);
  directionalLight(40,40,40, 0,1,-1);
  translate(width/2,height/2,0);
  rotateX(-angleY);
  rotateY(angleX);
  rotateX(PI/2);
  scale(myScale);
  translate(-xRes,-yRes,-zRes);
  for(int i=0;i<xRes;i++){
    for(int j=0;j<yRes;j++){
      for(int k=0;k<zRes;k++){
        if(bunny[i][j][k]!=0 && inside[i][j][k]==0){
          pushMatrix();
          translate(2*i,2*j,2*k);
          box(2);
          popMatrix();
        }
      }
    }
  }
}
void mouseDragged(){
  angleX+=0.01*(mouseX-pmouseX);
  angleY+=0.01*(mouseY-pmouseY);
}

許君平 1229 上課筆記

2016/12/29

1.3D掃描
*Voxxlr
http://www.voxxlr.com/

















*Project Tango Test in my Room
https://www.youtube.com/watch?v=PMou8eIRzMk





*kinectfusion

https://www.youtube.com/watch?v=quGhaggn3cQ




*深度攝影機ToF Camera Noise of Kinect for Windows Ver.2.0

https://www.youtube.com/watch?v=CKuAqnwEjgM



*Q: 那戶外大型建築怎麼掃描?
A: 義大利有許多大型的雕像,可能5-10公尺高, "數位米開朗基羅計畫" 由跨國的團隊,把大型的雕像掃描起來。
https://graphics.stanford.edu/projects/mich/more-david/more-david.html



2.processing實作
*binvox
http://www.patrickmin.com/binvox/




int xRes,yRes,zRes, bunny[][][], inside[][][], millis0;
float angleX=0, angleY=0, myScale=1;
void setup(){
  size(600,400,P3D);
  byte b[]=loadBytes("bunny40.mira");//("bunny80.mira");
  xRes=((b[8] &0x00FF)<<8)+(b[9] &0x00FF);
  yRes=((b[10]&0x00FF)<<8)+(b[11]&0x00FF);
  zRes=((b[12]&0x00FF)<<8)+(b[13]&0x00FF);
  myScale=0.3*width/float(xRes);
  bunny=new int[xRes][yRes][zRes]; inside=new int[xRes][yRes][zRes];
  for(int i=0;i<xRes*yRes*zRes;i++){
    int x=int(i/(yRes*zRes)), y=int(i/zRes)%yRes, z=i%zRes;
    bunny[x][y][z]=b[256+(xRes+yRes+zRes)*8+i];
  }
  for(int i=1;i<xRes-1;i++)
    for(int j=1;j<yRes-1;j++)
      for(int k=1;k<zRes-1;k++)
        if(bunny[i-1][j][k]!=0 && bunny[i+1][j][k]!=0 && bunny[i][j-1][k]!=0 && bunny[i][j+1][k]!=0
            && bunny[i][j][k-1]!=0 && bunny[i][j][k+1]!=0) inside[i][j][k]=1;
}
void draw(){
  println("fps: "+frameRate);
  background(128); noStroke();
  pointLight(128,255,128, width, height, height);
  directionalLight(30,30,30, 0,0,-1);
  directionalLight(40,40,40, 0,1,-1); 
  translate(width/2,height/2,0);
  rotateX(-angleY);
  rotateY(angleX);
  rotateX(PI/2);
  scale(myScale);
  translate(-xRes,-yRes,-zRes);
  for(int i=0;i<xRes;i++){
    for(int j=0;j<yRes;j++){
      for(int k=0;k<zRes;k++){
        if(bunny[i][j][k]!=0 && inside[i][j][k]==0){
          pushMatrix();
          translate(2*i,2*j,2*k);
          box(2);
          popMatrix();
        }
      }
    }
  }
}
void mouseDragged(){
  angleX+=0.01*(mouseX-pmouseX);
  angleY+=0.01*(mouseY-pmouseY);
}

*火箭範例



*實作1



*實作2-加旋轉、打光


*可以隨著滑鼠旋轉





PShape bunny;

void setup(){
  size(400,400,P3D);
  bunny = loadShape("rocket.obj");
}
void draw(){
  background(255,0,0);
  lights();
  translate(width/2,height/2);
  rotateX(radians(mouseY));
  rotateY(radians(mouseX));
  shape(bunny,0,0);
}




60508013E_林子婷,Week16

105/12/29

1.Voxxlr
用平板掃描,可掃描大物件,製作3D影像
http://www.voxxlr.com/



2.KinectFusion


3. Time-of-Flight Camera
利用紅外線反射掃描,以每一個像素掃描
4.點線面掃描
(點)
利用機械手臂掃描
優點:較精準
缺點:較耗時、沒效率
(線)雷射光掃描
利用雷射光掃描曲線再組合
缺點:需要掃描很多面


(面)轉物體360度掃描


5.binvox/viewvox
把3D兔子變成樂高積木

int xRes,yRes,zRes, bunny[][][], inside[][][], millis0;
float angleX=0, angleY=0, myScale=1;
void setup(){
  size(600,400,P3D);
  byte b[]=loadBytes("bunny40.mira");//("bunny80.mira");
  xRes=((b[8] &0x00FF)<<8)+(b[9] &0x00FF);
  yRes=((b[10]&0x00FF)<<8)+(b[11]&0x00FF);
  zRes=((b[12]&0x00FF)<<8)+(b[13]&0x00FF);
  myScale=0.3*width/float(xRes);
  bunny=new int[xRes][yRes][zRes]; inside=new int[xRes][yRes][zRes];
  for(int i=0;i<xRes*yRes*zRes;i++){
    int x=int(i/(yRes*zRes)), y=int(i/zRes)%yRes, z=i%zRes;
    bunny[x][y][z]=b[256+(xRes+yRes+zRes)*8+i];
  }
  for(int i=1;i<xRes-1;i++)
    for(int j=1;j<yRes-1;j++)
      for(int k=1;k<zRes-1;k++)
        if(bunny[i-1][j][k]!=0 && bunny[i+1][j][k]!=0 && bunny[i][j-1][k]!=0 && bunny[i][j+1][k]!=0
            && bunny[i][j][k-1]!=0 && bunny[i][j][k+1]!=0) inside[i][j][k]=1;
}
void draw(){
  println("fps: "+frameRate);
  background(128); noStroke();
  pointLight(128,255,128, width, height, height);
  directionalLight(30,30,30, 0,0,-1);
  directionalLight(40,40,40, 0,1,-1); 
  translate(width/2,height/2,0);
  rotateX(-angleY);
  rotateY(angleX);
  rotateX(PI/2);
  scale(myScale);
  translate(-xRes,-yRes,-zRes);
  for(int i=0;i<xRes;i++){
    for(int j=0;j<yRes;j++){
      for(int k=0;k<zRes;k++){
        if(bunny[i][j][k]!=0 && inside[i][j][k]==0){
          pushMatrix();
          translate(2*i,2*j,2*k);
          box(2);
          popMatrix();
        }
      }
    }
  }
}
void mouseDragged(){
  angleX+=0.01*(mouseX-pmouseX);
  angleY+=0.01*(mouseY-pmouseY);
}


在程式碼內按Ctrl+K開啟火箭檔案資料夾
將三個檔案都拉進視窗



火箭


可根據滑鼠移動火箭方向

PShape bunny;

void setup(){
  size(400,400,P3D);
  bunny = loadShape("rocket.obj");
}
void draw(){
background(255,0,0);
lights();
translate(width/2,height/2);
rotateX(radians(mouseY));
rotateY(radians(mouseX));
shape(bunny,0,0);

}