Changeset 226 for trunk/src/formats/md5_loader.cc
- Timestamp:
- 01/05/14 04:43:48 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/formats/md5_loader.cc
r224 r226 23 23 static inline void discard( std::istream& stream, const std::string& token ) 24 24 { 25 // stream.ignore( std::numeric_limits<std::streamsize>::max(), ' ' ); 25 26 std::string discarded; 26 27 stream >> discarded; … … 89 90 else if ( command == "mesh" ) 90 91 { 91 // TODO : efficiency dammit92 92 md5_mesh* mesh = new md5_mesh; 93 93 int num_verts, num_tris, num_weights; … … 108 108 sstream >> num_verts; 109 109 next_line( sstream ); 110 std::string line; 110 111 for ( int i = 0; i < num_verts; ++i ) 111 112 { 112 113 md5_vertex vert; 113 std::string ignore; 114 discard( sstream, "vert" ); 115 sstream >> ignore; 116 discard( sstream, "(" ); 117 sstream >> vert.texcoord.x >> vert.texcoord.y; 118 discard( sstream, ")" ); 119 sstream >> vert.start_weight >> vert.weight_count; 120 next_line( sstream ); 114 115 std::getline( sstream, line ); 116 sscanf( line.c_str(), "%*s %*u ( %f %f ) %u %u", &(vert.texcoord.x), &(vert.texcoord.y), &(vert.start_weight), &(vert.weight_count) ); 117 118 // std::string ignore; 119 // discard( sstream, "vert" ); 120 // sstream >> ignore; 121 // discard( sstream, "(" ); 122 // sstream >> vert.texcoord.x >> vert.texcoord.y; 123 // discard( sstream, ")" ); 124 // sstream >> vert.start_weight >> vert.weight_count; 125 // next_line( sstream ); 121 126 122 127 mesh->verts.push_back(vert); … … 128 133 sstream >> num_tris; 129 134 next_line( sstream ); 135 std::string line; 130 136 for ( int i = 0; i < num_tris; ++i ) 131 137 { 132 138 md5_triangle tri; 133 std::string ignore; 134 discard( sstream, "tri" ); 135 sstream >> ignore >> tri.indices[0] >> tri.indices[1] >> tri.indices[2]; 136 next_line( sstream ); 139 140 std::getline( sstream, line ); 141 sscanf( line.c_str(), "%*s %*u %u %u %u )", &(tri.indices[0]), &(tri.indices[1]), &(tri.indices[2])); 142 143 // std::string ignore; 144 // discard( sstream, "tri" ); 145 // sstream >> ignore >> tri.indices[0] >> tri.indices[1] >> tri.indices[2]; 146 // next_line( sstream ); 137 147 138 148 mesh->tris.push_back( tri ); … … 145 155 { 146 156 sstream >> num_weights; 157 mesh->weights.reserve( num_weights ); 147 158 next_line( sstream ); 159 std::string line; 148 160 for ( int i = 0; i < num_weights; ++i ) 149 161 { 150 162 md5_weight weight; 151 std::string ignore; 152 discard( sstream, "weight" ); 153 sstream >> ignore >> weight.joint_id >> weight.bias; 154 discard( sstream, "(" ); 155 sstream >> weight.pos.x >> weight.pos.y >> weight.pos.z; 156 discard( sstream, ")" ); 157 next_line( sstream ); 158 mesh->weights.push_back(weight); 163 164 std::getline( sstream, line ); 165 sscanf( line.c_str(), "%*s %*u %u %f ( %f %f %f )", &(weight.joint_id), &(weight.bias), &(weight.pos.x), &(weight.pos.y), &(weight.pos.z)); 166 167 // std::string ignore; 168 // discard( sstream, "weight" ); 169 // sstream >> ignore >> weight.joint_id >> weight.bias; 170 // discard( sstream, "(" ); 171 // sstream >> weight.pos.x >> weight.pos.y >> weight.pos.z; 172 // discard( sstream, ")" ); 173 // next_line( sstream ); 174 mesh->weights.push_back(weight); 159 175 } 160 176 } … … 425 441 next_line( sstream ); 426 442 443 frame.frame_data.reserve( m_num_animated_components ); 444 char buf[50]; 427 445 for ( size_t i = 0; i < m_num_animated_components; ++i ) 428 446 { 429 float frameData; 430 sstream >> frameData; 431 frame.frame_data.push_back(frameData); 447 sstream >> buf; 448 frame.frame_data.push_back((float)atof(buf)); 432 449 } 433 450
Note: See TracChangeset
for help on using the changeset viewer.