Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

rootnode

Frischling

Beiträge: 92

Wohnort: Aachen, Pontstraße

Beruf: Student

  • Private Nachricht senden

11

27.06.2008, 02:52

Also, sscanf gäbe es z.b..

line is einfach mal die aktuell gelesene zeile.

float x, y, z;
sscanf(line, "v %f %f %f", &x, &y, &z);

Ich persönlich bevorzuge aber die boost::spirit Lösung.
Die sähe wie folgt aus:

Du nimmst dir die Zeile und machst folgendes:

C-/C++-Quelltext

1
2
3
4
5
6
7
std::vector<float> vertices;
std::vector<float> faces;
boost::spirit::rule<> vectorline = str_p("v") >> real_p[push_back_a(vertices)];
boost::spirit::rule<> faceline = str_p("v") >> real_p[push_back_a(vertices)];
boost::spirit::rule<> objfile = *(vectorline | faceline)

boost::spirit::parse(dateiInhalt, objfile_grammar, boost::spirit::space_p);


Fertig. Danach hast du in vertices alle vertices drinne. Immer in 3er-päckchen. Da bekommst du die ja leicht raussortiert.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

12

27.06.2008, 09:09

Zitat von »"rootnode"«


Ich persönlich bevorzuge aber die boost::spirit Lösung.


Ich kann immer noch nicht verstehen warum man einer total einfachen Lösung eine so komplexe Lösung vorzieht. Der einzige Vorteil ist die allgepriesene Typsicherheit, allerdings sollte das, gegebenen Fall man kann Programmieren, in dieser Situation weniger problematisch sein. Aber nur weils total C++-like is, auf so komplexe Monster zurückzugreifen... Das ist bescheuert!
@D13_Dreinig

rootnode

Frischling

Beiträge: 92

Wohnort: Aachen, Pontstraße

Beruf: Student

  • Private Nachricht senden

13

27.06.2008, 11:08

Zitat

Ich kann immer noch nicht verstehen warum man einer total einfachen Lösung eine so komplexe Lösung vorzieht. Der einzige Vorteil ist die allgepriesene Typsicherheit, allerdings sollte das, gegebenen Fall man kann Programmieren, in dieser Situation weniger problematisch sein. Aber nur weils total C++-like is, auf so komplexe Monster zurückzugreifen... Das ist bescheuert!


Naja, bescheuert oder nich....aber so kannst du Fällen ausweichen wie "v\t\t\t 1.0 0.0 3.0". Da müsstest du per hand die fälle wie tabs oder mehr als eine Leerstelle abfangen. In der Hinsicht ist die spirit-Lösung dann kürzer und man kann es ganz leicht abändern wenn mans anders braucht.

Um gegebene Dateiformate leicht einzulesen is das eigentlich ne recht gute Methode.

Und am Rande bemerkt: Wenn er jetz mal nur auf die schnelle mit den alten C-Style Stringroutinen rumhantiert is das auch bescheuert. Wenn er die nich richtig einsetzt kann man richtig schöne exploits in seinem Programm nutzen. Da dann lieber etwas sicheres wie boost nutzen. Aber das Thema gehört jetzt nicht hierhin.

14

27.06.2008, 14:42

Es ist eigentlich nur die Frage, ob man sowas öfter machen will oder nicht.
Spirit ist sicherlich ein cooles Ding, und wenn man öfter mal was parsen will, ist man damit wahrscheinlich schneller fertig als mit allen anderem.

Nur ob es sich für ein Problem wie "obj-Dateien" auslesen lohnt, Spirit zu lernen, das muss jeder für sich entscheiden.
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige