![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi91Zi4RCYxvKXPVc3dOvb3GVp0AfQlmCtLMrHqyNNEO-OpUIv-mHDWTqMFcqMN0qv4Ayasf7_c9LLsMQoSJF-cSkUc8xlaaXp0NLJqVS10rUZf3Ahhl0_J1PqS5bpBoNTjdlEJnM-206g/s400/15666068_1211522578944318_1204788415_n.jpg)
360度照片
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDCP5QgVQQmxalsYVoswUsUafN48zN_V23RmOwobQbqYjHlQP77fwQmG3T1l8GE7KcBq4T0Z7m7l3qw23csRY5Iryb73hJ_I3K7nsWfuy5elva-xHCTt778d084BC9aMHSOHps2eBOFXY/s640/15403848_1695563827136449_8355301336073371648_n.jpg)
連線前先安裝軟體
https://theta360.com/uk/support/download/
連Theta的wifi就可以看Theta拍攝的照片
密碼會是Theta的wifi數字
*自製360度照片
下載360度的照片
https://www.facebook.com/photo.php?fbid=1401094823236670&set=gm.1855406564745433&type=3&theater
用小畫家做修改再上傳到FB
https://www.facebook.com/photo.php?fbid=1401097453236407&set=gm.1855406874745402&type=3&theater
Tango
Elementals Home AR Designer
https://www.youtube.com/watch?v=Xa85cGTRR0o
Best Augmented Reality - BikeConfig Project Tango
https://www.youtube.com/watch?v=4g6_VVDclVk
thyssenkrupp – bringing new vision to elevator maintenance with Microsoft HoloLens
https://www.youtube.com/watch?v=8OWhGiyR4Ns
擺家具
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHVjVXDSvAG52iKf4XxlwewzDgsqNpfIPDch6ixaw_zMi5SpGiOjAjb8wiVhf5_dmMShTPlrUth6hfZA8DDfQv2cQ4cfcevHI5ny73ELTifYQWQILa47VA3c4HiVnKwp_BAEQg5Kpk8d8/s640/15658665_1211336062296303_2067439142_o.jpg)
3D石雕模型
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzJ1YxnnPnRh_n1373Ke7jx1f34o0OFLCjItC74sVhQvQiUCKRKj_JzQmZVcRZ2q0y01WviQuYh67JUWAlkEQ7OfyRPG_sLNpFu7iUbWYW19TKCavZMNsThWgkJCH1WIDT0ik3K5QqgeU/s1600/2016-12-22_121220.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTDcHZj4Yu7mBS6oTBypMXi8RIhXmx0AU4MW1yhMg6npD4qbbLAQaMEQjyE6vG5juqhdSNYN06Hlj_X7v93LWJ9APjfj4fG0fy7dYCa5R9KQGIQDtuY2Uch-0fujD5rFZeQAltZs24iwE/s1600/2016-12-22_121244.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFU78wBVfL31YswNsDYaNjbpzoBp0lBPBA_l_pSIVMhVmC5W1sdDoj7tJQNrLSFiNL9qAJYrKqelEPEDtRS5DsWq1fPXpDh_QHv4mkp8OMKrR3EUEWD7f9UHTWKpMVnyKL-3Fh9iT61II/s1600/2016-12-22_121305.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx_Gcuw-mlHAgK3DcNHVn0J3_Dqd-xR43CvwV5XjwrTre-IE-QYDz5iW7djLsfQf-J0AzpWA1tDtdt3-rmr31uandQZGoZD-S2AZWzM1FLBmm5GYnAOB896M53QGUVrw5fZ2XyrsTpXuI/s1600/2016-12-22_121329.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRifN5rMRgh5WPZdO4qqx30n2g_MXQppeFAUiRtveIobkHCCYs1EkF7q1oQ-D-cudGyr9oIUIOGAPQIFZpeB6YmwHSWOMTCZWpnY9_zQbaVAebs-txzQhB-1VUEQ36d5t0vA4O7S5wtLQ/s1600/2016-12-22_121350.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEFnwLxGFHcduNs_IXQGdbvDHq2E0SSqumOFDcDMKQkZbuQ6dchKPS6C4VOwEvedua6o_U4cCW7rBXAMqO4uaYMexvGTCjDsOo9oSc3HoIZROubKtKaxNi9fK3dQhmBR52z9YgteXqV4Q/s1600/2016-12-22_121409.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwhOcQ3GZkttOEU_667iso18ZLlzU9X05KEQouSmREdQXHnUDGm6OXWsO9bIiegcwm_EgOI1oFuq_S0XLBC_w_pBBl5j-ByVoM0Icxf5FFJb-X44Wu-vuYp-wvYapQzPjwcHzlnkW1Hwc/s1600/2016-12-22_121443.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW3EwelBipY3NzeIJPmUJdqNCX9Ndlq6-huXQWFBgajNOPFIqjjOcclW9uA0efD3zZ0x1KCUG3z6UAcV5EqrqfP3HaHzUBxqkFz8yDYFNy9eXuKXaCA8MuS0oa4CDeAtigyb312wQZw-Y/s1600/2016-12-22_121500.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSMJ6FZor6xJXdO9IQejKi16ctEhyQROTRa6idzEcPPbDFiQYm3GuztuQ_uLft7JTFOGWZMBjnuxc_aFWqppuSos4s_EEpHXqK4jNAT41PFsSjLTkSI2lj6oUlFTnn9nADakW_fHiPAGU/s1600/2016-12-22_121515.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw5yrkmMFCr_T97obtsHjvpxIXrwx5FYtsNIIraiCVo41FOG17JAyvDIN6Rc-c-8J6dRfntvMamTJKsJmZa5DPQfOCalU8wDZftrRChsLEV_rHYWTIUVWJiG_lgLXSKYcuv59Y3hWg5B8/s1600/2016-12-22_121139.jpg)
float H=256/10.0, D=256/10.0/3.0*2;
PVector [][] faces;
PImage img;
int faceN=0;//count: 50*N, N is (288-1)*(288-1)*2*3
void setup(){
size(600,600,P3D);
img=loadImage("photo.png");
img.filter(GRAY);
img.loadPixels();
PVector [] depth= new PVector[img.width*img.height];
for(int i=0;i<img.height;i++){
for(int j=0;j<img.width;j++){
depth[i*img.width+j]=new PVector(j-img.width/2, i-img.height/2, H-D+D*blue(img.pixels[i*img.width+j])/256.0);
if(i<10 || j<10 || i>img.height-10 || j>img.width-10) depth[i*img.width+j].z=H;
}
}
faces = new PVector[(img.width-1)*(img.height-1)*2 +10][4];
PVector up=new PVector(0,0,1);
for(int i=0;i<img.height-1;i++){
for(int j=0;j<img.width-1;j++){
faces[faceN][0]=up;
faces[faceN][1]=depth[i*img.width+j];
faces[faceN][3]=depth[(i+1)*img.width+j];
faces[faceN][2]=depth[i*img.width+(j+1)];
faceN++;
faces[faceN][0]=up;
faces[faceN][1]=depth[(i+1)*img.width+j];
faces[faceN][2]=depth[(i+1)*img.width+(j+1)];
faces[faceN][3]=depth[i*img.width+(j+1)];
faceN++;
}
}
square(-img.width/2, -img.height/2, -256/10.0, img.width, 0,0, 0,img.height,0);//back
square(-img.width/2, -img.height/2, -256/10.0, 0,0,H*2, 0,img.height,0);//left
square(-img.width/2, -img.height/2, -256/10.0, 0,0,H*2, img.width,0,0);//top
square(img.width/2, img.height/2, -256/10.0, 0,0,H*2, 0,-img.height,0);//left
square(img.width/2, img.height/2, -256/10.0, 0,0,H*2, -img.width,0,0);//left
//faces = stlLoad("CCE.stl");
stlSave("photo.stl", "SLA by Jeng-Sheng Yeh, 2015-11-05 ", faces);
}
void square(float x, float y, float z, float d1x, float d1y, float d1z, float d2x, float d2y, float d2z){
PVector up = new PVector(0, 0, 1);
faces[faceN][0]=up;
faces[faceN][1]=new PVector(x, y, z);
faces[faceN][2]=new PVector(x+d1x, y+d1y, z+d1z);
faces[faceN][3]=new PVector(x+d2x, y+d2y, z+d2z);
faceN++;
faces[faceN][0]=up;
faces[faceN][1]=new PVector(x+d1x, y+d1y, z+d1z);
faces[faceN][2]=new PVector(x+d1x+d2x, y+d1y+d2y, z+d1z+d2z);
faces[faceN][3]=new PVector(x+d2x, y+d2y, z+d2z);
faceN++;
}
void draw(){
noStroke();
//image(img,0,0);
drawSTL();
}
boolean bStop=false;
float angleStop=0;
PShape shape2=null;
void drawSTL(){
background(255);
lights();
translate(width/2, height/2);
float angle=frameCount*3.1415/180;
if(frameCount%360>90 &&frameCount%360<270) angle=PI-angle;
if(bStop)rotateY(angleStop);
else{ rotateY(angle); angleStop=angle;}
fill(255);
if(shape2==null){
shape2=createShape();
shape2.beginShape(TRIANGLES);
for(int i=0;i<faces.length;i++){
for(int j=1;j<4;j++){
shape2.fill(255, 255-faces[i][j].z*10+128, 255-faces[i][j].z*10);
shape2.vertex(faces[i][j].x, faces[i][j].y, faces[i][j].z);
}
}
shape2.endShape();
}
shape(shape2, 0,0);
}
PVector[][] stlLoad(String filename){
byte b[] = loadBytes(filename);
int faceN=int(b[80]) | int(b[81])<<8 | int(b[82])<<16 | int(b[83])<<24;
println("faceN: "+faceN);
PVector [][] stlfaces=new PVector[faceN][4];
float minX=99999,maxX=-99999, minY=99999,maxY=-99999, minZ=99999,maxZ=-99999;
for(int i=0;i<faceN;i++){
for(int j=0;j<4;j++){
stlfaces[i][j]= stlBytesToPVector(b, 84+i*50+j*12);
if(stlfaces[i][j].x<minX)minX=stlfaces[i][j].x;
if(stlfaces[i][j].x>maxX)maxX=stlfaces[i][j].x;
if(stlfaces[i][j].y<minY)minY=stlfaces[i][j].y;
if(stlfaces[i][j].y>maxY)maxY=stlfaces[i][j].y;
if(stlfaces[i][j].z<minZ)minZ=stlfaces[i][j].z;
if(stlfaces[i][j].z>maxZ)maxZ=stlfaces[i][j].z;
}
}
float centerX=(maxX+minX)/2, centerY=(maxY+minY)/2, centerZ=(maxZ+minZ)/2;
float scale = width/(maxX-minX)/2;
println("x:"+centerX+" y:"+centerY+" z:"+centerZ+" scale:"+scale);
for(int i=0;i<faceN;i++){
for(int j=1;j<4;j++){
stlfaces[i][j].x -=centerX; stlfaces[i][j].x *=scale;
stlfaces[i][j].y -=centerY; stlfaces[i][j].y *=scale;
stlfaces[i][j].z -=centerZ; stlfaces[i][j].z *=scale;
}
}
return stlfaces;
}
float stlBytesToFloat(byte b1, byte b2, byte b3, byte b4){
int asInt = int(b1) | int(b2)*256 |int(b3)*256*256 | int(b4)*256*256*256;
return Float.intBitsToFloat(asInt);
}
PVector stlBytesToPVector(byte []b, int s){
float f1=stlBytesToFloat(b[s+0], b[s+1], b[s+2], b[s+3]);
float f2=stlBytesToFloat(b[s+4], b[s+5], b[s+6], b[s+7]);
float f3=stlBytesToFloat(b[s+8], b[s+9], b[s+10],b[s+11]);
return new PVector(f1,f2,f3);
}
void stlSave(String filename, String header, PVector[][]faces){
int faceN=faces.length;
byte bw[]=new byte[80+4+faceN*50];
stlHeader(bw, header, faceN);
for(int i=0;i<faceN;i++){
for(int j=0;j<4;j++){
stlSetBits(bw, Float.floatToIntBits(faces[i][j].x), 84+i*50+j*12);
stlSetBits(bw, Float.floatToIntBits(faces[i][j].y), 84+i*50+j*12+4);
stlSetBits(bw, Float.floatToIntBits(faces[i][j].z), 84+i*50+j*12+8);
}
}
saveBytes(filename, bw);
}
void stlSetBits(byte[] b, int bits, int i){//private function
b[i]=byte(bits&0xff); b[i+1]=byte((bits>>8)&0xff); b[i+2]=byte((bits>>16)&0xff); b[i+3]=byte((bits>>24)&0xff);
}
void stlHeader(byte[] b, String header, int N){//private function
for(int i=0;i<80;i++){
if(i<header.length())b[i]=byte(header.charAt(i));
else b[i]=byte(' ');
}
b[80]=byte(N&0xff); b[81]=byte((N>>8)&0xff); b[82]=byte((N>>16)&0xff); b[83]=byte((N>>24)&0xff);
}
void keyPressed(){
if(key=='1') save("img1.jpg");
if(key=='2') save("img2.jpg");
if(key=='s') bStop=!bStop;
}
擺家具
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHVjVXDSvAG52iKf4XxlwewzDgsqNpfIPDch6ixaw_zMi5SpGiOjAjb8wiVhf5_dmMShTPlrUth6hfZA8DDfQv2cQ4cfcevHI5ny73ELTifYQWQILa47VA3c4HiVnKwp_BAEQg5Kpk8d8/s640/15658665_1211336062296303_2067439142_o.jpg)
3D石雕模型
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzJ1YxnnPnRh_n1373Ke7jx1f34o0OFLCjItC74sVhQvQiUCKRKj_JzQmZVcRZ2q0y01WviQuYh67JUWAlkEQ7OfyRPG_sLNpFu7iUbWYW19TKCavZMNsThWgkJCH1WIDT0ik3K5QqgeU/s1600/2016-12-22_121220.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTDcHZj4Yu7mBS6oTBypMXi8RIhXmx0AU4MW1yhMg6npD4qbbLAQaMEQjyE6vG5juqhdSNYN06Hlj_X7v93LWJ9APjfj4fG0fy7dYCa5R9KQGIQDtuY2Uch-0fujD5rFZeQAltZs24iwE/s1600/2016-12-22_121244.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFU78wBVfL31YswNsDYaNjbpzoBp0lBPBA_l_pSIVMhVmC5W1sdDoj7tJQNrLSFiNL9qAJYrKqelEPEDtRS5DsWq1fPXpDh_QHv4mkp8OMKrR3EUEWD7f9UHTWKpMVnyKL-3Fh9iT61II/s1600/2016-12-22_121305.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx_Gcuw-mlHAgK3DcNHVn0J3_Dqd-xR43CvwV5XjwrTre-IE-QYDz5iW7djLsfQf-J0AzpWA1tDtdt3-rmr31uandQZGoZD-S2AZWzM1FLBmm5GYnAOB896M53QGUVrw5fZ2XyrsTpXuI/s1600/2016-12-22_121329.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRifN5rMRgh5WPZdO4qqx30n2g_MXQppeFAUiRtveIobkHCCYs1EkF7q1oQ-D-cudGyr9oIUIOGAPQIFZpeB6YmwHSWOMTCZWpnY9_zQbaVAebs-txzQhB-1VUEQ36d5t0vA4O7S5wtLQ/s1600/2016-12-22_121350.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEFnwLxGFHcduNs_IXQGdbvDHq2E0SSqumOFDcDMKQkZbuQ6dchKPS6C4VOwEvedua6o_U4cCW7rBXAMqO4uaYMexvGTCjDsOo9oSc3HoIZROubKtKaxNi9fK3dQhmBR52z9YgteXqV4Q/s1600/2016-12-22_121409.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwhOcQ3GZkttOEU_667iso18ZLlzU9X05KEQouSmREdQXHnUDGm6OXWsO9bIiegcwm_EgOI1oFuq_S0XLBC_w_pBBl5j-ByVoM0Icxf5FFJb-X44Wu-vuYp-wvYapQzPjwcHzlnkW1Hwc/s1600/2016-12-22_121443.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW3EwelBipY3NzeIJPmUJdqNCX9Ndlq6-huXQWFBgajNOPFIqjjOcclW9uA0efD3zZ0x1KCUG3z6UAcV5EqrqfP3HaHzUBxqkFz8yDYFNy9eXuKXaCA8MuS0oa4CDeAtigyb312wQZw-Y/s1600/2016-12-22_121500.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSMJ6FZor6xJXdO9IQejKi16ctEhyQROTRa6idzEcPPbDFiQYm3GuztuQ_uLft7JTFOGWZMBjnuxc_aFWqppuSos4s_EEpHXqK4jNAT41PFsSjLTkSI2lj6oUlFTnn9nADakW_fHiPAGU/s1600/2016-12-22_121515.jpg)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw5yrkmMFCr_T97obtsHjvpxIXrwx5FYtsNIIraiCVo41FOG17JAyvDIN6Rc-c-8J6dRfntvMamTJKsJmZa5DPQfOCalU8wDZftrRChsLEV_rHYWTIUVWJiG_lgLXSKYcuv59Y3hWg5B8/s1600/2016-12-22_121139.jpg)
![]() |
試著成品 |
float H=256/10.0, D=256/10.0/3.0*2;
PVector [][] faces;
PImage img;
int faceN=0;//count: 50*N, N is (288-1)*(288-1)*2*3
void setup(){
size(600,600,P3D);
img=loadImage("photo.png");
img.filter(GRAY);
img.loadPixels();
PVector [] depth= new PVector[img.width*img.height];
for(int i=0;i<img.height;i++){
for(int j=0;j<img.width;j++){
depth[i*img.width+j]=new PVector(j-img.width/2, i-img.height/2, H-D+D*blue(img.pixels[i*img.width+j])/256.0);
if(i<10 || j<10 || i>img.height-10 || j>img.width-10) depth[i*img.width+j].z=H;
}
}
faces = new PVector[(img.width-1)*(img.height-1)*2 +10][4];
PVector up=new PVector(0,0,1);
for(int i=0;i<img.height-1;i++){
for(int j=0;j<img.width-1;j++){
faces[faceN][0]=up;
faces[faceN][1]=depth[i*img.width+j];
faces[faceN][3]=depth[(i+1)*img.width+j];
faces[faceN][2]=depth[i*img.width+(j+1)];
faceN++;
faces[faceN][0]=up;
faces[faceN][1]=depth[(i+1)*img.width+j];
faces[faceN][2]=depth[(i+1)*img.width+(j+1)];
faces[faceN][3]=depth[i*img.width+(j+1)];
faceN++;
}
}
square(-img.width/2, -img.height/2, -256/10.0, img.width, 0,0, 0,img.height,0);//back
square(-img.width/2, -img.height/2, -256/10.0, 0,0,H*2, 0,img.height,0);//left
square(-img.width/2, -img.height/2, -256/10.0, 0,0,H*2, img.width,0,0);//top
square(img.width/2, img.height/2, -256/10.0, 0,0,H*2, 0,-img.height,0);//left
square(img.width/2, img.height/2, -256/10.0, 0,0,H*2, -img.width,0,0);//left
//faces = stlLoad("CCE.stl");
stlSave("photo.stl", "SLA by Jeng-Sheng Yeh, 2015-11-05 ", faces);
}
void square(float x, float y, float z, float d1x, float d1y, float d1z, float d2x, float d2y, float d2z){
PVector up = new PVector(0, 0, 1);
faces[faceN][0]=up;
faces[faceN][1]=new PVector(x, y, z);
faces[faceN][2]=new PVector(x+d1x, y+d1y, z+d1z);
faces[faceN][3]=new PVector(x+d2x, y+d2y, z+d2z);
faceN++;
faces[faceN][0]=up;
faces[faceN][1]=new PVector(x+d1x, y+d1y, z+d1z);
faces[faceN][2]=new PVector(x+d1x+d2x, y+d1y+d2y, z+d1z+d2z);
faces[faceN][3]=new PVector(x+d2x, y+d2y, z+d2z);
faceN++;
}
void draw(){
noStroke();
//image(img,0,0);
drawSTL();
}
boolean bStop=false;
float angleStop=0;
PShape shape2=null;
void drawSTL(){
background(255);
lights();
translate(width/2, height/2);
float angle=frameCount*3.1415/180;
if(frameCount%360>90 &&frameCount%360<270) angle=PI-angle;
if(bStop)rotateY(angleStop);
else{ rotateY(angle); angleStop=angle;}
fill(255);
if(shape2==null){
shape2=createShape();
shape2.beginShape(TRIANGLES);
for(int i=0;i<faces.length;i++){
for(int j=1;j<4;j++){
shape2.fill(255, 255-faces[i][j].z*10+128, 255-faces[i][j].z*10);
shape2.vertex(faces[i][j].x, faces[i][j].y, faces[i][j].z);
}
}
shape2.endShape();
}
shape(shape2, 0,0);
}
PVector[][] stlLoad(String filename){
byte b[] = loadBytes(filename);
int faceN=int(b[80]) | int(b[81])<<8 | int(b[82])<<16 | int(b[83])<<24;
println("faceN: "+faceN);
PVector [][] stlfaces=new PVector[faceN][4];
float minX=99999,maxX=-99999, minY=99999,maxY=-99999, minZ=99999,maxZ=-99999;
for(int i=0;i<faceN;i++){
for(int j=0;j<4;j++){
stlfaces[i][j]= stlBytesToPVector(b, 84+i*50+j*12);
if(stlfaces[i][j].x<minX)minX=stlfaces[i][j].x;
if(stlfaces[i][j].x>maxX)maxX=stlfaces[i][j].x;
if(stlfaces[i][j].y<minY)minY=stlfaces[i][j].y;
if(stlfaces[i][j].y>maxY)maxY=stlfaces[i][j].y;
if(stlfaces[i][j].z<minZ)minZ=stlfaces[i][j].z;
if(stlfaces[i][j].z>maxZ)maxZ=stlfaces[i][j].z;
}
}
float centerX=(maxX+minX)/2, centerY=(maxY+minY)/2, centerZ=(maxZ+minZ)/2;
float scale = width/(maxX-minX)/2;
println("x:"+centerX+" y:"+centerY+" z:"+centerZ+" scale:"+scale);
for(int i=0;i<faceN;i++){
for(int j=1;j<4;j++){
stlfaces[i][j].x -=centerX; stlfaces[i][j].x *=scale;
stlfaces[i][j].y -=centerY; stlfaces[i][j].y *=scale;
stlfaces[i][j].z -=centerZ; stlfaces[i][j].z *=scale;
}
}
return stlfaces;
}
float stlBytesToFloat(byte b1, byte b2, byte b3, byte b4){
int asInt = int(b1) | int(b2)*256 |int(b3)*256*256 | int(b4)*256*256*256;
return Float.intBitsToFloat(asInt);
}
PVector stlBytesToPVector(byte []b, int s){
float f1=stlBytesToFloat(b[s+0], b[s+1], b[s+2], b[s+3]);
float f2=stlBytesToFloat(b[s+4], b[s+5], b[s+6], b[s+7]);
float f3=stlBytesToFloat(b[s+8], b[s+9], b[s+10],b[s+11]);
return new PVector(f1,f2,f3);
}
void stlSave(String filename, String header, PVector[][]faces){
int faceN=faces.length;
byte bw[]=new byte[80+4+faceN*50];
stlHeader(bw, header, faceN);
for(int i=0;i<faceN;i++){
for(int j=0;j<4;j++){
stlSetBits(bw, Float.floatToIntBits(faces[i][j].x), 84+i*50+j*12);
stlSetBits(bw, Float.floatToIntBits(faces[i][j].y), 84+i*50+j*12+4);
stlSetBits(bw, Float.floatToIntBits(faces[i][j].z), 84+i*50+j*12+8);
}
}
saveBytes(filename, bw);
}
void stlSetBits(byte[] b, int bits, int i){//private function
b[i]=byte(bits&0xff); b[i+1]=byte((bits>>8)&0xff); b[i+2]=byte((bits>>16)&0xff); b[i+3]=byte((bits>>24)&0xff);
}
void stlHeader(byte[] b, String header, int N){//private function
for(int i=0;i<80;i++){
if(i<header.length())b[i]=byte(header.charAt(i));
else b[i]=byte(' ');
}
b[80]=byte(N&0xff); b[81]=byte((N>>8)&0xff); b[82]=byte((N>>16)&0xff); b[83]=byte((N>>24)&0xff);
}
void keyPressed(){
if(key=='1') save("img1.jpg");
if(key=='2') save("img2.jpg");
if(key=='s') bStop=!bStop;
}
沒有留言:
張貼留言