[String zerlegen] Gibt's das auch in hübsch?
-
Hallo,
ich arbeite gerade an einem Loader für .obj 3D-Models. In der Datei sind Polygone in der Form "Vertexindex/Texcoordindex/Normalenindex" abgelegt, z.B.:
f 106/1/1 108/2/2 271/3/3Dazu habe ich mir gestern folgenden Code zum Laden zusammengefrickelt:
(Der Einfachheit halber beschränke ich mich bei den Models auf Dreiecke)else if(linetype == "f") //the line contains face data { //each face is specified by a triplet of vertex-, texcoord- and normal-indices //seperated by a single slash //i.e. 10/200/3 std::string vertexstring; for(int ii=0; ii<=2; ii++) { Vertex vertex; linestream >> vertexstring; //linestream ist ein istringstream, der mit der aktuellen Dateizeile gefüttert wird //seperate data by '/' std::string::size_type slashpos = vertexstring.find_first_of("/"); //read vertex index std::istringstream vertex_stream(vertexstring.substr(0, slashpos )); vertex_stream >> vertex.v_index; vertex_stream.clear(); //read texcoord index std::string::size_type slashpos2 = vertexstring.find_first_of("/", slashpos + 1); vertex_stream.str(vertexstring.substr(slashpos + 1 , slashpos2 - slashpos - 1 )); vertex_stream >> vertex.uv_index; vertex_stream.clear(); //read normal index vertex_stream.str(vertexstring.substr(slashpos2 + 1, vertexstring.length() - 1 )); vertex_stream >> vertex.n_index; m_faces.push_back(vertex); } }Wie man unschwer erkennen kann, ist das Ganze nicht besonders lesbar und durch das häufige String-Kopieren wahrscheinlich auch nicht sonderlich performant.
Hat jemand eine Idee wie man das schöner und schneller gestalten könnte?Grüße
Martin
-
Hier gibts eine gute Lösung um Strings zu trennen:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-190246-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-trenner-and-start-is-11.html
Simon