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

时间:2016-07-06 03:55:22

标签: c++ 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来源的情况下提高assimp精度(http://www.cplusplus.com/reference/ios/ios_base/precision/)?

1 个答案:

答案 0 :(得分:0)

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

从技术上讲,您可以实例化实际的导出类并手动更新stringstream(因为它是一个公共成员变量),但这会使导出更加复杂并且使用{{1很容易导出到不同的格式。

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