2016-07-06 5 views
0

Beim Exportieren von Meshes mit assimp über Code wie unten gezeigt, erhalte ich sehr begrenzte Präzisionsausgabe. Gibt es einen Weg in assimp Exportzuwachs zu erhöhen? (Nichts deutet dies in der Dokumentation.)Wie können Sie Ausgabedateien mit höherer Genauigkeit von ASSIMP exportieren?

void export(aiScene* scene, const std::string & outputFile) 
{ 
    Assimp::Exporter exporter; 

    // exporter.mOutput.precision(16); ??? 

    exporter.Export(scene, "obj", outputFile); 
} 

Ausgabe in der .obj Datei nicht mehr als 6 Ziffern pro Wert enthalten:

v 557760 4.07449e+06 -49.1995 
v 557760 4.07449e+06 -49.095 
v 557760 4.0745e+06 -49.0082 
v 557760 4.0745e+06 -49.1127 

Wenn bei der tatsächlichen Exporteur Klasse suchen (ObjExporter.cpp) Alle Daten werden durch eine öffentliche stringstream geschrieben:

public: 
    std::ostringstream mOutput, mOutputMat; 

[...] 

mOutput << "# " << vp.size() << " vertex positions" << endl; 
for(const aiVector3D& v : vp) { 
    mOutput << "v " << v.x << " " << v.y << " " << v.z << endl; 
} 
mOutput << endl; 

Ist da eine Möglichkeit, die stringstream Präzision (http://www.cplusplus.com/reference/ios/ios_base/precision/) zu erhöhen, ohne die assimp Quelle zu ändern?

+0

6 die Standardgenauigkeit für Ströme ist, haben Sie versucht, mit std :: setprecision (http: // en .cppreference.com/w/cpp/io/manip/setprecision)? – kfsone

+0

Nein, ich habe das nicht versucht, aber könnte ich das einfach in meinem Code tun (der statisch mit 'assimp' verknüpft ist)? (um klar zu sein - ich suchte nach einer Lösung, ohne den Code in 'assimp' zu ändern, aber das ist vielleicht nicht realistisch) – Chris

+0

Vielleicht erlaubt das Format nicht mehr Präzision? – Mikhail

Antwort

0

Wenn an den verschiedenen Exporteur Klassen im Detail suchen sich heraus, dass einige von ihnen in der Tat eine höhere Präzision für die stringstream intern festgelegt haben, aber es gibt keine Weg (global) definieren diese oder extern ein Pass Fordern Sie einen Export mit höherer Genauigkeit an.

Technisch können Sie in der Lage sein, die tatsächliche Export Klasse zu instanziiert und die stringstream manuell aktualisieren (da es sich um eine öffentliche Membervariable ist), aber das macht den Export viel komplizierter und den Punkt der assimp Verwendung war leicht zu exportieren verschiedene Formate.

ich so assimp aktualisiert haben eine höhere Präzision exportieren Gleitkommawerte wie (zum Beispiel) hier diskutiert: How do I print a double value with full precision using cout?

Verwandte Themen