如何从 ASSIMP 导出更高精度的输出文件?

How to export higher precision output files from 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

查看实际导出器时 class (ObjExporter.cpp) 所有数据都通过 public 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 源?

当详细查看不同的导出器 classes 时,很明显其中一些确实在内部为 stringstream 设置了 更高 的精度,但是 没有 方法来(全局)定义它或从外部传递请求以获得更高精度的导出。

从技术上讲,您可以实例化实际导出 class 并手动更新 stringstream(因为它是一个 public 成员变量),但这会使导出很多更复杂,使用 assimp 的目的是轻松导出为不同的格式。

因此,我更新了 assimp 以导出更高精度的浮点值,如(例如)此处讨论的那样:How do I print a double value with full precision using cout?