Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.75 KB | None | 0 0
  1. void getMesh( ifstream *fin ){
  2.     string  line;
  3.     TRI     *tl;
  4.     TRI     *tt;
  5.     int     i, j, k, l;
  6.     int     ntri;
  7.     vector< VECTOR > vlist;
  8.     vector< VECTOR > nlist;
  9.     vector< VECTOR > clist;
  10.     vector< TRI_INDEX > plist;
  11.  
  12.                                                     //cout << "########## START IMPORTING MESH ##########" << endl;
  13.     getline( *fin, line );
  14.     {
  15.         istringstream out(line);
  16.         out >> ntri;
  17.     }
  18.  
  19.     tl = (TRI*)malloc( sizeof(TRI) * ntri );
  20.  
  21.     for( i = 0; i < ntri; i++ ){
  22.         getline( *fin, line );
  23.         istringstream out(line);
  24.         float blank;
  25.         tt = tl+i;
  26.  
  27.         out >> tt->v[0].x >> tt->v[0].y >> tt->v[0].z
  28.             >> tt->v[1].x >> tt->v[1].y >> tt->v[1].z
  29.             >> tt->v[2].x >> tt->v[2].y >> tt->v[2].z
  30.             >> tt->n.x >> tt->n.y >> tt->n.z
  31.             >> blank >> blank >> blank
  32.             >> tt->c.x >> tt->c.y >> tt->c.z >> tt->c.w;
  33.  
  34.         TRI_INDEX ti = {-1,-1,vlist.size()};
  35.         plist.push_back( ti );
  36.         vlist.push_back( tt->v[2] );
  37.         nlist.push_back( tt->n );
  38.         clist.push_back( tt->c );
  39.     }
  40.                                                     //cout << "########## MESH IMPORT FINISHED ##########" << endl;
  41.                                                     //cout << "########## START MESH DATA PROCESSING ##########" << endl;
  42.     for( i = 0; i < ntri; i++ ){
  43.         tt = tl+i;
  44.         TRI_INDEX *ti1 = &plist.at(i);
  45.         for( j = 0; j < 2; j++ ){
  46.             bool found = false;
  47.             VECTOR *v1 = (tt->v)+j;
  48.  
  49.             for( k = 0; k < plist.size(); k++ ){
  50.                 TRI_INDEX *ti2 = &plist.at(k);
  51.                 for( l = 0; l < 3; l++ ){
  52.                     if( ti2->index[l] >= 0 ){
  53.                         VECTOR *v2 = &vlist.at(ti2->index[l]);
  54.                         if( (v1->x == v2->x) && (v1->y == v2->y) && (v1->z == v2->z) ){
  55.                             ti1->index[j] = ti2->index[l];
  56.                             found = true;
  57.                             break;
  58.                         }
  59.                     }
  60.                 }
  61.                 if(found)break;
  62.             }
  63.  
  64.             if(!found){
  65.                 ti1->index[j] = vlist.size();
  66.                 vlist.push_back( tt->v[j] );
  67.                 nlist.push_back( tt->n );
  68.                 clist.push_back( tt->c );
  69.             }
  70.  
  71.         }
  72.     }
  73.                                                     //cout << "########## MESH DATA PROCESSED ##########" << endl;
  74.  
  75.     cout << "Vertex List Size: " << vlist.size() << endl;
  76.     for( i = 0; i < plist.size(); i++ ){
  77.         TRI_INDEX *ti = &plist.at(i);
  78.         cout << "[" << ti->index[0] << "][" << ti->index[1] << "][" << ti->index[2] << "]" << endl;
  79.     }
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement