Minggu, 17 Oktober 2010

2209 105 030 - Membuat Guci 3D dengan openCV


2209 105 030  -  HERU SUSANTO
Membuat Guci 3D dengan openCV

Sebuah guci diperoleh dari pembentukan kembali sebuah tabung tutup atas terbukan.  Pada bagian body dilakukan penandaan titik lekukan yang akan dijadikan sebagai dasar body guci. Sebuah guci yang baik adalah memiliki lekukan face yang halus dan natural.



Contoh penggalan listing program :
void makeCylinderN(object3D_t &silinder,int m,int n,float r[],float h[],int sw){
       float a=6.26/n;
       float b=0;
       int i,j;
       silinder.NumberofVertices=(m+1)*n;
       for(i=0;i<=m;i++){
              if(i>0) b=b+h[i-1];
              for(j=0;j<n;j++){
                     silinder.pnt[i*n+j].x=r[i]*cos(j*a);
                     silinder.pnt[i*n+j].y=b;
                     silinder.pnt[i*n+j].z=r[i]*sin(j*a);
              }
       }
       silinder.NumberofFaces=m*n+2;
       for(i=0;i<m;i++){
              for(j=0;j<n;j++){
                     silinder.fc[i*n+j].NumberofVertices=4;
                     silinder.fc[i*n+j].pnt[0]=i*n+j;
                     silinder.fc[i*n+j].pnt[1]=(i+1)*n+j;
                     silinder.fc[i*n+j].pnt[2]=(i+1)*n+j+1;
                     silinder.fc[i*n+j].pnt[3]=i*n+j+1;
                     if(j==(n-1)){
                           silinder.fc[i*n+j].pnt[2]=i*n+j+1;
                           silinder.fc[i*n+j].pnt[3]=(i-1)*n+j+1;
                     }
              }
       }
       if(sw==0 || sw==1){
              silinder.fc[m*n].NumberofVertices=n;
              for(i=0;i<n;i++) silinder.fc[m*n].pnt[i]=i;
       }
       if(sw==0 || sw==2){
              silinder.fc[m*n+1].NumberofVertices=n;
              for(i=0;i<n;i++) silinder.fc[m*n+1].pnt[i]=(m+1)*n-1-i;
       }
       color_t c={1,1,0};
       for(i=0;i<silinder.NumberofFaces;i++) silinder.fc[i].col=c;
       for(i=0;i<silinder.NumberofVertices;i++)
              silinder.col[i]=c;
}

Tidak ada komentar:

Posting Komentar