2016-07-06 46 views
0

當通過如下所示的代碼導出assimp網格時,我收到非常有限的精度輸出。 assimp有沒有辦法提高出口精度? (沒有在文件中暗示了這一點)。如何從ASSIMP導出更高精度的輸出文件?

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

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

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

輸出在.obj文件將包含每值不超過6個位數:

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 

當實際出口類看(ObjExporter.cpp )的所有數據通過公共stringstream寫着:

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; 

有一種方法,我可以增加stringstream精度(http://www.cplusplus.com/reference/ios/ios_base/precision/),而不必更改assimp源?

+0

6是流的默認精度,你有沒有嘗試使用的std :: setprecision(HTTP:// EN .cppreference.com/W/CPP/IO/MANIP/setprecision)? – kfsone

+0

不,我沒有嘗試過,但我可以在我的代碼中做到這一點(與'assimp'靜態鏈接)? (要清楚 - 我正在尋找一個解決方案,而不更改'assimp'中的代碼,但這可能不現實) – Chris

+0

也許格式不允許更精確? – Mikhail

回答

0

當在詳細很明顯的不同出口的類尋找它們中的一些確實已經設置一個更高精度內部的stringstream,但沒有方式(全局)定義此或外部傳遞請求更高精度的導出。

從技術上講,你可以實例化實際出口類和手動更新stringstream(因爲它是一個公共成員變量),但是這使得出口變得更復雜和使用assimp點是很容易導出到不同的格式。

我這樣已經更新assimp出口更高的精度浮點值(例如)在這裏討論:How do I print a double value with full precision using cout?